標準化された平均値の差を統合する方法
統合平均値の差の推定
ここに,
統合平均値の差の95%信頼区間
均質性の検定
有意性の検定
☆Perlプログラム *使用ファイルはこちらのページ
#データファイルの読み込み
$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);
$STD[$i]=($mean1[$i]-$mean2[$i])/sqrt($s[$i]);
$w[$i]=(($n1[$i]+$n2[$i])/($n1[$i]*$n2[$i])
+($STD[$i]**2)/(2*($n1[$i]+$n2[$i])))**-1;
$sum_wSTD+=$w[$i]*$STD[$i];
$sum_w+=$w[$i];
}
$STDm=$sum_wSTD/$sum_w;
print "STDm = $STDm \n";
#統合平均値の差の95%信頼区間
$lower=$STDm-1.96*sqrt(1/$sum_w);
$upper=$STDm+1.96*sqrt(1/$sum_w);
print "95%C.I. = [$lower , $upper] \n";
#均質性の検定
for($i=1;$i<=$k;$i++){
$Q1+=$w[$i]*($STD[$i]-$STDm)**2;
}
use Statistics::Distributions;
$a=Statistics::Distributions::chisqrprob($k-1,$Q1);
print "Q1 = $Q1 \t (df=$k-1,p=$a) \n";
#有意性の検定
$Q2=$STDm**2*$sum_w;
$b=Statistics::Distributions::chisqrprob(1,$Q2);
print "Q2 = $Q2 \t (df=1,p=$b) \n";
☆実行例
C:\Perl>sample.pl STDm = -0.412561851769232 95%C.I. = [-0.534276275516688 , -0.290847428021775] Q1 = 125.180239049059 (df=9-1,p=0.000000000000000000000028171) Q2 = 44.1373427810714 (df=1,p=0.000000000030612)
参考文献
丹後俊郎『メタ・アナリシス入門』朝倉書店 P89