안녕하세요 여러분: 제가 헷갈리는 부분을 강조하기 위해 예시 데이터 세트를 첨부했습니다. 두 비율의 차이에 대한 신뢰 구간을 구하고 싶다고 가정해 보겠습니다. 충분히 쉬울 겁니다. Fit Y by X(JMP v18.0.0)를 통해 다음 제목 아래에 세 개의 구간을 얻었습니다.
비율에 대한 두 표본 검정.
위험 차이
TOST 테스트

보시다시피 간격이 서로 일치하지 않습니다.
제 질문은 다음과 같습니다.
1. 왜 그들은 같지 않은가요?
2. 각각에 어떤 공식이 사용되나요?
3. 제가 뭔가 놓치고 있는 건가요?
저는 이 내용을 Two Sample Proportions Report에서 찾았습니다(제 생각에는 더 명확할 수도 있을 것 같습니다).
비율에 대한 두 샘플 테스트 보고서
귀하의 유익한 배려에 감사드립니다!
참고로, 기술 지원팀에 문의했더니 다음과 같은 답변을 받았습니다.
세 가지 검정은 약간 다른 방법을 사용하는데, 이로 인해 신뢰 구간에서 관찰되는 차이가 발생합니다. 모든 방법은 SAS 설명서( https://go.documentation.sas.com/doc/ko/statcdc/14.2/statug/statug_freq_details53.htm#statug.freq.freqrdiffcl )에 설명되어 있습니다.
1. 비율에 대한 두 표본 검정의 경우 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);
또한 "개발팀에 두 가지 요청을 할 예정입니다. 하나는 문서화 팀에, 각 방법에 대한 참고 자료(및 통계 정보)를 추가하는 것입니다. 다른 하나는 사용자가 원하는 방법을 선택할 수 있도록 개발팀에 기능 요청을 추가할 것입니다."라고 밝혔습니다.
평소처럼 기술 지원은 매우 친절하고, 철저하고, 전문적입니다.