Puissance pour test t à deux échantillons

10

J'essaie de comprendre le calcul de puissance pour le cas des deux échantillons t-test indépendants (en ne supposant pas des variances égales, j'ai donc utilisé Satterthwaite).

Voici un diagramme que j'ai trouvé pour aider à comprendre le processus:

entrez la description de l'image ici

J'ai donc supposé que compte tenu des éléments suivants concernant les deux populations et des tailles d'échantillon:

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

Je pourrais calculer la valeur critique sous le zéro concernant la probabilité de queue supérieure de 0,05:

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

puis calculer l'hypothèse alternative (qui pour ce cas, j'ai appris est une "distribution t non centrale"). J'ai calculé la bêta dans le diagramme ci-dessus en utilisant la distribution non centrale et la valeur critique trouvée ci-dessus. Voici le script complet dans 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)

Cela donne une valeur de puissance de 0,4935132.

Est-ce la bonne approche? Je trouve que si j'utilise un autre logiciel de calcul de puissance (comme SAS, que je pense avoir installé de manière équivalente à mon problème ci-dessous), j'obtiens une autre réponse (de SAS c'est 0,33).

CODE SAS:

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

En fin de compte, j'aimerais obtenir une compréhension qui me permettrait d'examiner des simulations pour des procédures plus compliquées.

EDIT: J'ai trouvé mon erreur. aurait du être

1 pt (CV, df, ncp) PAS 1 pt (t, df, ncp)

B_Miner
la source

Réponses:

8

Vous êtes proche, quelques petits changements sont cependant nécessaires:

  • μ2μ1
  • n1+n22t
  • SAS pourrait utiliser la formule de Welch ou la formule de Satterthwaite pour le df donné des variances inégales (trouvées dans ce pdf que vous avez cité ) - avec seulement 2 chiffres significatifs dans le résultat on ne peut pas le dire (voir ci-dessous)

Avec n1, n2, mu1, mu2, sd1, sd2comme défini dans votre question:

> 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

Cela correspond au résultat de G * Power qui est un excellent programme pour ces questions. Il affiche également le df, la valeur critique, le ncp, de sorte que vous pouvez vérifier tous ces calculs séparément.

entrez la description de l'image ici

Edit: L'utilisation de la formule de Satterthwaite ou de la formule de Welch ne change pas grand-chose (toujours 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

(note que je légèrement changé quelques noms de variable t, dfet diffsont également des noms de fonctions intégrées, notez que le numérateur de votre code dfest mauvais, il a un mal placé ^2, et un ^2trop grand nombre, il devrait être ((sd1^2/n1) + (sd2^2/n2))^2)

caracal
la source
Merci! La seule chose est, cette formule pour df ne suppose-t-elle pas que les écarts-types de population sont égaux? Voir la page 3 de ce qui suit (où j'ai obtenu le Satterthwaite df): stata-journal.com/sjpdf.html?articlenum=st0062 . Soi-disant, SAS utilise cette approximation dans le processus que j'ai publié.
B_Miner
J'ai trouvé mon erreur et ajusté ci-dessus dans ma question. Merci encore!
B_Miner
1
@B_Miner J'ai mis à jour ma réponse pour répondre à votre question.
caracal
1

Si vous êtes principalement intéressé par le calcul de la puissance (plutôt que d'apprendre à le faire à la main) et que vous utilisez déjà R, regardez le pwrpackage et les fonctions pwr.t.testou pwr.t2n.test. (cela peut être bon pour vérifier vos résultats même si vous le faites à la main pour apprendre).

Greg Snow
la source