血液ガス白熱講義150分

読んだ。
COI:ローテーターが持っていたのを読んだ。

竜馬先生の血液ガス白熱講義150分

竜馬先生の血液ガス白熱講義150分

150分講義、ということだが血液ガスについて知っていれば一時間くらいで通読は可能である。
A-aDO2 の項は勉強になったが、酸塩基平衡については、いつも話題になるけど覚えていない「代謝性/呼吸性のアシドーシス/アルカローシスを代償するときのCO2 もしくはHCO3 の変化幅は…」というところは、「たくさんのデータを眺めて算出されたそれっぽい値」ということになっていて、覚えやすい語呂合わせとかそういうのはなかった。ネットでググれば出てくるような話だったのでこの本を買わなければいけない強い理由はないが、2000円なので価格だけは推薦できる、と思う。

多浪女性だけど医学部に合格したい

結論から言うと福岡大学多浪を重視、OR=1.31)は多浪女性でも医学部合格しやすいかもしれない。ただし女性であることで合格しやすいかは有意差がない。
現役女性に限って言えば、女性で合格しやすいのは三重大学(OR=1.23)、弘前大学(OR=1.34)である。




BubbleChartIDe427b1723cc








以前、こんなことをやった。
mikuhatsune.hatenadiary.com
東京大学のみならず、81医学部についてのデータがあり、かつ、現役世代の18歳から、19〜22歳までの受験者数と合格者数のデータもあるので、
・男女での合格に差があるのか
・年齢別で合格に差があるのか
を前回と同様に複数年度の受験結果を用いてメタアナリシスして、ORを出して二次元プロットして、合否に性差もしくは現役浪人差があるのかないのかを特徴づける。ただし、東京女子医科大学は女性しか受験者かつ合格者がいないので、女性で最大の合格ORだった弘前大学(OR=1.34)より大きい値として適当にOR=1.4 を割り当てた。
ついでにインタラクティブに見れると楽しいので、googlevis を使ってみた。
mikuhatsune.hatenadiary.com

気になる大学を見つけてマウスを合わせると、
・x軸が男女差のOR(男性からみた女性の合格率で、ORが大きい(みぎ)と女性なら合格しやすい、ORが小さい(ひだり)と女性なら合格しにくい)で、y軸が現役浪人のOR(ORが大きい(うえ)と浪人生が合格しやすく、ORが小さい(した)と浪人生が合格しにくい)
・色は男女差、現浪別のORが有意差(0.05)をもつかもたないかで、多重補正はまったく考えていない
・円の大きさはZ score 偏差値(2019医学部偏差値ランキング | 医学部受験バイブル からパクって、山梨大学自治医科大学藤田保健衛生大学は適当に67にした)
を表している。

特徴として、医学部受験性は
男女にとらわれず、現役生なら東京大学を受験するのがよさそう(男女OR=0.97、現浪OR=0.18)。
男女にとらわれず、浪人生なら久留米大学(男女OR=0.96、現浪OR=1.63)、鳥取大学(男女OR=1.0、現浪OR=1.64)を受けるのがよさそう。
現役男性は順天堂大学(男女OR=0.58、現浪OR=0.64)、九州大学(男女OR=0.60、現浪OR=0.73)を受けておくのがよさそう。
現役女性は弘前大学(男女OR=1.34、現浪OR=0.75)を受けるのがよさそう。
浪人男性は東北医科薬科大学(男女OR=0.61、現浪OR=2.56)、新潟大学(男女OR=0.68、現浪OR=2.39)、山形大学(男女OR=0.71、現浪OR=2.14)を受けるのがよさそう。

library(meta)
library(googleVis)
dat <- read.csv("data.csv", stringsAsFactors=FALSE)

gokei <- dat[,4] == "合計"
d0 <- dat[gokei, c(3,5,6,8,9)]
private <- dat[gokei,2]
d1 <- cbind.data.frame(d0[,1], mapply(function(z) as.numeric(gsub(",", "", as.character(d0[,z]))), 2:5))
colnames(d1) <- c("Univ", "n.ctrl", "n.trt", "col.ctrl", "col.trt")
u <- as.character(d1$Univ)
idx <- mapply(function(z) c(0,1,3,4) + z, grep("年度", colnames(dat)), SIMPLIFY=FALSE)
d2 <- mapply(function(w) mapply(function(z) as.numeric(gsub(",", "", as.character(dat[gokei, w][,z]))), 1:4), idx, SIMPLIFY=FALSE)

dat1 <- dat[-c(1:2),which(dat[2,]=="計")]
dat1 <- matrix(as.integer(unlist(dat1)), nrow(dat1))

# 各年度
d4 <- mapply(function(z) cbind.data.frame(u, z), d2, SIMPLIFY=FALSE)
for(i in seq(d4)) colnames(d4[[i]]) <- c("Univ", "n.ctrl", "n.trt", "col.ctrl", "col.trt")

ronin <- function(mat){
  tmp1 <- apply(matrix(mat[2,], nc=2, byrow=TRUE), 2, rep, each=4)
  tmp2 <- do.call(rbind, mapply(function(z) matrix(mat[z,], nc=2, byrow=TRUE), 3:6, SIMPLIFY=FALSE))
  i <- c(outer(((1:4)-1)*6, 1:6, "+"))
  tmp3 <- cbind(tmp2[i,], tmp1)
  colnames(tmp3) <- c("n.trt", "col.trt", "n.ctrl", "col.ctrl")
  tmp3
}

# 各大学の男女差と浪人差を行う
d5 <- do.call(rbind.data.frame, mapply(function(z) z[u == "東京大学",], d4, SIMPLIFY=FALSE))
d5$Univ <- paste0(2018:2013, "_", as.character(d5$Univ))
age_idx <- c("19歳", "20歳", "21歳", "22歳")
res <- matrix(0, length(u), 4)
for(i in seq(u)){
  d5 <- do.call(rbind.data.frame, mapply(function(z) z[u == u[i],], d4, SIMPLIFY=FALSE))
  d5$Univ <- paste0(2018:2013, "_", as.character(d5$Univ))
  b5 <- metabin(col.trt, n.trt, col.ctrl, n.ctrl, data=d5, sm="OR", studlab=Univ, comb.fixed=TRUE, comb.random=TRUE, label.e="女性", label.c="男性")
  ut <- dat[-c(1:2), 3] == u[i]
  x <- ronin(dat1[ut,])
  X <- cbind.data.frame("Univ"=c(mapply(function(z) sprintf("%d_%s", z, age_idx), 2018:2013)), x)
  b7 <- metabin(col.trt, n.trt, col.ctrl, n.ctrl, data=X, sm="OR", studlab=Univ, comb.fixed=TRUE, comb.random=TRUE, label.c="現役", label.e="浪人")
  res[i, ] <- c(b5$pval.random, exp(1)^b5$TE.random, b7$pval.random, exp(1)^b7$TE.random)
}
res[u == "東京女子医科大学", 2] <- 1.4          # とりあえず埋める値
res[u == "東京女子医科大学", 1] <- 0.00001  # とりあえず埋める値

hensati <- c(67,64,65,69,65,65,67,65,69,74,71,66,65,67,65,67,65,67,65,70,67,66,72,71,69,65,65,67,69,65,64,65,65,65,69,65,66,64,67,67,65,64,65,65,69,68,69,69,67,66,64,65,67,64,62,67,65,73,68,67,62,66,69,64,66,64,68,64,63,63,64,65,67,69,68,65,66,63,65,66,64)
flag <- 1*(res[,1] < 0.05) + 2*(res[,3] < 0.05) + 1
sig <- c("どちらも非有意", "男女差あり", "現浪差あり", "どちらも有意")[flag]
gdat <- data.frame("Univ"=gsub("大学", "", u), "gender"=res[,2], "age"=res[,4], significance=sig, size=res[,1], Zscore=hensati)

# googlevis 用のプロットオプション
ops <- list(
  fontSize=12, height=800, width=800,
  vAxis="{title:'← 現役有利 浪人有利 →', fontSize: 20, titleTextStyle: {fontSize: 30, bold: 'true', italic: 'false'}, viewWindow: {min: 0, max: 3}}",
  sizeAxis="{minValue: 61, maxValue: 75, maxSize: 15}",
  hAxis="{title:'← 男性有利 女性有利 →', fontSize: 20, titleTextStyle: {fontSize: 30, bold: 'true', italic: 'false'}, viewWindow: {min: 0.5, max: 1.5}}",
  bubble="{opacity: 0.3, textStyle: {color: 'black', fontSize: 6}}",
  legend="{position: 'top', textStyle: {color: 'black', fontSize: 10}}"
)

g <- gvisBubbleChart(gdat, idvar="Univ", xvar="gender", yvar="age", colorvar="significance", sizevar="Zscore", options=ops)
g$html$caption <- NULL
g$html$footer <- NULL
plot(g)
               Univ    gender       age   significance
1            北海道 0.7795549 0.8358955     男女差あり
2          旭川医科 1.1072457 1.1124023 どちらも非有意
3              弘前 1.3430755 0.7445803   どちらも有意
4              東北 0.8316471 0.7764137 どちらも非有意
5              秋田 0.9063561 1.2979681     現浪差あり
6              山形 0.7055803 2.1388523   どちらも有意
7              筑波 0.6991179 1.5509685   どちらも有意
8              群馬 0.8081662 1.1168925 どちらも非有意
9              千葉 0.8171945 1.0079015 どちらも非有意
10             東京 0.9743834 0.1760281     現浪差あり
11     東京医科歯科 0.8706480 0.5788984     現浪差あり
12             新潟 0.6808657 2.3894754   どちらも有意
13             富山 0.8421141 1.2412026     現浪差あり
14             金沢 0.7754830 1.0592769     男女差あり
15             福井 1.1072532 1.0803992 どちらも非有意
16             山梨 0.8400773 0.5890478     現浪差あり
17             信州 0.8659979 1.2853796     現浪差あり
18             岐阜 1.2190230 0.4947173     現浪差あり
19         浜松医科 0.9326345 1.2992796     現浪差あり
20           名古屋 0.6822946 0.6171088   どちらも有意
21             三重 1.2290965 0.9026513     男女差あり
22         滋賀医科 0.8513929 1.3432858     現浪差あり
23             京都 0.7048194 0.5555648   どちらも有意
24             大阪 0.8135480 0.9649404 どちらも非有意
25             神戸 0.9414366 0.8969217 どちらも非有意
26             鳥取 1.0010875 1.6347672     現浪差あり
27             島根 1.0373790 0.9665065 どちらも非有意
28             岡山 0.6835727 1.1800753     男女差あり
29             広島 0.9091040 0.8411865 どちらも非有意
30             山口 0.8191789 1.5228979   どちらも有意
31             徳島 1.2005137 0.7149804     現浪差あり
32             香川 0.9456194 1.2559985     現浪差あり
33             愛媛 1.1204252 0.9363107 どちらも非有意
34             高知 0.7014073 1.8211713   どちらも有意
35             九州 0.6010195 0.7278395     男女差あり
36             佐賀 0.9930771 0.9298034 どちらも非有意
37             長崎 0.9388264 1.0893053 どちらも非有意
38             熊本 0.7773319 0.8647244     男女差あり
39             大分 1.1167834 0.5773147     現浪差あり
40             宮崎 0.8924326 1.1936232     現浪差あり
41           鹿児島 0.9719078 1.2574617     現浪差あり
42             琉球 1.1014414 0.6890158     現浪差あり
43         札幌医科 0.9921191 0.6785030     現浪差あり
44     福島県立医科 0.8690277 0.7433259     現浪差あり
45         横浜市立 0.7455896 0.7368872   どちらも有意
46       名古屋市立 0.7994566 1.4448609   どちらも有意
47     京都府立医科 0.7578657 0.9077705     男女差あり
48         大阪市立 0.6544273 1.4000904   どちらも有意
49     奈良県立医科 0.7644644 0.7640460   どちらも有意
50   和歌山県立医科 0.9867701 0.8327582 どちらも非有意
51         岩手医科 0.8444440 1.3800626   どちらも有意
52     東北医科薬科 0.6120065 2.6578989   どちらも有意
53         自治医科 0.8869985 0.7625714     現浪差あり
54         獨協医科 1.0487767 0.9630485 どちらも非有意
55         埼玉医科 0.7333328 1.2052120     男女差あり
56     国際医療福祉 0.7868929 1.2577448     男女差あり
57             杏林 0.9602251 1.2664534 どちらも非有意
58         慶應義塾 0.7083041 0.3754968   どちらも有意
59           順天堂 0.5764011 0.6541914   どちらも有意
60             昭和 0.6339648 0.4714578   どちらも有意
61             帝京 0.9250509 1.1989886 どちらも非有意
62         東京医科 0.7576769 0.7077992     現浪差あり
63   東京慈恵会医科 0.9325814 0.3638655     現浪差あり
64     東京女子医科 1.4000000 0.6583648   どちらも有意
65             東邦 0.8698090 0.5312341   どちらも有意
66             日本 0.6616185 1.0207536     男女差あり
67         日本医科 0.8988065 0.7915679     男女差あり
68             北里 0.9392253 0.6936157     現浪差あり
69 聖マリアンナ医科 0.9096452 0.9156971 どちらも非有意
70             東海 0.9820955 0.7585251     現浪差あり
71         金沢医科 1.0785915 1.1580856 どちらも非有意
72         愛知医科 1.0809097 0.8511029 どちらも非有意
73     藤田保健衛生 0.9524440 0.7914505 どちらも非有意
74         大阪医科 0.7450630 1.1032199     男女差あり
75         関西医科 0.9348929 1.1583467 どちらも非有意
76             近畿 0.8097108 1.2662151   どちらも有意
77         兵庫医科 0.9040168 1.0794900 どちらも非有意
78         川崎医科 1.0692299 1.1115515 どちらも非有意
79           久留米 0.9607759 1.6301744     現浪差あり
80         産業医科 1.1261682 1.0523442 どちらも非有意
81             福岡 1.0771316 1.3134493     現浪差あり

重症患者管理マニュアル

読んだ。
COI:なし。自費で購入。

重症患者管理マニュアル

重症患者管理マニュアル

  • 作者: 平岡栄治,則末泰博,藤谷茂樹
  • 出版社/メーカー: メディカルサイエンスインターナショナル
  • 発売日: 2018/08/02
  • メディア: 単行本
  • この商品を含むブログを見る

割と最近に出版されており、ガイドラインやRCTなのは最新と思われるものにそって記述されている。
この本が面白そうだと思ったのが、前書きの

セントルイス大学で集中治療のトレーニングを受けていたとき,私は大きく分けて2つのタイプの指導医がいると感じていた。米国なのでどちらのタイプもガイドラインを重視している点では変わりないが,ガイドラインでは取り扱われていないテーマや,ガイドラインだけでは対応できない複雑な症例への思考過程が大きく異なっていた。
1つ目のタイプは,ベッドサイド回診の際に,自分の判断のよりどころとして, 記憶しているさまざまな無作為化比較試験(RCT)のデザインと結果を次から次へと話す指導医である。これは30歳代までの若い集中治療医に多く, 「この指導医はすごい」と研修医やフェロー達は目を輝かせながら話を聞いていた。 もう1つのタイプは,RCTのことはあまり話題にせず(もちろん文献を読んではいたと思うが……),生理学的な思考過程で判断をしていくタイプの指導医であり,40歳代以上の指導医に多かった。このタイプの集中治療医は,同じ病名がついていても患者によって異なる治療内容になることが多く,同じレベルの生理学的知識をもっていない者にとっては,その判断の根拠がわかりにくい。大半の研修医やフェロー達は,「あの指導医は古いからエビデンスに基づいていない」などと陰口を言っていた。しかし私にとっては,後者の「生理学重視」の集中治療医との回診のほうがはるかに楽しく,その決断の多くは理にかなっていると感じた。実際,2年前には正しいと思われていた「エビデンス」が大きく変わり,生理学重視の年配の集中治療医が言っていたことのほうが正しかったと認識することを多く経験した。
例えば,私がフェロー1年目であった2009年に,Dr. Kaplanという年配の集中治療医から,「静脈が拡張した敗血症性ショックの患者に10Lも15Lも輸液したところでunstressed volumeとしてプールされるだけだから,CVPがどうであろうと2~3L輸液して,血圧が安定しなければさっさと昇圧薬を使って,無駄に輸液をしないようにしなさい」と叱られたことがあるが,これも深い生理学的知識に裏打ちされた指導であったと思う。
もちろんエビデンスの重要性は説明するまでもないが,患者を個別化して治療を行うためには,多様な患者をまとめたRCTなどからなるエビデンスと生理学のバランスが必要である。本書はまさにその最適なバランスを追求したマ ニュアルである。まず,生理学を知り,そして「国際ガイドラインと日本のガイドラインではどうなっているか?」を確認し,さらに「過去と最近のRCTはどうか?」を知るという,ICUで決断するために不可欠な3つの要素が盛り込まれている。本書が“エビデンス"と生理学のバランスのとれた集中治療の学習と実践の一助になれば幸いである。
則末泰博(東京ベイ・浦安市川医療センター 呼吸器内科/救急集中治療科)

というところの、

記憶しているさまざまな無作為化比較試験(RCT)のデザインと結果を次から次へと話す指導医

生理学的な思考過程で判断をしていくタイプの指導医

というところで、近年の集中治療医()は特に前者のRCTマンセー志向が強いが、かといって集中治療分野のRCTは結局、primary outcome の死亡率は統計学的有意性はなかったがsecondary で…みたいなしょうもないのが多いのでなんだかなぁ、という感じで見てる。
この本はどちらかというと後者よりの、生理学メインで病態を考えようとはするものの、RCTやガイドラインを列挙しつつ、でも、「実際に目の前の重症患者にどれくらいの量で薬を使うか」というようなアンチョコ本に期待するようなことは、書いてあったり書いてなかったりする。筆者らの所属施設のこと、例えば心臓血管外科手術後の術後経過なんかはいい参考になるが、結局は他のアンチョコ本も見ないといけない感じ。Intensivist のほうがたぶんアンチョコ的に使える、はず。

生理学的に病態を考えるなら、有名なICU book (自分が読んだのは3版)があるが、これは本当に生理学しか書いてないので、アンチョコ的な役割はまったくない。

ICUブック 第4版

ICUブック 第4版

SIMフリーのiphone SE をau 4G LTE sim で使えた

iphone 5 を計6年間くらい使っていたが、そろそろ電池とかレスポンスとかがあやうくなってきたので替えたいと思っていた。
使っているのはパケット通信なしの電話のみで、必要なのは音楽くらいなので最新機種である必要がなく、あのサイズ感がいいのでiphone SE が欲しかった。
結論からいうとA1732 CDMA GSM モデルでau 4G LTE sim (黒シムで6と書いてあるやつ)が使えるようになったが、ただsimを挿しただけでは電波を一瞬拾ってはすぐ圏外になったので、モバイルデータ通信で一度、電話とデータ通信をオンにしてから、電話のみ、に変更するとなぜか急に電話できるようになっていた。
データ通信(パケット通信、ネットにつなぐこと)はパケ放題的な契約をしていないので試していない。ただし、この作業でデータ通信量が10kb くらいになっていた。

さすがに5からSEへの変更なのでものすごいさくさくである。よかった。

賢者歴史に学ぶ

読んだ。

麻酔科M&M症例ファイル

麻酔科M&M症例ファイル

麻酔のほうは個人、症例レベルで気をつけるような話が多いのでなんとかなるけど、集中治療のほうはどんなに気をつけていても起こってしまったらどうしようもない合併症とかそういうのが多いのでなんだかなあという気分になった。

全身麻酔時の高濃度酸素

アブストだけ読んだ。
www.ncbi.nlm.nih.gov
www.ncbi.nlm.nih.gov
全身麻酔のときに高濃度酸素(80%)にするとSSIが減ったりPONVが減ったりするのでガイドラインでも推奨されているが、実際にメタアナリシスするとそうでもないことが多い、とコメンタリーでも言われている。
高濃度酸素投与のエビデンスはあるようでない、という話はLiSAでも書いてあった。
LiSA 2017年7月号/(MEDSi)株式会社 メディカル・サイエンス・インターナショナル
 
SSIはRR: 0.89 [0.73-1.07] で有意な減少は示せなかった。挿管されている患者ではRR: 0.80 [0.64-0.99] と有意な減少、挿管されていない患者では RR: 1.20 [0.91-1.58] と有意差を示せなかった。
有害性については無気肺 RR 0.91 [0.59-1.42]、心血管障害 RR 0.90 [0.32-2.54]、集中治療室入室 RR 0.93 [0.7-1.12]、死亡 RR 0.49 [0.17-1.37] となった。高濃度酸素は吸収されて肺虚脱を起こしやすい、とか言われる割には無気肺はそんなに生じないらしい。
 
酸素濃度は導入後に適当に酸素:空気を1:1 にしてだいたい55-60% くらいになるのでそれくらいにすることが多い。気分によっては1:2 にしてだいたい45-50% くらいになる。
全身麻酔のときにはどんなに健康なASAPS1 の患者でも30% の酸素濃度は必要らしい、と書いてあったのを見たことがある。

低流量麻酔

低流量麻酔

一般的に酸素濃度は35-40% で維持することが多い。というのも大体の高濃度酸素臨床試験では80% vs 35% が多いようである。
酸素:空気を1:3 くらいにすれば40% を下回るようなのだが、一回この割合でやっていたら「なんでこんな配合なの?」と上司から変な人扱いされたのでそれ以降やっていない。

東京大学での式辞の統計問題を考える

こんな話を見かけた。ちなみに式辞は読んでない。
qiita.com

データ取得まではやってくれていて、解析もしていた。解析者では、東京大学鳥取大学島根大学の医学部での男女合格率には差がない、ということだった。
せっかく81大学の男女受験者数と合格者数を平成30年から25年まで(2018年から2013年まで)まとめてくれているので、もうちょっと解析したい。かつてこんなことをしたので考えてみよう。
mikuhatsune.hatenadiary.com

男女の受験者数と、合格者数が出ているので、単純には分割表検定のようなことができるが、これが81大学(と6年分)あるので、メタアナリシスのようなことをやってみよう。
受験者が男であることを対照として、受験者が女であることを介入というか治療群ということにみなしてデータを整形する。ここではメタアナリシス自体の説明はしない。

結論からいうと、女性であることは合格率が15%下がる(OR=0.85 [0.80, 0.90] でp値は10^{-7} くらいでる)。
meta パッケージの都合で字が非常に小さいが、Odds Ratio のみぎ側が女性有利、ひだり側が男性有利である。OR=1 の垂線は、男女で差がないことを示している。
Experimental とControl がそれぞれ女性、男性を示している。Event が合格者数である。男女がごちゃごちゃになってわかりにくい場合は、下3/4 くらいにある東京女子医科大学を見てもらうと、Control が0で男性であることがわかるし、その2つ上の東京医科大学を見てもらうと、forest plot が非常にひだり(つまり、男性有利)に偏っているのでそれが目印である。
f:id:MikuHatsune:20190415002531p:plain
各々の大学の受験者数は男性300、女性50くらいなので、単一の大学を見ても有意差が出るような合格率の差は生まれないが、81大学も集めると男性7.6万、女性4.8万人なので、流石に小さな差でも有意差は出る。各大学を見ると横線が長いが、Fixed effect model もしくはRandom effects model のところはほぼ丸で横線はほとんどないことがわかる。これがメタアナリシスのサンプルサイズの暴力である。

年度ごとにやっても0.1から0.15程度のORの低下があるので、女性が医学部に合格しにくいのはたぶん本当なんだろう(適当

te
     2018      2017      2016      2015      2014      2013 
0.8256398 0.9172780 0.8441605 0.8861341 0.8508194 0.8718301 


さて、東京大学での話なので、東京大学だけ取り出してみると、東京大学では男女で合否は差はないような感じである。いや、メタアナリシスで冒頭に全大学でやっているのにサブグループでしていいの?という疑問はある。
f:id:MikuHatsune:20190415002603p:plain

メタアナリシスは本当はfunnel plotとかデータの偏りとか検討しないといけないが、今回は省いた。

library(meta)
dat <- read.csv("data.csv")

gokei <- dat[,4] == "合計"
d0 <- dat[gokei, c(3,5,6,8,9)]

d1 <- cbind.data.frame(d0[,1], mapply(function(z) as.numeric(gsub(",", "", as.character(d0[,z]))), 2:5))
colnames(d1) <- c("Univ", "n.ctrl", "n.trt", "col.ctrl", "col.trt")
u <- as.character(d1$Univ)

b1 <- metabin(col.trt, n.trt, col.ctrl, n.ctrl, data=d1, sm="OR", studlab=Univ, comb.fixed=TRUE, comb.random=TRUE, label.e="女性", label.c="男性")

# png("result.png", 720, 1300)
forest.meta(b1, fontsize=12)
dev.off()
funnel(b1)
metabias(b1)

idx <- mapply(function(z) c(0,1,3,4) + z, grep("年度", colnames(dat)), SIMPLIFY=FALSE)
d2 <- mapply(function(w) mapply(function(z) as.numeric(gsub(",", "", as.character(dat[gokei, w][,z]))), 1:4), idx, SIMPLIFY=FALSE)

u0 <- c(mapply(function(z) sprintf("%d_%s", z, u), 2018:2013))
d3 <- cbind.data.frame(u0, do.call(rbind, d2))
colnames(d3) <- c("Univ", "n.ctrl", "n.trt", "col.ctrl", "col.trt")

b3 <- metabin(col.trt, n.trt, col.ctrl, n.ctrl, data=d3, sm="OR", studlab=Univ, comb.fixed=TRUE, comb.random=TRUE, label.e="女性", label.c="男性")

# 各年度
d4 <- mapply(function(z) cbind.data.frame(u, z), d2, SIMPLIFY=FALSE)
for(i in seq(d4)) colnames(d4[[i]]) <- c("Univ", "n.ctrl", "n.trt", "col.ctrl", "col.trt")
b4 <- mapply(function(z) metabin(col.trt, n.trt, col.ctrl, n.ctrl, data=z, sm="OR", studlab=Univ, comb.fixed=TRUE, comb.random=TRUE, label.e="女性", label.c="男性"), d4, SIMPLIFY=FALSE)
# TE
te <- 1 + mapply(function(z) z$TE.fixed, b4)

# 東京大学
d5 <- do.call(rbind.data.frame, mapply(function(z) z[u == "東京大学",], d4, SIMPLIFY=FALSE))
d5$Univ <- paste0(2018:2013, "_", as.character(d5$Univ))
b5 <- metabin(col.trt, n.trt, col.ctrl, n.ctrl, data=d5, sm="OR", studlab=Univ, comb.fixed=TRUE, comb.random=TRUE, label.e="女性", label.c="男性")

# png("result1.png", 720, 220)
forest.meta(b5)
dev.off()