皆さん、こんにちは。困惑している点を説明するために、サンプルデータセットを添付しました。2つの割合の差の信頼区間を求めたいとします。これは簡単なはずです。そこで、Fit Y by X (JMP v18.0.0) を実行すると、以下の見出しの下に3つの区間が得られます。
比率の 2 つのサンプルの検定。
リスク差
TOSTテスト

ご覧のとおり、間隔は互いに一貫していません。
私の質問は次のとおりです:
1. なぜ同じではないのでしょうか?
2. それぞれどのような計算式が使用されますか?
3. 何か見逃しているのでしょうか?
私は、2 つのサンプルの比率レポートでこれを見つけました (私見では、より明確にできると思います)。
割合の2標本検定レポート
あなたの賢明な考慮に感謝します!
参考までに、テクニカル サポートに問い合わせたところ、次の回答が得られました。
3つの検定ではわずかに異なる手法が用いられており、その結果、信頼区間に違いが生じています。これらの手法はすべて、SASのドキュメント(https://go.documentation.sas.com/doc/en/statcdc/14.2/statug/statug_freq_details53.htm#statug.freq.freqrdiffcl )に記載されています。
1. 比率の 2 サンプル検定では、JMP は Agresti-Caffo 限界を使用します。スクリプトは次のとおりです。
x1 = 19; n1 = 20;
x2 = 18; n2 = 20;
/* proportion difference */
diff = x1/n1 - x2/n2;
/* Calculation for CI for Two Sample Test for Proportion */
p1 = (x1+1)/(n1+2);
p2 = (x2+1)/(n2+2);
pdiff= p1 - p2;
lower = pdiff - normalquantile(.95)*sqrt(p1*(1-p1)/(n1+2)+p2*(1-p2)/(n2+2));
upper = pdiff + normalquantile(.95)*sqrt(p1*(1-p1)/(n1+2)+p2*(1-p2)/(n2+2));
show(lower, upper);
2. リスク差の信頼区間には Wald 区間を使用します。スクリプトは次のとおりです。
/* Calculation for CI for Risk Difference */
p1 = (x1)/(n1);
p2 = (x2)/(n2);
diff = x1/n1 - x2/n2;
lower = diff - normalquantile(.95)*sqrt(p1*(1-p1)/(n1)+p2*(1-p2)/(n2));
upper = diff + normalquantile(.95)*sqrt(p1*(1-p1)/(n1)+p2*(1-p2)/(n2));
show(lower, upper);
3. 同等性検定におけるリスク差の信頼限界には、Miettinen-Nurminen (スコア) 信頼限界を使用します。スクリプトは次のとおりです。
/* Calculation for CI for Equivalence Test */
/* mnStdEquivDiff is a function to calculate the standard deviation of se(p1-p2) */
mnStdEquivDiff=Function({n11, n21, n1, n2, n, margin },
{default local},
p1_hat=n11/n1;
p2_hat=n21/n2;
theta=n2/n1;
d=-p1_hat*margin*(1+margin);
c=margin^2+margin*(2*p1_hat+theta+1) + p1_hat + theta*p2_hat;
b=-(1+theta+p1_hat + theta*p2_hat + margin*(theta+2));
a=1+theta;
v=b^3/(3*a)^3-b*c/(6*a^2) + d/(2*a);
if(v>0, sign=1, sign=-1);
u=sign*root(b^2/(3*a)^2 -c/(3*a));
w=(pi()+ArcCosine(v/u^3))/3;
p1_tlt=2*u*cosine(w)-b/(3*a);
p2_tlt =p1_tlt -margin;
var1=p1_tlt*(1-p1_tlt)/n1;
var2=p2_tlt*(1-p2_tlt)/n2;
correct=n/(n-1);
correct=1;
std_diff=root(correct*(var1+var2));
std_diff;
);
/* Calculation using the example data */
n11=19;
n21=18;
n1=20;
n2=20;
n=40;
alpha=0.05;
p1=n11/n1;
p2=n21/n2;
diff=p1-p2;
show(diff);
maxit=100;
conv = .00000001;
z=ChiSquare Quantile( 0.9, 1 );
pdiff = diff;
correct=1;
//calculate the lower confidence limit
inc=1+diff;
converged = 0;
for (i = 0, i < maxit, i++,
inc *= 0.5;
lcl = pdiff - inc;
var = mnStdEquivDiff(n11, n21, n1, n2, n, lcl);
var = var * var;
var *= correct;
d = diff - lcl;
if( var > 0, score=(d * d) / var, score=. );
if (score < z, pdiff = lcl);
if ((inc < conv) | abs(z - score) < conv,
converged = 1;
break();
);
);
if ((i == maxit) & converged==0, lcl = MACMISSING);
//calculate the upper confidence limit
inc=1-diff;
converged = 0;
for (i = 0, i < maxit, i++,
inc *= 0.5;
ucl = pdiff + inc;
var = mnStdEquivDiff(n11, n21, n1, n2, n, ucl);
var = var * var;
var *= correct;
d = diff - ucl;
if( var > 0, score=(d * d) / var, score=. );
if (score < z, pdiff = ucl);
if ( (inc < conv) | abs(z - score) < conv,
converged = 1;
break();
);
);
if ((i == maxit) & converged==0, ucl = MACMISSING);
show(lcl, ucl);
また、開発チームに2つのリクエストを提出する予定だと述べました。「1つはドキュメントチームに提出し、それぞれの方法の参考資料(および統計情報)を追加する。もう1つは、ユーザーが希望する方法を選択できるようにするための機能リクエストを開発チームに提出する」
いつものように、テクニカル サポートは非常に役立ち、徹底的かつプロフェッショナルです。