<<目次へ


Mantel-Haenszel methodによるオッズ比の統合


統合オッズ比の推定


統合オッズ比の95%信頼区間

 ただし,


均質性の検定


有意性の検定

 Peto methodの手順4と同じ。



☆Perlソースコード *使用ファイルはPeto methodのページのものと同じ

#データファイルの読み込み
$pathname="Peto.dat";
open MYFILE, "$pathname";
while (<MYFILE>) {
        chomp;
        @{"dat$."} = split /\t/;
}
$k=$.;
close MYFILE;

#統合オッズ比の推定
for($i=1;$i<=$k;$i++){
        $n[$i]=@{"dat$i"}[0]+@{"dat$i"}[1]+@{"dat$i"}[2]+@{"dat$i"}[3];
        $sum1+=(@{"dat$i"}[0]*@{"dat$i"}[3])/$n[$i];
        $sum2+=(@{"dat$i"}[1]*@{"dat$i"}[2])/$n[$i];
}
$ORmh=$sum1/$sum2;
print "ORmh = $ORmh \n";

#統合オッズ比の95%信頼区間
for($i=1;$i<=$k;$i++){
        $P[$i]=(@{"dat$i"}[0]+@{"dat$i"}[3])/$n[$i];
        $Q[$i]=(@{"dat$i"}[1]+@{"dat$i"}[2])/$n[$i];
        $R[$i]=(@{"dat$i"}[0]*@{"dat$i"}[3])/$n[$i];
        $S[$i]=(@{"dat$i"}[1]*@{"dat$i"}[2])/$n[$i];
        $sig1+=$P[$i]*$R[$i];
        $sig2+=$R[$i];
        $sig3+=$P[$i]*$S[$i]+$Q[$i]*$R[$i];
        $sig4+=$S[$i];
        $sig5+=$Q[$i]*$S[$i];
}
$Var=$sig1/(2*($sig2)**2)
        +$sig3/(2*$sig2*$sig4)
        +$sig5/(2*($sig4)**2);
$upper=exp(log($ORmh)+1.96*sqrt($Var));
$lower=exp(log($ORmh)-1.96*sqrt($Var));
print "95%C.I. = [$lower , $upper] \n";

#均質性の検定
for($i=1;$i<=$k;$i++){
        $w[$i]=(1/@{"dat$i"}[0]+1/@{"dat$i"}[1]+1/@{"dat$i"}[2]+1/@{"dat$i"}[3])**-1;
        $OR[$i]=(@{"dat$i"}[0]*@{"dat$i"}[3])/(@{"dat$i"}[1]*@{"dat$i"}[2]);
        $Q1+=$w[$i]*(log($OR[$i])-log($ORmh))**2;
}
use Statistics::Distributions;
$a=Statistics::Distributions::chisqrprob($k-1,$Q1);
print "Q1 = $Q1\t(df=$k-1,p=$a)\n";

#有意性の検定
for($i=1;$i<=$k;$i++){
        $n_1[$i]=@{"dat$i"}[0]+@{"dat$i"}[1];
        $n_0[$i]=@{"dat$i"}[2]+@{"dat$i"}[3];
        $m_1[$i]=@{"dat$i"}[0]+@{"dat$i"}[2];
        $m_0[$i]=@{"dat$i"}[1]+@{"dat$i"}[3];
        $O[$i]=@{"dat$i"}[0];
        $E[$i]=($n_1[$i]*$m_1[$i])/$n[$i];
        $V[$i]=($n_1[$i]*$n_0[$i]*$m_1[$i]*$m_0[$i])/($n[$i]**2*($n[$i]-1));
        $goukei+=($O[$i]-$E[$i]); #Oi-Ei
        $goukei2+=$V[$i]; #Vi
}
$Q2=((abs($goukei)-0.5)**2)/$goukei2;
$b=Statistics::Distributions::chisqrprob(1,$Q2);
print "Q2 = $Q2\t(df=1,p=$b)\n";


☆実行例

C:\Perl>sample.pl
ORmh = 0.781571623189409
95%C.I. = [0.705802596856038 , 0.865474574471597]
Q1 = 21.4811412869925   (df=17-1,p=0.16075)
Q2 = 22.266703001797    (df=1,p=0.0000023729)



参考文献
[1]丹後俊郎『メタ・アナリシス入門-エビデンスの統合をめざす統計手法-』朝倉書店 P70, 71