<<目次へ


Peto methodによるオッズ比の統合



研究iの2×2分割表
事象A 事象B 合計
治療A ai bi n1i
治療B ci di n0i
合計 m1i m0i ni


(観測値)=Oi=ai


手順1 統合オッズ比の推定値を求める。


手順2 統合オッズ比の95%信頼区間を求める。


手順3 均質性の検定に必要な統計量を求める。

* 「求めた統計量Q1は自由度k-1のカイ二乗分布に従う」という意味です。


手順4 有意性の検定に必要な統計量を求める。



 以上の計算をPerlを用いて計算するならば次のようになる。

1. データファイルの用意

#ファイル名:Peto.dat
---ここから---
a1 b1 c1 d1
a2 b2 c2 d2
a3 b3 c3 d3
 ・
 ・
 ・
an bn cn dn
---ここまで---

2. ソースコード

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

#分割表の合計の計算
for($i=1;$i<=$size;$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];
        $n[$i]=@{"dat$i"}[0]+@{"dat$i"}[1]+@{"dat$i"}[2]+@{"dat$i"}[3];
}

#OiとEiおよびViの計算
for($i=1;$i<=$size;$i++){
        $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));
}

#OR_p,95%CI,Q_1,Q_2の計算
for($i=1;$i<=$size;$i++){
        $sum+=($O[$i]-$E[$i]); #Oi-Ei
        $sum2+=$V[$i]; #Vi
        $sum3+=(($O[$i]-$E[$i])**2)/$V[$i]; #(Oi-Ei)^2/Vi
}
$OR_p=exp($sum/$sum2);
$CIm=$OR_p*exp(-1.96*sqrt(1/$sum2));
$CIp=$OR_p*exp(1.96*sqrt(1/$sum2));
$Q_1=$sum3-$sum**2/$sum2;
$Q_2=((abs($sum)-0.5)**2)/$sum2;

use Statistics::Distributions;
$a=Statistics::Distributions::chisqrprob($size-1,$Q_1);
$b=Statistics::Distributions::chisqrprob(1,$Q_2);

print "OR_p = $OR_p \n";
print "95%CI = [$CIm , $CIp] \n";
print "Q_1 = $Q_1 \t"; print "p = $a \n";
print "Q_2 = $Q_2 \t"; print "p = $b \n";

3. 実行例

C:\Perl>peto_method.pl
OR_p = 0.781948180635855
95%CI = [0.706399557679639 , 0.865576642216727]
Q_1 = 21.3816140344881  p = 0.16430
Q_2 = 22.266703001797   p = 0.0000023729



参考文献

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