平均値の差を統合する方法
治療群 | 対照群 | |||||
研究名 | 例数 n1i | 平均値 mean1i | 不偏分散 var1i | 例数 n2i | 平均値 mean2i | 不偏分散 var2i |
case1 | n11 | mean11 | var11 | n21 | mean21 | var21 |
case2 | n12 | mean12 | var12 | n22 | mean22 | var22 |
case3 | n13 | mean13 | var13 | n23 | mean23 | var23 |
・ ・ ・ |
・ ・ ・ |
・ ・ ・ |
・ ・ ・ |
・ ・ ・ |
・ ・ ・ |
・ ・ ・ |
case_k | n1k | mean1k | var1k | n2k | mean2k | var2k |
統合平均値の差の推定
ここに,
ただし,
統合平均値の差の95%信頼区間
均質性の検定
有意性の検定
☆Perlプログラム
⇒ 使用ファイル 丹後俊郎「メタ・アナリシス入門」朝倉書店p83-表3.4より引用
#データファイルの読み込み $pathname="mean.dat"; open MYFILE, "$pathname"; while (<MYFILE>) { chomp; @{"case$."} = split /\t/; } $k=$.; close MYFILE; #下処理 for($i=1;$i<=$k;$i++){ $n1[$i]=@{"case$i"}[0]; $mean1[$i]=@{"case$i"}[1]; $var1[$i]=@{"case$i"}[2]; $n2[$i]=@{"case$i"}[3]; $mean2[$i]=@{"case$i"}[4]; $var2[$i]=@{"case$i"}[5]; } #統合平均値の差の推定 for($i=1;$i<=$k;$i++){ $s[$i]=(($n1[$i]-1)*$var1[$i]+($n2[$i]-1)*$var2[$i])/($n1[$i]+$n2[$i]-2); $w[$i]=((1/$n1[$i]+1/$n2[$i])*$s[$i])**-1; $AD[$i]=$mean1[$i]-$mean2[$i]; $sum_wAD+=$w[$i]*$AD[$i]; $sum_w+=$w[$i]; } $ADm=$sum_wAD/$sum_w; print "ADm = $ADm \n"; #統合平均値の差の95%信頼区間 $lower=$ADm-1.96*sqrt(1/$sum_w); $upper=$ADm+1.96*sqrt(1/$sum_w); print "95%C.I. = [$lower , $upper] \n"; #均質性の検定 for($i=1;$i<=$k;$i++){ $Q1+=$w[$i]*($AD[$i]-$ADm)**2; } use Statistics::Distributions; $a=Statistics::Distributions::chisqrprob($k-1,$Q1); print "Q1 = $Q1 \t (df=$k-1,p=$a) \n"; #有意性の検定 $Q2=$ADm**2*$sum_w; $b=Statistics::Distributions::chisqrprob(1,$Q2); print "Q2 = $Q2 \t (df=1,p=$b) \n";
☆実行例
C:\Perl>sample.pl ADm = -3.48258732038898 95%C.I. = [-5.0321989241595 , -1.93297571661847] Q1 = 241.049677879624 (df=9-1,p=0.000000000000000000000000000000000000000000000013573) Q2 = 19.403070071715 (df=1,p=0.000010584)
参考文献
丹後俊郎『メタ・アナリシス入門』朝倉書店 P83,84