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