Potenza per due test t campione


10

Sto cercando di capire il calcolo della potenza per il caso dei due test t del campione indipendenti (non assumendo varianze uguali, quindi ho usato Satterthwaite).

Ecco un diagramma che ho trovato per aiutare a capire il processo:

inserisci qui la descrizione dell'immagine

Quindi ho ipotizzato che dato quanto segue sulle due popolazioni e date le dimensioni del campione:

mu1<-5
mu2<-6
sd1<-3
sd2<-2
n1<-20
n2<-20

Potrei calcolare il valore critico sotto il null relativo ad avere 0,05 probabilità di coda superiore:

df<-(((sd1^2/n1)+(sd2^2/n2)^2)^2) / ( ((sd1^2/n1)^2)/(n1-1) + ((sd2^2/n2)^2)/(n2-1)  )
CV<- qt(0.95,df) #equals 1.730018

e quindi calcolare l'ipotesi alternativa (che per questo caso ho imparato è una "distribuzione t non centrale"). Ho calcolato la beta nel diagramma sopra usando la distribuzione non centrale e il valore critico trovato sopra. Ecco lo script completo in R:

#under alternative
mu1<-5
mu2<-6
sd1<-3
sd2<-2
n1<-20
n2<-20


#Under null
Sp<-sqrt(((n1-1)*sd1^2+(n2-1)*sd2^2)/(n1+n2-2))
df<-(((sd1^2/n1)+(sd2^2/n2)^2)^2) / ( ((sd1^2/n1)^2)/(n1-1) + ((sd2^2/n2)^2)/(n2-1)  )
CV<- qt(0.95,df)


#under alternative
diff<-mu1-mu2
t<-(diff)/sqrt((sd1^2/n1)+ (sd2^2/n2))
ncp<-(diff/sqrt((sd1^2/n1)+(sd2^2/n2)))


#power
1-pt(t, df, ncp)

Questo dà un valore di potenza di 0,4935132.

È questo l'approccio corretto? Trovo che se uso altri software di calcolo della potenza (come SAS, che penso di aver impostato in modo equivalente al mio problema di seguito) ottengo un'altra risposta (da SAS è 0,33).

CODICE SAS:

proc power;
      twosamplemeans test=diff_satt
         meandiff = 1
         groupstddevs = 3 | 2
         groupweights = (1 1)
         ntotal = 40
         power = .
        sides=1;
   run;

In definitiva, vorrei ottenere una comprensione che mi permettesse di esaminare le simulazioni per procedure più complicate.

EDIT: ho trovato il mio errore. avrebbe dovuto essere

1-pt (CV, df, ncp) NON 1-pt (t, df, ncp)

Risposte:


8

Sei vicino, sono necessarie alcune piccole modifiche:

  • μ2-μ1
  • n1+n2-2t
  • SAS potrebbe usare la formula di Welch o la formula di Satterthwaite per le differenze non uguali date dal df (trovate in questo pdf che hai citato ) - con solo 2 cifre significative nel risultato che non si possono dire (vedi sotto)

Con n1, n2, mu1, mu2, sd1, sd2come definito nella tua domanda:

> alpha   <- 0.05
> dfGP    <- n1+n2 - 2                     # degrees of freedom (used by G*Power)
> cvGP    <- qt(1-alpha, dfGP)             # crit. value for one-sided test (under the null)
> muDiff  <- mu2-mu1                       # true difference in means
> sigDiff <- sqrt((sd1^2/n1) + (sd2^2/n2)) # true SD for difference in empirical means
> ncp     <- muDiff / sigDiff              # noncentrality parameter (under alternative)
> 1-pt(cvGP, dfGP, ncp)                    # power
[1] 0.3348385

Ciò corrisponde al risultato di G * Power, che è un ottimo programma per queste domande. Visualizza anche df, valore critico, ncp, in modo da poter controllare tutti questi calcoli separatamente.

inserisci qui la descrizione dell'immagine

Modifica: l'uso della formula di Satterthwaite o della formula di Welch non cambia molto (sempre 0,33 *):

# Satterthwaite's formula
> var1  <- sd1^2
> var2  <- sd2^2
> num   <- (var1/n1 + var2/n2)^2
> denST <- var1^2/((n1-1)*n1^2) + var2^2/((n2-1)*n2^2)
> (dfST <- num/denST)
[1] 33.10309

> cvST <- qt(1-alpha, dfST)
> 1-pt(cvST, dfST, ncp)
[1] 0.3336495

# Welch's formula
> denW <- var1^2/((n1+1)*n1^2) + var2^2/((n2+1)*n2^2)
> (dfW <- (num/denW) - 2)
[1] 34.58763

> cvW   <- qt(1-alpha, dfW)
> 1-pt(cvW, dfW, ncp)
[1] 0.3340453

(nota che ho leggermente cambiato alcuni nomi di variabili come t, dfe diffsono anche nomi di funzioni integrate, nota anche che il numeratore del tuo codice dfè errato, ha un posto errato ^2e uno di ^2troppo, dovrebbe essere ((sd1^2/n1) + (sd2^2/n2))^2)


Grazie! L'unica cosa è, questa formula per df non assume che le deviazioni standard della popolazione siano uguali? Vedi pagina 3 di seguito (dove ho preso il Satterthwaite df): stata-journal.com/sjpdf.html?articlenum=st0062 . Presumibilmente, SAS utilizza questa approssimazione nel processo che ho pubblicato.
B_Miner,

Ho trovato il mio errore e corretto sopra nella mia domanda. Grazie ancora!
B_Miner,

1
@B_Miner Ho aggiornato la mia risposta per rispondere alla tua domanda.
Caracal,

1

Se sei principalmente interessato a calcolare la potenza (piuttosto che imparare facendolo manualmente) e stai già usando R, guarda il pwrpacchetto e le funzioni pwr.t.testo pwr.t2n.test. (questi possono essere utili per verificare i risultati anche se lo fai manualmente per imparare).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.