Ciao a tutti: ho allegato un set di dati di esempio per evidenziare un problema che mi confonde. Supponiamo di volere un intervallo di confidenza per la differenza tra due proporzioni. Dovrebbe essere abbastanza semplice. Quindi, tramite "Fit Y by X" (JMP v18.0.0), ottengo tre intervalli con le seguenti intestazioni:
Test a due campioni per le proporzioni.
Differenza di rischio
Test TOST

Come puoi vedere, gli intervalli non sono coerenti tra loro.
La mia domanda è questa:
1. Perché non sono la stessa cosa?
2. Quali formule vengono utilizzate per ciascuna?
3. Mi sto perdendo qualcosa?
L'ho trovato per il Two Sample Proportions Report (a mio modesto parere, potrebbe essere più esplicito).
Rapporto sul test delle proporzioni a due campioni
Grazie per la tua attenta considerazione!
Per vostra informazione, ho contattato l'assistenza tecnica e ho ricevuto quanto segue.
I tre test utilizzano metodi leggermente diversi, il che determina la differenza osservata negli intervalli di confidenza. I metodi sono tutti descritti nella documentazione SAS qui: https://go.documentation.sas.com/doc/en/statcdc/14.2/statug/statug_freq_details53.htm#statug.freq.freqrdiffcl
1. Per il test a due campioni per le proporzioni, JMP utilizza il limite di Agresti-Caffo: lo script seguente.
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. L'intervallo di confidenza per la differenza di rischio utilizza l'intervallo di Wald: lo script seguente.
/* 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. I limiti di confidenza per la differenza di rischio nel test di equivalenza utilizzano i limiti di confidenza di Miettinen-Nurminen (punteggio): segue lo script.
/* 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);
Hanno anche affermato che avrebbero: "aperti due richieste al team di sviluppo. Una per il team di documentazione, per aggiungere i riferimenti (e i dettagli statistici) per ciascuno dei diversi metodi. Per l'altra, aggiungerò una richiesta di funzionalità al team di sviluppo per consentire all'utente di scegliere il metodo desiderato".
Come al solito, l'assistenza tecnica è molto utile, completa e professionale.