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