<<目次へ


標準化された平均値の差を統合する方法



統合平均値の差の推定

 ここに,


統合平均値の差の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