人工呼吸

読んだ。

INTENSIVIST Vol.10 No.3 2018 (特集:人工呼吸器)

INTENSIVIST Vol.10 No.3 2018 (特集:人工呼吸器)

  • メディカルサイエンスインターナショナル
Amazon
INTENSIVIST Vol.4 No.4 2012 (特集:呼吸器離脱)

INTENSIVIST Vol.4 No.4 2012 (特集:呼吸器離脱)

  • メディカルサイエンスインターナショナル
Amazon
安かったので呼吸器離脱を買っては積んでいて、某新型肺炎の人工呼吸器患者が増えたせい(?)で人工呼吸器本が売れた(?)ため一時期人工呼吸のほうはずいぶん高値で取引されていたが、ようやく余り始めた(?)のか買って、結局某新型肺炎の診療をせざるを得なくなったので読んだ。
結論から言うとよかった。

呼吸器離脱のほうが2012年と早くに出版されたので、人工呼吸器そのものや呼吸器のモードはあまりページが割かれておらず、離脱するには、とか抜管するには、とかそういう話が多い。それでも、離脱困難患者の基礎医学①呼吸仕事と呼吸筋疲労のp784 では

しかし逆に、楽にに自発呼吸をしている患者に対し、サポート圧を低下させることで持続的にそれ以上の負荷を与え、筋力を鍛えようとすることには意味がないと報告されている。また、筋力を鍛えようと、呼吸器離脱の途中で段階的に圧を下げていくとことも、人工呼吸期間の短縮には貢献しないとされる。

Discontinuing mechanical ventilatory support
と書かれていて、一生懸命自発呼吸からPS(pressure support)を5〜6cmH2Oまで下げてから抜管、みたいなことをしていたので参考になった。そうなるとSmartCare の存在意義がなくなると思ったがどうなのだろう。ちなみにEvita はあるがSmartCare は使ったことがない。

人工呼吸器はそれから遅れること2018年に出版されたようだが、ここで人工呼吸のモードや会社による人工呼吸器の違いなどが割と細かく説明されている。呼吸器離脱ではSIMVは使うな、としか書かれていないが、こちらでは補助換気と自発呼吸が短い間隔で切り替わることによって呼吸中枢が追いついていけないから、みたいなことが書かれていてようやく腑に落ちる。とはいっても人工呼吸器から読んだのでわかっていたが。
人工呼吸器の機械とモードの多さと混乱具合が述べられていて、この教科書にもこう書いてある。

There are nearly 300 commercial names for modes of ventilation and no standardized vocabulary nor classification system.
CHAPTER 92 Design and function of mechanical ventilators

300もあれば比較試験はほとんど無理なもので、だいたいなにか使えばまあ適当にどうにかなるのだろう(適当

年収○千万円は税金で半分持っていかれる、というのは本当なのか?

ここでポチポチ入力しながら遊んでいた。
最新手取り給与計算機|手取り給与に落胆!? 知っておきたい手取りと額面の違い | ファンジョブ


税金計算というのをほとんどやったことがない。というのは確定申告くらいはしたことあるので言い過ぎだが、かといって確定申告もウェブ上でポチポチやっているだけなので、実際に何がどれくらいかかって税金として徴収されているのかは知らない、というのが現状である。
ものすごい雑には、健康保険料、健康保険料、介護保険料、厚生年金保険料、雇用保険料が(額面)給与から引かれ、その引かれた額について、扶養家族人数を考慮した上で源泉所得税が適応され、最終的な手取り額、となる。
ここで、各種税金は都道府県単位で表が存在しているが、とある自治体を選択したとして、源泉所得税の計算表は、(色々税金を引かれた上で)対象額が月額740000円までなら対応表が存在していて、740000円を超えると、740000円までは計算表で、740000円を超える部分には20.42%に相当する金額を加算する、とある。これは3,500,000円まで段階が作ってあり、この時点では3,500,000円を超えた部分の45.945%が徴収される、ということになる。これを指して「高収入は半分税金に持っていかれる」といっているのだと思う。

というわけで税金シミュレーターを作成した。45歳(介護保険料を支払うため)、扶養家族3人と仮定した。
月収50万(額面年収600万)から10万円ごとに月収を増加させたときの手取りは、以下のようになる。
f:id:MikuHatsune:20210926230527p:plain
\Delta手取り/\Delta月収を考えると、月収200万(額面年収2400万)からおよそ59%の手取り増加、月収380万(額面年収4560万)からおよそ54%の手取り増加、となる。
f:id:MikuHatsune:20210926231148p:plain

f <- function(income, age=35, p_koyo=3/1000, n_fuyo=0,
              gensen=c(20.42, 23.483, 33.693, 40.84, 40.84, 40.84, 40.84)/100){
  idx <- which(income <= a[,4])[1]
  kaigo <- ifelse(age>=40 & age <= 65, a[idx, 7], 0)
  kenko <- a[idx, 6]
  kosei <- a[idx, 9]
  koyo <- income*p_koyo
  out <- income-kaigo-kenko-kosei-koyo
  j <- which(out <= b[,2])[1]
  gensensyotokuzei <- round((out - b[j, 1])*b[j, 10] + b[j, 3+n_fuyo])
  res <- c("健康保険"=kenko, "介護保険"=kaigo, "厚生年金"=kosei, "雇用保険"=koyo, "源泉所得税"=gensensyotokuzei)
  return(res)
}


income <- seq(500000, 100000000/12, by=100000)
g <- mapply(f, income, age=45, n_fuyo=3)
y <- income - colSums(g)
income <- income/10000
y <- y/10000
xl <- yl <- c(0, max(income, y))

par(mar=c(5, 5, 3, 4), cex.lab=1.5, cex.axis=1.2)
plot(income, y, xlim=xl, ylim=yl, type="o", pch=15, xlab="月収", ylab="手取り月収")
abline(0, 1, lty=3)
pa <- par()
xx <- seq(pa$xaxp[1], pa$xaxp[2], length=pa$xaxp[3]+1)
axis(3, at=xx, labels=xx*12)
axis(4, at=xx, labels=xx*12)

d <- diff(y)/diff(income)
yl <- c(0, 1)
par(mar=c(5, 5, 3, 2), cex.lab=1.5, cex.axis=1.2, las=1)
plot(income[-1], d, xlim=xl, ylim=yl, type="o", pch=15, xlab="月収", ylab="手取りの増分/月収の増分")
pa <- par()
xx <- seq(pa$xaxp[1], pa$xaxp[2], length=pa$xaxp[3]+1)
axis(3, at=xx, labels=xx*12)
a <- read.csv(text="
健,年,報酬月額下限,報酬月額上限,月額,健康保険,介護保険,健康+介護,厚生年金
1,1,0,63000,58000,2917,522,3439.40,8052
2,1,63000,73000,68000,3420,612,4032.40,8052
3,1,73000,83000,78000,3923,702,4625.40,8052
4,1,83000,93000,88000,4426,792,5218.40,8052
5,2,93000,101000,98000,4929,882,5811.40,8967
6,3,101000,107000,104000,5231,936,6167.20,9516
7,4,107000,114000,110000,5533,990,6523.00,10065
8,5,114000,122000,118000,5935,1062,6997.40,10797
9,6,122000,130000,126000,6338,1134,7471.80,11529
10,7,130000,138000,134000,6740,1206,7946.20,12261
11,8,138000,146000,142000,7143,1278,8420.60,12993
12,9,146000,155000,150000,7545,1350,8895.00,13725
13,10,155000,165000,160000,8048,1440,9488.00,14640
14,11,165000,175000,170000,8551,1530,10081.00,15555
15,12,175000,185000,180000,9054,1620,10674.00,16470
16,13,185000,195000,190000,9557,1710,11267.00,17385
17,14,195000,210000,200000,10060,1800,11860.00,18300
18,15,210000,230000,220000,11066,1980,13046.00,20130
19,16,230000,250000,240000,12072,2160,14232.00,21960
20,17,250000,270000,260000,13078,2340,15418.00,23790
21,18,270000,290000,280000,14084,2520,16604.00,25620
22,19,290000,310000,300000,15090,2700,17790.00,27450
23,20,310000,330000,320000,16096,2880,18976.00,29280
24,21,330000,350000,340000,17102,3060,20162.00,31110
25,22,350000,370000,360000,18108,3240,21348.00,32940
26,23,370000,395000,380000,19114,3420,22534.00,34770
27,24,395000,425000,410000,20623,3690,24313.00,37515
28,25,425000,455000,440000,22132,3960,26092.00,40260
29,26,455000,485000,470000,23641,4230,27871.00,43005
30,27,485000,515000,500000,25150,4500,29650.00,45750
31,28,515000,545000,530000,26659,4770,31429.00,48495
32,29,545000,575000,560000,28168,5040,33208.00,51240
33,30,575000,605000,590000,29677,5310,34987.00,53985
34,31,605000,635000,620000,31186,5580,36766.00,56730
35,32,635000,665000,650000,32695,5850,38545.00,59475
36,32,665000,695000,680000,34204,6120,40324.00,59475
37,32,695000,730000,710000,35713,6390,42103.00,59475
38,32,730000,770000,750000,37725,6750,44475.00,59475
39,32,770000,810000,790000,39737,7110,46847.00,59475
40,32,810000,855000,830000,41749,7470,49219.00,59475
41,32,855000,905000,880000,44264,7920,52184.00,59475
42,32,905000,955000,930000,46779,8370,55149.00,59475
43,32,955000,1005000,980000,49294,8820,58114.00,59475
44,32,1005000,1055000,1030000,51809,9270,61079.00,59475
45,32,1055000,1115000,1090000,54827,9810,64637.00,59475
46,32,1115000,1175000,1150000,57845,10350,68195.00,59475
47,32,1175000,1235000,1210000,60863,10890,71753.00,59475
48,32,1235000,1295000,1270000,63881,11430,75311.00,59475
49,32,1295000,1355000,1330000,66899,11970,78869.00,59475
50,32,1355000,99999999999,1390000,69917,12510,82427.00,59475
", header=TRUE)


b <- read.table(text="
88000 89000 130 0 0 0 0 0 0 0
89000 90000 180 0 0 0 0 0 0 0
90000 91000 230 0 0 0 0 0 0 0
91000 92000 290 0 0 0 0 0 0 0
92000 93000 340 0 0 0 0 0 0 0
93000 94000 390 0 0 0 0 0 0 0
94000 95000 440 0 0 0 0 0 0 0
95000 96000 490 0 0 0 0 0 0 0
96000 97000 540 0 0 0 0 0 0 0
97000 98000 590 0 0 0 0 0 0 0
98000 99000 640 0 0 0 0 0 0 0
99000 101000 720 0 0 0 0 0 0 0
101000 103000 830 0 0 0 0 0 0 0
103000 105000 930 0 0 0 0 0 0 0
105000 107000 1030 0 0 0 0 0 0 0
107000 109000 1130 0 0 0 0 0 0 0
109000 111000 1240 0 0 0 0 0 0 0
111000 113000 1340 0 0 0 0 0 0 0
113000 115000 1440 0 0 0 0 0 0 0
115000 117000 1540 0 0 0 0 0 0 0
117000 119000 1640 0 0 0 0 0 0 0
119000 121000 1750 120 0 0 0 0 0 0
121000 123000 1850 220 0 0 0 0 0 0
123000 125000 1950 330 0 0 0 0 0 0
125000 127000 2050 430 0 0 0 0 0 0
127000 129000 2150 530 0 0 0 0 0 0
129000 131000 2260 630 0 0 0 0 0 0
131000 133000 2360 740 0 0 0 0 0 0
133000 135000 2460 840 0 0 0 0 0 0
135000 137000 2550 930 0 0 0 0 0 0
137000 139000 2610 990 0 0 0 0 0 0
139000 141000 2680 1050 0 0 0 0 0 0
141000 143000 2740 1110 0 0 0 0 0 0
143000 145000 2800 1170 0 0 0 0 0 0
145000 147000 2860 1240 0 0 0 0 0 0
147000 149000 2920 1300 0 0 0 0 0 0
149000 151000 2980 1360 0 0 0 0 0 0
151000 153000 3050 1430 0 0 0 0 0 0
153000 155000 3120 1500 0 0 0 0 0 0
155000 157000 3200 1570 0 0 0 0 0 0
157000 159000 3270 1640 0 0 0 0 0 0
159000 161000 3340 1720 100 0 0 0 0 0
161000 163000 3410 1790 170 0 0 0 0 0
163000 165000 3480 1860 250 0 0 0 0 0
165000 167000 3550 1930 320 0 0 0 0 0
167000 169000 3620 2000 390 0 0 0 0 0
169000 171000 3700 2070 460 0 0 0 0 0
171000 173000 3770 2140 530 0 0 0 0 0
173000 175000 3840 2220 600 0 0 0 0 0
175000 177000 3910 2290 670 0 0 0 0 0
177000 179000 3980 2360 750 0 0 0 0 0
179000 181000 4050 2430 820 0 0 0 0 0
181000 183000 4120 2500 890 0 0 0 0 0
183000 185000 4200 2570 960 0 0 0 0 0
185000 187000 4270 2640 1030 0 0 0 0 0
187000 189000 4340 2720 1100 0 0 0 0 0
189000 191000 4410 2790 1170 0 0 0 0 0
191000 193000 4480 2860 1250 0 0 0 0 0
193000 195000 4550 2930 1320 0 0 0 0 0
195000 197000 4630 3000 1390 0 0 0 0 0
197000 199000 4700 3070 1460 0 0 0 0 0
199000 201000 4770 3140 1530 0 0 0 0 0
201000 203000 4840 3220 1600 0 0 0 0 0
203000 205000 4910 3290 1670 0 0 0 0 0
205000 207000 4980 3360 1750 130 0 0 0 0
207000 209000 5050 3430 1820 200 0 0 0 0
209000 211000 5130 3500 1890 280 0 0 0 0
211000 213000 5200 3570 1960 350 0 0 0 0
213000 215000 5270 3640 2030 420 0 0 0 0
215000 217000 5340 3720 2100 490 0 0 0 0
217000 219000 5410 3790 2170 560 0 0 0 0
219000 221000 5480 3860 2250 630 0 0 0 0
221000 224000 5560 3950 2340 710 0 0 0 0
224000 227000 5680 4060 2440 830 0 0 0 0
227000 230000 5780 4170 2550 930 0 0 0 0
230000 233000 5890 4280 2650 1040 0 0 0 0
233000 236000 5990 4380 2770 1140 0 0 0 0
236000 239000 6110 4490 2870 1260 0 0 0 0
239000 242000 6210 4590 2980 1360 0 0 0 0
242000 245000 6320 4710 3080 1470 0 0 0 0
245000 248000 6420 4810 3200 1570 0 0 0 0
248000 251000 6530 4920 3300 1680 0 0 0 0
251000 254000 6640 5020 3410 1790 170 0 0 0
254000 257000 6750 5140 3510 1900 290 0 0 0
257000 260000 6850 5240 3620 2000 390 0 0 0
260000 263000 6960 5350 3730 2110 500 0 0 0
263000 266000 7070 5450 3840 2220 600 0 0 0
266000 269000 7180 5560 3940 2330 710 0 0 0
269000 272000 7280 5670 4050 2430 820 0 0 0
272000 275000 7390 5780 4160 2540 930 0 0 0
275000 278000 7490 5880 4270 2640 1030 0 0 0
278000 281000 7610 5990 4370 2760 1140 0 0 0
281000 284000 7710 6100 4480 2860 1250 0 0 0
284000 287000 7820 6210 4580 2970 1360 0 0 0
287000 290000 7920 6310 4700 3070 1460 0 0 0
290000 293000 8040 6420 4800 3190 1570 0 0 0
293000 296000 8140 6520 4910 3290 1670 0 0 0
296000 299000 8250 6640 5010 3400 1790 160 0 0
299000 302000 8420 6740 5130 3510 1890 280 0 0
302000 305000 8670 6860 5250 3630 2010 400 0 0
305000 308000 8910 6980 5370 3760 2130 520 0 0
308000 311000 9160 7110 5490 3880 2260 640 0 0
311000 314000 9400 7230 5620 4000 2380 770 0 0
314000 317000 9650 7350 5740 4120 2500 890 0 0
317000 320000 9890 7470 5860 4250 2620 1010 0 0
320000 323000 10140 7600 5980 4370 2750 1130 0 0
323000 326000 10380 7720 6110 4490 2870 1260 0 0
326000 329000 10630 7840 6230 4610 2990 1380 0 0
329000 332000 10870 7960 6350 4740 3110 1500 0 0
332000 335000 11120 8090 6470 4860 3240 1620 0 0
335000 338000 11360 8210 6600 4980 3360 1750 130 0
338000 341000 11610 8370 6720 5110 3480 1870 260 0
341000 344000 11850 8620 6840 5230 3600 1990 380 0
344000 347000 12100 8860 6960 5350 3730 2110 500 0
347000 350000 12340 9110 7090 5470 3850 2240 620 0
350000 353000 12590 9350 7210 5600 3970 2360 750 0
353000 356000 12830 9600 7330 5720 4090 2480 870 0
356000 359000 13080 9840 7450 5840 4220 2600 990 0
359000 362000 13320 10090 7580 5960 4340 2730 1110 0
362000 365000 13570 10330 7700 6090 4460 2850 1240 0
365000 368000 13810 10580 7820 6210 4580 2970 1360 0
368000 371000 14060 10820 7940 6330 4710 3090 1480 0
371000 374000 14300 11070 8070 6450 4830 3220 1600 0
374000 377000 14550 11310 8190 6580 4950 3340 1730 0
377000 380000 14790 11560 8320 6700 5070 3460 1850 0
380000 383000 15040 11800 8570 6820 5200 3580 1970 0
383000 386000 15280 12050 8810 6940 5320 3710 2090 0
386000 389000 15530 12290 9060 7070 5440 3830 2220 0
389000 392000 15770 12540 9300 7190 5560 3950 2340 0
392000 395000 16020 12780 9550 7310 5690 4070 2460 0
395000 398000 16260 13030 9790 7430 5810 4200 2580 0
398000 401000 16510 13270 10040 7560 5930 4320 2710 0
401000 404000 16750 13520 10280 7680 6050 4440 2830 0
404000 407000 17000 13760 10530 7800 6180 4560 2950 0
407000 410000 17240 14010 10770 7920 6300 4690 3070 0
410000 413000 17490 14250 11020 8050 6420 4810 3200 0
413000 416000 17730 14500 11260 8170 6540 4930 3320 0
416000 419000 17980 14740 11510 8290 6670 5050 3440 0
419000 422000 18220 14990 11750 8530 6790 5180 3560 0
422000 425000 18470 15230 12000 8770 6910 5300 3690 0
425000 428000 18710 15480 12240 9020 7030 5420 3810 0
428000 431000 18960 15720 12490 9260 7160 5540 3930 0
431000 434000 19210 15970 12730 9510 7280 5670 4050 0
434000 437000 19450 16210 12980 9750 7400 5790 4180 0
437000 440000 19700 16460 13220 10000 7520 5910 4300 0
440000 443000 20090 16700 13470 10240 7650 6030 4420 0
443000 446000 20580 16950 13710 10490 7770 6160 4540 0
446000 449000 21070 17190 13960 10730 7890 6280 4670 0
449000 452000 21560 17440 14200 10980 8010 6400 4790 0
452000 455000 22050 17680 14450 11220 8140 6520 4910 0
455000 458000 22540 17930 14690 11470 8260 6650 5030 0
458000 461000 23030 18170 14940 11710 8470 6770 5160 0
461000 464000 23520 18420 15180 11960 8720 6890 5280 0
464000 467000 24010 18660 15430 12200 8960 7010 5400 0
467000 470000 24500 18910 15670 12450 9210 7140 5520 0
470000 473000 24990 19150 15920 12690 9450 7260 5650 0
473000 476000 25480 19400 16160 12940 9700 7380 5770 0
476000 479000 25970 19640 16410 13180 9940 7500 5890 0
479000 482000 26460 20000 16650 13430 10190 7630 6010 0
482000 485000 26950 20490 16900 13670 10430 7750 6140 0
485000 488000 27440 20980 17140 13920 10680 7870 6260 0
488000 491000 27930 21470 17390 14160 10920 7990 6380 0
491000 494000 28420 21960 17630 14410 11170 8120 6500 0
494000 497000 28910 22450 17880 14650 11410 8240 6630 0
497000 500000 29400 22940 18120 14900 11660 8420 6750 0
500000 503000 29890 23430 18370 15140 11900 8670 6870 0
503000 506000 30380 23920 18610 15390 12150 8910 6990 0
506000 509000 30880 24410 18860 15630 12390 9160 7120 0
509000 512000 31370 24900 19100 15880 12640 9400 7240 0
512000 515000 31860 25390 19350 16120 12890 9650 7360 0
515000 518000 32350 25880 19590 16370 13130 9890 7480 0
518000 521000 32840 26370 19900 16610 13380 10140 7610 0
521000 524000 33330 26860 20390 16860 13620 10380 7730 0
524000 527000 33820 27350 20880 17100 13870 10630 7850 0
527000 530000 34310 27840 21370 17350 14110 10870 7970 0
530000 533000 34800 28330 21860 17590 14360 11120 8100 0
533000 536000 35290 28820 22350 17840 14600 11360 8220 0
536000 539000 35780 29310 22840 18080 14850 11610 8380 0
539000 542000 36270 29800 23330 18330 15090 11850 8630 0
542000 545000 36760 30290 23820 18570 15340 12100 8870 0
545000 548000 37250 30780 24310 18820 15580 12340 9120 0
548000 551000 37740 31270 24800 19060 15830 12590 9360 0
551000 554000 38280 31810 25340 19330 16100 12860 9630 0
554000 557000 38830 32370 25890 19600 16380 13140 9900 0
557000 560000 39380 32920 26440 19980 16650 13420 10180 0
560000 563000 39930 33470 27000 20530 16930 13690 10460 0
563000 566000 40480 34020 27550 21080 17200 13970 10730 0
566000 569000 41030 34570 28100 21630 17480 14240 11010 0
569000 572000 41590 35120 28650 22190 17760 14520 11280 0
572000 575000 42140 35670 29200 22740 18030 14790 11560 0
575000 578000 42690 36230 29750 23290 18310 15070 11830 0
578000 581000 43240 36780 30300 23840 18580 15350 12110 0
581000 584000 43790 37330 30850 24390 18860 15620 12380 0
584000 587000 44340 37880 31410 24940 19130 15900 12660 0
587000 590000 44890 38430 31960 25490 19410 16170 12940 0
590000 593000 45440 38980 32510 26050 19680 16450 13210 0
593000 596000 46000 39530 33060 26600 20130 16720 13490 0
596000 599000 46550 40080 33610 27150 20690 17000 13760 0
599000 602000 47100 40640 34160 27700 21240 17280 14040 0
602000 605000 47650 41190 34710 28250 21790 17550 14310 0
605000 608000 48200 41740 35270 28800 22340 17830 14590 0
608000 611000 48750 42290 35820 29350 22890 18100 14870 0
611000 614000 49300 42840 36370 29910 23440 18380 15140 0
614000 617000 49860 43390 36920 30460 23990 18650 15420 0
617000 620000 50410 43940 37470 31010 24540 18930 15690 0
620000 623000 50960 44500 38020 31560 25100 19210 15970 0
623000 626000 51510 45050 38570 32110 25650 19480 16240 0
626000 629000 52060 45600 39120 32660 26200 19760 16520 0
629000 632000 52610 46150 39680 33210 26750 20280 16800 0
632000 635000 53160 46700 40230 33760 27300 20830 17070 0
635000 638000 53710 47250 40780 34320 27850 21380 17350 0
638000 641000 54270 47800 41330 34870 28400 21930 17620 0
641000 644000 54820 48350 41880 35420 28960 22480 17900 0
644000 647000 55370 48910 42430 35970 29510 23030 18170 0
647000 650000 55920 49460 42980 36520 30060 23590 18450 0
650000 653000 56470 50010 43540 37070 30610 24140 18730 0
653000 656000 57020 50560 44090 37620 31160 24690 19000 0
656000 659000 57570 51110 44640 38180 31710 25240 19280 0
659000 662000 58130 51660 45190 38730 32260 25790 19550 0
662000 665000 58680 52210 45740 39280 32810 26340 19880 0
665000 668000 59230 52770 46290 39830 33370 26890 20430 0
668000 671000 59780 53320 46840 40380 33920 27440 20980 0
671000 674000 60330 53870 47390 40930 34470 28000 21530 0
674000 677000 60880 54420 47950 41480 35020 28550 22080 0
677000 680000 61430 54970 48500 42030 35570 29100 22640 0
680000 683000 61980 55520 49050 42590 36120 29650 23190 0
683000 686000 62540 56070 49600 43140 36670 30200 23740 0
686000 689000 63090 56620 50150 43690 37230 30750 24290 0
689000 692000 63640 57180 50700 44240 37780 31300 24840 0
692000 695000 64190 57730 51250 44790 38330 31860 25390 0
695000 698000 64740 58280 51810 45340 38880 32410 25940 0
698000 701000 65290 58830 52360 45890 39430 32960 26490 0
701000 704000 65840 59380 52910 46450 39980 33510 27050 0
704000 707000 66400 59930 53460 47000 40530 34060 27600 0
707000 710000 66960 60480 54020 47550 41090 34620 28150 0
710000 713000 67570 61100 54630 48160 41700 35230 28760 0
713000 716000 68180 61710 55250 48770 42310 35850 29370 0
716000 719000 68790 62320 55860 49390 42920 36460 29990 0
719000 722000 69410 62930 56470 50000 43540 37070 30600 0
722000 725000 70020 63550 57080 50610 44150 37690 31210 0
725000 728000 70630 64160 57700 51220 44760 38300 31820 0
728000 731000 71250 64770 58310 51840 45370 38910 32440 0
731000 734000 71860 65380 58920 52450 45990 39520 33050 0
734000 737000 72470 66000 59530 53060 46600 40140 33660 0
737000 740000 73080 66610 60150 53670 47210 40750 34270 0
740000 780000 73390 66920 60450 53980 47520 41050 34580 0.2042
780000 950000 81560 75090 68620 62150 55690 49220 42750 0.23483
950000 1700000 121480 115010 108540 102070 95610 89140 82670 0.33693
1700000 2170000 374180 367710 361240 354770 348310 341840 335370 0.4084
2170000 2210000 571570 565090 558630 552160 545690 539230 532760 0.4084
2210000 2250000 593340 586870 580410 573930 567470 561010 554540 0.4084
2250000 3500000 615120 608650 602190 595710 589250 582790 576310 0.4084
3500000 9999999999 1125620 1119150 1112690 1106210 1099750 1093290 1086810 0.45945
", header=FALSE)

ECMO

読んだ。

VVECMOが扱える高度医療人()になれと言われて講習会なるものに強制参加させられたら、後日参加者宛に届いた。

みなさんご存知の通り、新型肺炎が流行ってVVECMOの機会が増えている。
自分も集中治療をやる前は所属施設でインフルエンザ肺炎が激烈になって2年に1回あるかないか、くらいなのを聞いていた程度だったが、集中治療をやるハメになってからもう5例くらい出くわしている。
VVECMOのみならず、体外補助循環の基礎や、VAECMOいわゆるPCPSの話も当然書いてあるので、それなりには役に立つ。というかVAECMOにも出くわした。
ただ高いので、読むなら

INTENSIVIST Vol.5 No.2 2013 (特集:ECMO)

INTENSIVIST Vol.5 No.2 2013 (特集:ECMO)

  • メディカルサイエンスインターナショナル
Amazon
がいいと思う。COVID-19が流行する前に入手しておいたのでかなり安かった。

legend 内部で数式を混在させながら左揃えで2行にわたってテキストを書きたい

結論から言うと、substitute 関数を使って数式を記述し、atop を分子と分母について2行にわたって記述したいテキストに対してそれぞれ使う。ただし、分数表記でいうと微妙に高さがずれるので、atop は中央の括線を書かないので気にしない、ということにすればなんとかなる。

こんな感じの図を書きたいと思った。
f:id:MikuHatsune:20210809223005p:plain
カプランマイヤーの生存曲線だが、3群比較で、Cox 比例ハザード比を用いて、対照となる群に対して残りの2群のp値やハザード比、95%信頼区間legend に詳細に書きたいのだが、pはイタリックでpにしたいし、1行に全部書いていたら長くなりすぎるため、2行にしたかった。
ここで、最も簡単に左揃えで2行にテキストを収めるには、Result; p = 0.123\nhogehoge と改行コードを含めてテキストオブジェクトを作ることだが、これをするとp が数式扱いされず、イタリックにならない。これでは見栄えが許されない。

簡単に数式を含むテキストを作成するには、substitute 関数を使えばよい。しかし、substitute に改行コードを含めても、残念ながら改行してくれない。

ということで、2行にする場合には、無理やり分数として記述すればよい。substitute で分数を記述する場合には、中央の括線を書く場合にはover、書かない場合にはatop で書ける。しかし、何も考えずにatop を使った場合には、分子と分母にくるテキストの長さが異なる場合、それぞれ中央寄せになってしまう。

なので、分子だけをatop で記述し、次に分母だけをatop で再度記述することで、分子と空の分母、空の分子と分母のテキストをそれぞれ書くことになり、それぞれが勝手に左寄せになる、ということで無理やり左寄せ2行テキストを書いた。
しかしこれでは、テキストの上下配置が微妙に異なることがあり、検証用にover で書いてみたところ、括線がずれていたので気持ち悪さが残るが、atop なら透明なので気にしないことにすれば、目的は達成される。
ちなみに空の数式テキストはphantom(0) である。

latex2exp もあるよ、とは教えてもらったが、latex2exp はmatrix などの記法に対応していないので使えなかった。

f:id:MikuHatsune:20210809223022p:plain

library(survival)
library(prodlim)
  
dat <- cbind.data.frame(treatment=bladder1$treatment,
             time=bladder1$stop - bladder1$start,
             event=ifelse(bladder1$status > 0, 1, 0))

f <- coxph(Surv(time, event) ~ treatment, dat)
g <- summary(f)

s <- survfit(Surv(time, event, type="right") ~ treatment, data=dat)
s <- prodlim(Hist(time, event) ~ treatment, data=dat)

cols <- c("red", "blue", "green")
names(cols) <- levels(dat$treatment)

xl <- c(0, 60)
yl <- c(0, 1)
at.t <- seq(0, max(xl), by=10)
axis1.at <- seq(0, max(xl), by=5)
axis2.at <- seq(0, max(yl), by=0.1)

par(mar=c(3, 4, 2, 2), las=1)
plot(s, atrisk.labels=sprintf("%s: ", names(cols)), xlim=xl, ylim=yl,
     xlab="Follow-up time [month]", ylab="",
     col=cols, atrisk.title="Treatment",
     axis1.at=axis1.at, axis1.labels=axis1.at,
     axis2.at=axis2.at, axis2.labels=axis2.at*100,
     atrisk.at=at.t, atrisk.font=2, atrisk.cex=1.3,
     legend.x="bottomright", legend.cex=1, legend=FALSE,
     confint=FALSE, marktime=TRUE, background=TRUE,
     background.horizontal=NA, logrank=TRUE, lwd=6)
legend("bottomleft", legend=substitute(italic(p)~"="~x, list(x=sprintf("%.2f", g$logtest["pvalue"]))), bty="n", cex=2)
mtext("Survival probability", 2, line=1.5, srt=90, las=3, cex=2.5)
txt <- list(as.expression(c(
  sprintf("%s; reference", names(cols)[1]),
  substitute(atop(x1~italic(p)~"="~x2, phantom(0)), list(x1=sprintf("%s;", names(cols)[2]), x2=sprintf("%.2f", g$coefficients[1,5]))),
  substitute(atop(phantom(0), x3), list(x3=sprintf("HR: %.2f [%.2f, %.2f]", g$conf.int[2,1], g$conf.int[2,3], g$conf.int[2,4])))
  )),
  as.expression(c(
  "",
  substitute(atop(phantom(0), x3), list(x3=sprintf("HR: %.2f [%.2f, %.2f]", g$conf.int[1,1], g$conf.int[1,3], g$conf.int[1,4]))),
  substitute(atop(x1~italic(p)~"="~x2, phantom(0)), list(x1=sprintf("%s;", names(cols)[3]), x2=sprintf("%.2f", g$coefficients[2,5])))
  ))
)
for(j in seq(txt)){
  legend("topright", legend=txt[[j]], col=cols, bty="n", cex=1.8, ncol=1, pch=15)
}


pv <- 0.123
txts <- list(
  as.expression(sprintf("Result; p = %.3f\nhogehoge", pv)),
  as.expression(substitute("Result; "~italic(p)~"="~x1~"\nhogehoge", list(x1=sprintf("%.3f", pv)))),
  as.expression(substitute(over(x1~italic(p)~"="~x2, x3), list(x1="Result;", x2=sprintf("%.3f", pv), x3="\nhogehoge"))),
  list(
    as.expression(substitute(over(x1~italic(p)~"="~x2, phantom(0)), list(x1="Result;", x2=sprintf("%.3f", pv)))),
    as.expression(substitute(over(phantom(0), x3), list(x3="hogehoge")))
  )
)
pos <- c("left", "bottomleft", "topright", "topleft")
cols <- seq(pos)
plot(1, type="n")
for(i in seq(txts)){
  for(j in seq(txts[[i]])){
    legend(pos[i], legend=txts[[i]][[j]], bty="n", cex=1.5, text.col=cols[i])
  }
}

懲役刑と罰金刑の関係

※法律素人なので懲役刑もしくは罰金刑のどちらがよい/悪いを推奨しているわけではありません。実際に刑を受ける場合は弁護士に聞いてください。

〇〇年の懲役または△△円の罰金、というフレーズをときたま見かけるが、法律的に一定の指標があるのかどうか気になった。
「十五年以下の懲役又は五十万円以下の罰金」なぜこんなにアンバランスなのでしょうか?日本の法律の「X以下の懲役又はY以下の罰金」という量刑の上限規定の X と Y に落差があるのはなぜでしょう? - Quora

そして、通常は、懲役刑と罰金刑であれば、自由が確実に奪われる懲役の方が重いとされていますので、「X以下の懲役又はY以下の罰金」という刑の幅が規定されている場合(例:傷害罪や窃盗罪)、数か月という比較的短期間の懲役よりもさらに軽い刑にしようと判断された場合にはじめて罰金刑が選択されます。個人的な感覚では懲役3月くらいより下回る場合には罰金刑かな、という感じです。

と書いてあり、確かに懲役刑のほうが重たく感じる。

というわけで、法律の全文から「〇〇年以下の懲役または△△円以下の罰金」というフレーズを抽出し、懲役刑と罰金刑の関係を考えた。
法律全文はe-gov というサイトからxml ファイルをダウンロードできる。これを解凍して適当なディレクトリにおいて、Rで全部読み込んで処理する。
XML一括ダウンロード | e-Gov法令検索
結果としては4235件の罰則があり、懲役刑1年あたり83万円の罰金だった。
対数変換したり非線形な相関を考えていたが面倒だったので線形処理した。
f:id:MikuHatsune:20210801135634p:plain

懲役年数に対して罰金額が異常に大きいのが、漁業法 | e-Gov法令検索である。第十章罰則の第百八十九条には、3年以下の懲役または3000万円(!)以下の罰金、とある。

第百八十九条 次の各号のいずれかに該当する者は、三年以下の懲役又は三千万円以下の罰金に処する。
一 第百三十二条第一項の規定に違反して特定水産動植物を採捕した者
二 前号の犯罪に係る特定水産動植物又はその製品を、情を知つて運搬し、保管し、有償若しくは無償で取得し、又は処分の媒介若しくはあつせんをした者

懲役年数に対して罰金額が異常に小さいのが、刑法 | e-Gov法令検索の第二十七章傷害の罪の第二百四条傷害罪である。

第二百四条 人の身体を傷害した者は、十五年以下の懲役又は五十万円以下の罰金に処する。

「〇〇年以下の懲役または△△円以下の罰金」というのは各々最大値の関係が述べられているだけなので、平均的に相関はどうなのか、は検討する余地がありそう。ただし、法文に明記されいている刑と実際の求刑がどれくらい幅があるのかは法律素人なのでわからなかった。
また、「〇〇年以下の懲役及び△△円以下の罰金」というのもあって、実際の刑は懲役刑か罰金刑のみ選ぶのか、どちらも受刑するのか、とかよくわからなかった。

上記のQuaraで

もっとも、経済的な色彩が強い特別法の中には、経済的なペナルティということで罰金の上限が高く設定されている場合があります。たとえば、漫画村のような事例に適用される著作権法を見ると、著作権侵害の刑罰を定めた同法119条1項で「10年以下の懲役若しくは1000万円以下の罰金に処し、又はこれを併科する。」と規定されています。これには、①1か月~10年の懲役、②1万円~1000万円の罰金、③1か月~10年の懲役 + 1万円~1000万円の罰金、という3パターンがあり得ます(条文にある「併科する」が③のパターンですね)。著作権侵害は経済的なペナルティの要素が大きいので、罰金の上限が1000万円と比較的高額に設定されています。さらに犯行が悪質だったり被害者が多かったりすると懲役も併科されます。

とあるので、法律の内容で層別化しようとおもったが、xml の中身を読み解くのが面倒で「〇〇年以下の懲役または△△円以下の罰金」しか抽出していないので反響があれば再検討するかもしれない。

library(XML)
library(stringr)
library(minerva)
library(foreach)
library(doSNOW)
library(XML)
# 解凍した全ファイルの読み込み
f <- list.files("all_xml", recursive=TRUE, pattern="xml", full.names=TRUE)

z <- NULL
for(i in seq(f)){
for(i in 3182:length(f)){
  x <- unlist(xmlToList(f[i]))
  y <- str_extract_all(x, "、.{1,7}?の懲役.*の罰金")
  z <- c(z, unlist(y[sapply(y, length)>0]))
}

# 時間がかかるとき
cl <- makeCluster(4, type="SOCK")
registerDoSNOW(cl)
res <- foreach(i=seq(f), .combine=c, .packages=c("stringr", "XML")) %dopar% {
  x <- unlist(xmlToList(f[i]))
  y <- str_extract_all(x, "、.{1,7}?の懲役.*の罰金")
  unlist(y[sapply(y, length)>0])
}
stopCluster(cl)

x1 <- str_remove_all(res, "これを|、|以下の懲役.*")

r1 <- matrix(c(
"一年",1,
"五年",5,
"三箇月",3/12,
"三月",3/12,
"三年",3,
"四年",4,
"七年",7,
"十五年",15,
"十年",10,
"二年",2,
"六箇月",6/12,
"六月",6/12), nc=2, byrow=TRUE)
x0 <- as.numeric(r1[match(x1, r1[,1]), 2])

y1 <- str_extract(res, "[はび].{1,5}?円以下の罰金")
y2 <- str_remove_all(y1, "は|び|、|禁錮又|以下の罰金")

r1 <- matrix(c(
"二百五十万円",2500000,
"二百万円",2000000,
"二万円",20000,
"百五十万円",1500000,
"五百万円",5000000,
"四百万円",4000000,
"七百万円",7000000,
"二千万円",20000000,
"三千万円",30000000,
"三百万円",3000000,
"一万円",10000,
"五十万円",500000,
"五千円",5000,
"五万円",50000,
"三十万円",300000,
"三千円",3000,
"三万円",30000,
"千万円",10000000,
"二十万円",200000,
"二千円",2000,
"百万円",1000000,
"十万円",100000,
"千円",1000), nc=2, byrow=TRUE)
y0 <- as.numeric(r1[match(y2, r1[,1]), 2])


l <- lm(y0/10000 ~ x0)
par(mar=c(4.5, 5, 2, 2), cex.lab=2, cex.axis=1.3)
plot(x0, y0/10000, xlab="懲役年数 [年]", ylab="罰金額 [万円]", pch=16)
abline(l, lty=3, lwd=3, col="blue")

ICUのルーチン・エビデンス

読んだ。

COI:著者に知り合いがいたが買ってから気づいた。
良い点:具体的な投与量や計画が載っている。大事なことは別の項目でも同じことが書いてある。
悪い点:同じようなことが書いてある。血糖管理とか同じ章に何回も小項目作ってインスリンどうこうと同じこと書く必要ある?
項目間、執筆者間で統一されていない内容がある。CRRTは使わない、と書いてある一方で、CRRTは血圧に応じて考慮することがある、と次の項には書いてある。PMXとか要らないのでは?

安いので初学者は買ってもいいかもしれない。

読んだ。

COI:安かったので買った。知り合いはまったくいない。
10年選手向け、とあるので、初学者向けの投与量がどうこうとかはほとんどない。
エビデンスが羅列してあって、でもだからといってどっちつかずの結果が多いので明確にこれをすべし/しないべし、ということは結局のところ断言できない。
読み物としてはささっと読めるが。。。

3連PCR

新型肺炎で2回PCRしたけど陰性で、でも感染症の専門家がやっぱり疑わしいからダメ押しでもう一回PCRやって、というのでやったら陽性だった
と言われた。

検査には感度と特異度という検査特性が存在するので、検査が陽性だからといって本当にその疾患が陽性であるかは限らないし、検査が陰性だからといって本当に陰性であるとは限らない。
ではどうやって陽性もしくは陰性の判定を下すのか、というと、「その判定を下すに足るとみなされる閾値を超える/下回る場合に判定を下す」か、「その閾値になるまで検査を追加する」のが戦略である。

いま、新型肺炎PCR検査の感度をS_n=0.7、特異度をS_p=0.99新型肺炎であろう事前確率をx とする。一回の検査で陰性であるとき、事後確率y は、陰性尤度比とオッズを用いて
\frac{y}{1-y}=\frac{1-S_n}{S_p}\frac{x}{1-x}
とかける。
検査が連続してn 回陰性であるとき、n 回後の事後確率はオッズのままの表記を利用すると(\frac{1-S_n}{S_p}=z とした)
\frac{y_n}{1-y_n}=z^n\frac{x}{1-x}
y_n=\frac{1}{(\frac{1}{z^n})\frac{1-x}{x}+1}

n=5 回までの反復検査において、事前確率と事後確率の関係は図の通りになる。
検査特性として特異度が高い検査は、陽性である場合に、本当に陽性である確率が高くなる。これはSpIn と呼ばれる。この原理によると、陽性者を補足することには非常に有用である。
一方で、感度が高い検査は、陰性である場合に、本当に陰性である確率が高くなる。これはSnOut と呼ばれる。この原理によると、陽性ではないことを主張するには有用である。ということで、感度70% のPCR検査ではこちらの主張はできないため、「(疾患の)陰性証明書」なるものが意味をなさない、というのが通説である。
n を大きくすればいいだろう、と思うかもしれないが、たしかにn 回すべてで陰性であれば、本当に陰性と言っていいかもしれないが、そのうち1回でも陽性になってしまった場合に真陽性なのか偽陽性なのか判断しにくくなるし、現実的な運用や費用の問題がある。2類感染症という社会的要因のため、1度でも陽性なら判定としては陽性、という運用になる。
f:id:MikuHatsune:20210702223438p:plain


例えば結核の3連痰においては、検査の感度と特異度は以下のとおりである。

3連痰の活動性肺結核に対する感度は約70%、特異度は90%以上

亀田感染症ガイドライン:結核を疑う時とその対応(version 2) - 亀田総合病院 感染症科
結核は空気感染するため公衆衛生上、診断をつけて適切な対応をすることが重要であり、3連痰のうち1度でも陽性なら、陽性と判定することになっている。

postp <- function(x, Sn=0.7, Sp=0.95, n=1){
  z <- ((1-Sn)/Sp)^n
  z*x/(1-x+z*x)
}

x <- seq(0, 1, length=1000)
Y <- mapply(function(z) postp(x, n=z), 1:5)
cols <- jet.colors(ncol(Y))
par(mar=c(5, 5, 2, 2), cex.axis=1.5, cex.lab=1.5)
matplot(x, Y, type="l", lty=1, col=cols, lwd=3, las=1,
        xlab="Prior probability", ylab="Posterior probability")
legend("topleft", legend=sprintf("%d回陰性", seq(cols)), col=cols, pch=15, cex=2)
abline(0, 1, lty=3)