Potência para teste t de duas amostras

10

Estou tentando entender o cálculo de potência para o caso do teste t de duas amostras independentes (não assumindo variações iguais, então usei Satterthwaite).

Aqui está um diagrama que eu encontrei para ajudar a entender o processo:

insira a descrição da imagem aqui

Então, assumi que, considerando o seguinte sobre as duas populações e os tamanhos das amostras:

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

Eu poderia calcular o valor crítico sob o valor nulo relacionado a ter 0,05 de probabilidade na cauda superior:

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 depois calcule a hipótese alternativa (que para este caso eu aprendi é uma "distribuição não central t"). Calculei beta no diagrama acima usando a distribuição não central e o valor crítico encontrado acima. Aqui está o script completo em 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)

Isso fornece um valor de energia de 0,4935132.

Essa é a abordagem correta? Acho que se eu usar outro software de cálculo de energia (como o SAS, que acho que configurei equivalentemente ao meu problema abaixo), recebo outra resposta (do SAS é 0,33).

CÓDIGO SAS:

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

Por fim, gostaria de obter um entendimento que me permita analisar as simulações para procedimentos mais complicados.

EDIT: Encontrei o meu erro. deveria ter ficado

1 ponto (CV, df, ncp) NÃO 1 ponto (t, df, ncp)

B_Miner
fonte

Respostas:

8

Você está perto, algumas pequenas alterações são necessárias:

  • A verdadeira diferença de médias é normalmente considerada como , e não o contrário.μ2μ1
  • G * Power usa como graus de liberdade para a distribuição neste caso (variações diferentes, tamanhos de grupo iguais), seguindo uma sugestão de Cohen, como explicado aquin1+n22t
  • O SAS pode usar a fórmula de Welch ou a de Satterthwaite para as variações desiguais do df (encontradas neste pdf que você citou ) - com apenas 2 dígitos significativos no resultado que não se pode dizer (veja abaixo)

Com n1, n2, mu1, mu2, sd1, sd2como definido na sua pergunta:

> 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

Isso corresponde ao resultado do G * Power, que é um ótimo programa para essas perguntas. Ele exibe o valor crítico df, ncp também, para que você possa verificar todos esses cálculos separadamente.

insira a descrição da imagem aqui

Edit: Usando a fórmula de Satterthwaite ou a fórmula de Welch não muda muito (ainda 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 eu mudei um pouco alguns nomes de variáveis como t, dfe difftambém são nomes de funções embutidas, observe também que o numerador do seu código para dfé errado, tem um extraviado ^2, e um ^2demasiados, que deveria ser ((sd1^2/n1) + (sd2^2/n2))^2)

caracal
fonte
obrigado! A única coisa é que essa fórmula para df não assume que os desvios padrão da população sejam iguais? Consulte a página 3 do seguinte (onde obtive o Satterthwaite df): stata-journal.com/sjpdf.html?articlenum=st0062 . Supostamente, o SAS usa essa aproximação no processo que publiquei.
B_Miner 15/10
Encontrei meu erro e ajustei acima na minha pergunta. Obrigado novamente!
B_Miner 15/10
11
@B_Miner Atualizei minha resposta para responder à sua pergunta.
caracal
1

Se você está interessado principalmente em calcular a potência (em vez de aprender fazendo isso manualmente) e já está usando R, consulte o pwrpacote e as funções pwr.t.testou pwr.t2n.test. (pode ser bom verificar seus resultados, mesmo que você o faça manualmente para aprender).

Greg Snow
fonte