Потужність для двох зразків t випробування


10

Я намагаюся зрозуміти розрахунок потужності для випадку двох незалежних пробних тестів (не передбачаючи рівних дисперсій, тому я використовував Satterthwaite).

Ось діаграма, яку я знайшов, щоб допомогти зрозуміти процес:

введіть тут опис зображення

Тож я припустив, що враховуючи наступне про дві популяції та розміри вибірки:

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

Я міг обчислити критичне значення під нульовим значенням, пов’язаним із наявністю 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

а потім обчислити альтернативну гіпотезу (що для цього випадку я дізнався, як "не центральний розподіл t"). Я розраховував бета-версію на діаграмі вище, використовуючи не центральне розподілення та критичне значення, знайдене вище. Ось повний сценарій на 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)

Це дає значення потужності 0,4935132.

Це правильний підхід? Я вважаю, що якщо я використовую інше програмне забезпечення для розрахунку потужності (наприклад, SAS, яке, на мою думку, я встановив рівнозначно моїй проблемі нижче), я отримую іншу відповідь (від SAS це 0,33).

SAS КОД:

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

Зрештою, я хотів би зрозуміти, що дозволило б розглянути симуляції для складніших процедур.

EDIT: Я виявив свою помилку. повинно було

1-pt (CV, df, ncp) НЕ 1-pt (t, df, ncp)

Відповіді:


8

Ви близькі, хоча деякі невеликі зміни потрібні:

  • μ2μ1
  • n1+n22t
  • SAS може використовувати формулу Welch або формулу Satterthwaite для df з неоднаковими відхиленнями (знайдені в цьому цитованому вами pdf ) - у результаті є лише дві значущі цифри, про які не можна сказати (див. Нижче)

З, n1, n2, mu1, mu2, sd1, sd2як визначено у вашому запитанні:

> 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

Це відповідає результату G * Power, який є чудовою програмою для цих питань. Він також відображає df, критичне значення, ncp, також ви можете перевірити всі ці обчислення окремо.

введіть тут опис зображення

Редагувати: Використання формули Satterthwaite або формули Welch не сильно змінюється (все ще 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

(зауважте, що я трохи змінив деякі імена змінних як t, dfі diffце також назви вбудованих функцій. Також зауважте, що чисельник вашого коду dfнеправильний, він неправильний ^2, і один ^2занадто багато, це має бути ((sd1^2/n1) + (sd2^2/n2))^2)


Дякую! Одна річ, чи не припускає ця формула для df, що стандартні відхилення населення рівні? Див. Сторінку 3 із наступного (де я отримав Satterthwaite df): stata-journal.com/sjpdf.html?articlenum=st0062 . Імовірно, SAS використовує це наближення в програмі, яку я розмістив.
B_Miner

Я виявив свою помилку і відкоригував вище у своєму запитанні. Знову дякую!
B_Miner

1
@B_Miner Я оновив свою відповідь, щоб вирішити ваше питання.
каракал

1

Якщо ви в основному зацікавлені в обчисленні енергії (а не тому, що навчаєтеся робити це вручну), а ви вже використовуєте R, то подивіться на pwrпакет і або на, pwr.t.testабо на pwr.t2n.testфункції. (це може бути корисно для підтвердження результатів, навіть якщо ви це робите вручну, щоб навчитися).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.