社会医学を学んでいる。
並行して血液病学を学んでいる。
テーマとしては医療統計と疫学の講義だった。そのなかで、献血されたものからHIVやHCV検査をするのに、ある一定数の検体を混ぜてプールを作り、その混合血を検査するらしいが、ある厚生労働省研究班が1つのプールを500検体から50検体にして感度を上げましょう、と提案した。そのとき、会議の参加者が統計学的にどうにかならんかと言ってきた、というエピソードがあるとかないとか講義中に言われていたので、それを考えてみる。
とある自治体で献血が行われ、個検体が得られた。
そのうち、ウイルス検査陽性の検体が個だけある。
個の検体を個の要素からなるプールに分ける。プールは個できる。
検査は1プールに対して行っても、1検体に行っても費用や手間は変わらない。
ということで回数だけが問題。
検査の感度、特異度は100%である。
つまり、陽性な検体は必ず陽性の結果を得る。陰性な検体は必ず陰性になる。
1プールが陰性なら、そのプールにある検体はすべて陰性と判断し、検査は終了する。
陽性なら、そのプールに含まれる検体すべてを検査し直す。
ということでシミュレーション。
血液病学の講義で、HIV検査の重要性が言われていた。
大阪府の献血者数とHIV陽性割合を用いてみる。
v<- 10 N<- 400000 n<- c(1,2,4,5, 10,20,40,50, 100,200,400,500, 1000,2000,4000,5000,10000) # どの検体が陽性か適当に作る。 # 陽性は1、陰性は0。 Nn<- rep(0,N) vp<- sample(1:N,size=v) Nn[vp]<- 1 # 何回かやった平均にする。 trials<- 20 tests<- matrix(rep(0,length(n)),nr=trials,nc=length(n)) for(t in 1:trials){ for(i in 1:length(n)){ Nn<- rep(0,N) vp<- sample(1:N,size=v) Nn[vp]<- 1 Pool<- matrix(Nn,nc=N/n[i]) a<- rowSums(Pool) tests[t,i]<- sum(a!=0)*(N/n[i]) + n[i] } } plot(n,colMeans(tests),log="xy",type="l", frame=FALSE,lwd=3,axes=FALSE, xlab="People in One pool",ylab="Test trials [log]") axis(1) axis(2,10^(0:6),0:6) title("Test frequency need to detect viral blood samples") n[which(colMeans(tests)==min(colMeans(tests)))]
2000検体のプールを作ると回数が最小らしい。
日本全国規模でやると、20000検体くらいがいいらしい。