Попередні запитання:
Як було обговорено в посібнику G * Power , існує кілька різних типів аналізу потужності, залежно від того, що ви хочете вирішити. (Тобто , розмір ефекту , та потужність існують один щодо одного; вказівка будь-яких трьох з них дозволить вирішити для четвертого.) E S αNESα
- у вашому описі ви хочете знати відповідне для фіксації вказаних вами частот відповідей з та потужністю = 80%. Це апріорна сила . α = .05Nα=.05
- ми можемо почати з потужних потужностей (визначити потужність, задану , швидкість реакції та альфа), оскільки це концептуально простіше, а потім рухатися вгоруN
Окрім відмінного поста @ GregSnow, тут можна знайти ще одне справді чудовий посібник із симуляційного аналізу потужностей на CV: Розрахунок статистичної потужності . Для узагальнення основних ідей:
- з'ясувати ефект, який потрібно виявити
- генерувати N даних із цього можливого світу
- запустіть аналіз, який ви маєте намір провести над цими підробленими даними
- зберігайте, чи є результати "значущими" відповідно до вибраної альфа
- повторіть багато ( ) разів і використовуйте% 'значущий' як оцінку (пост-hoc) потужності при цьомуНBN
- щоб визначити a priori потужність, шукайте можливі 's, щоб знайти значення, яке дає бажану потужність N
Чи знайдете ви значення для певної ітерації, можна зрозуміти як результат випробування Бернуллі з вірогідністю (де - сила). Пропорція, знайдена за ітераціями, дозволяє нам наблизити справжній . Для кращого наближення ми можемо збільшити , хоча це також змусить моделювання зайняти більше часу. p B p BppBpB
У R основним способом генерування двійкових даних із заданою ймовірністю «успіху» є «rbinom
- Наприклад, щоб отримати кількість успіхів з 10 випробувань Бернуллі з вірогідністю р, код був би
rbinom(n=10, size=1, prob=p)
(ви, ймовірно, захочете призначити результат змінної для зберігання)
- Ви також можете генерувати такі дані менш елегантно, використовуючи ? runif , наприклад,
ifelse(runif(1)<=p, 1, 0)
- якщо ви вважаєте, що результати опосередковуються латентною змінною Гаусса, ви можете генерувати приховану змінну як функцію ваших коваріатів з ? rnorm , а потім перетворювати їх у ймовірності з
pnorm()
та використовувати їх у своєму rbinom()
коді.
Ви заявляєте, що "для включення будь-якої кривизни" ви будете включати поліноміальний термін Var1 * Var1). Тут панує плутанина; поліноміальні терміни можуть допомогти нам врахувати кривизну, але це термін взаємодії - це нам не допоможе. Тим не менш, ваш показник відповідей вимагає від нас включити як квадратичні терміни, так і умови взаємодії у нашу модель. Зокрема, ваша модель повинна включати: , та , за винятком основних термінів. v a r 1 ∗ v a r 2 v a r 1 2 ∗ v a r 2var12var1∗var2var12∗var2
- Незважаючи на те, що написано в контексті іншого питання, моя відповідь тут: Різниця між моделями logit і probit має багато основної інформації про ці типи моделей.
Так само , як існують різні види коефіцієнтів помилок типу I , коли є кілька гіпотез (наприклад, за відміну частоти помилок , коефіцієнт помилок familywise , і за сім'ю частоти помилок ), тому існують різні види харчування * (наприклад, для а один заздалегідь заданий ефект , для будь-якого ефекту та для всіх ефектів ). Ви також можете шукати потужність виявлення конкретної комбінації ефектів або потужність одночасного тестування моделі в цілому. З мого опису вашого коду SAS, я здогадуюсь, що він шукає останній. Однак, виходячи з опису вашої ситуації, я припускаю, що ви хочете виявити ефекти взаємодії як мінімум.
- * довідка: Максвелл, SE (2004). Наполегливість недостатньо сильних досліджень у психологічних дослідженнях: причини, наслідки та засоби усунення. Психологічні методи , 9 , 2 , с. 147-163.
- ваші ефекти досить малі (не плутати з низькими показниками реакцій), тому нам буде складно досягти хорошої сили.
- Зауважте, що, хоча всі вони звучать досить схоже, вони дуже не однакові (наприклад, дуже можливо отримати значну модель без суттєвих наслідків - обговорено тут: Наскільки регресія може бути суттєвою, але всі прогнози не можуть бути суттєві? або значущі ефекти, але де модель не є істотною - тут обговорюється: Значущість коефіцієнтів у лінійній регресії: суттєвий t-тест проти несуттєвої F-статистики ), що буде проілюстровано нижче.
Щоб по-іншому подумати над питаннями, пов'язаними з владою, дивіться мою відповідь тут: Як повідомити загальну точність при оцінці кореляцій в контексті виправдання розміру вибірки.
Проста пост-хоч потужність для логістичної регресії в R:
Скажімо, ваш розміщений рівень відповідей відображає справжню ситуацію у світі, і що ви надіслали 10000 листів. Яка сила виявити ці наслідки? (Зауважте, що я відомий тим, що пишуть "комічно неефективний" код. Наступний проект призначений для легкого дотримання, а не оптимізований для ефективності; насправді це досить повільно.)
set.seed(1)
repetitions = 1000
N = 10000
n = N/8
var1 = c( .03, .03, .03, .03, .06, .06, .09, .09)
var2 = c( 0, 0, 0, 1, 0, 1, 0, 1)
rates = c(0.0025, 0.0025, 0.0025, 0.00395, 0.003, 0.0042, 0.0035, 0.002)
var1 = rep(var1, times=n)
var2 = rep(var2, times=n)
var12 = var1**2
var1x2 = var1 *var2
var12x2 = var12*var2
significant = matrix(nrow=repetitions, ncol=7)
startT = proc.time()[3]
for(i in 1:repetitions){
responses = rbinom(n=N, size=1, prob=rates)
model = glm(responses~var1+var2+var12+var1x2+var12x2,
family=binomial(link="logit"))
significant[i,1:5] = (summary(model)$coefficients[2:6,4]<.05)
significant[i,6] = sum(significant[i,1:5])
modelDev = model$null.deviance-model$deviance
significant[i,7] = (1-pchisq(modelDev, 5))<.05
}
endT = proc.time()[3]
endT-startT
sum(significant[,1])/repetitions # pre-specified effect power for var1
[1] 0.042
sum(significant[,2])/repetitions # pre-specified effect power for var2
[1] 0.017
sum(significant[,3])/repetitions # pre-specified effect power for var12
[1] 0.035
sum(significant[,4])/repetitions # pre-specified effect power for var1X2
[1] 0.019
sum(significant[,5])/repetitions # pre-specified effect power for var12X2
[1] 0.022
sum(significant[,7])/repetitions # power for likelihood ratio test of model
[1] 0.168
sum(significant[,6]==5)/repetitions # all effects power
[1] 0.001
sum(significant[,6]>0)/repetitions # any effect power
[1] 0.065
sum(significant[,4]&significant[,5])/repetitions # power for interaction terms
[1] 0.017
Отже, ми бачимо, що 10 000 листів насправді не досягає 80% сили (будь-якого виду) для виявлення цих частот відповідей. (Я недостатньо впевнений, що робить код SAS, щоб можна було пояснити суттєву невідповідність між цими підходами, але цей код концептуально простий - якщо повільний - і я витратив деякий час на його перевірку, і я думаю, що це результати розумні.)
Апріорі потужність на основі симуляції для логістичної регресії:
Звідси ідея полягає в простому пошуку можливих , поки ми не знайдемо значення, яке дає бажаний рівень типу потужності, яка вас цікавить. Будь-яка стратегія пошуку, яку ви можете закодувати для роботи з цим, буде добре (в теорія). Враховуючи , які будуть потрібні для отримання таких невеликих ефектів, варто подумати над тим, як це зробити ефективніше. Мій типовий підхід - це просто груба сила, тобто оцінка кожної з яку я можу обґрунтовано вважати. (Однак зауважте, що я, як правило, вважаю лише невеликий діапазон, і я зазвичай працюю з дуже малими - принаймні порівняно з цим.) N N NNNNN
Натомість, моя стратегія тут полягала в тому, щоб закріпити можливі , щоб зрозуміти, яким буде коло повноважень. Таким чином, я вибрав в 500 000 і повторно запустив код (ініціюючи те ж насіння, для цього потрібно було півтори години). Ось результати: NNN
sum(significant[,1])/repetitions # pre-specified effect power for var1
[1] 0.115
sum(significant[,2])/repetitions # pre-specified effect power for var2
[1] 0.091
sum(significant[,3])/repetitions # pre-specified effect power for var12
[1] 0.059
sum(significant[,4])/repetitions # pre-specified effect power for var1X2
[1] 0.606
sum(significant[,5])/repetitions # pre-specified effect power for var12X2
[1] 0.913
sum(significant[,7])/repetitions # power for likelihood ratio test of model
[1] 1
sum(significant[,6]==5)/repetitions # all effects power
[1] 0.005
sum(significant[,6]>0)/repetitions # any effect power
[1] 0.96
sum(significant[,4]&significant[,5])/repetitions # power for interaction terms
[1] 0.606
З цього ми бачимо, що величина ваших ефектів значно змінюється, і, отже, ваша здатність їх виявляти змінюється. Наприклад, ефект особливо важко виявити, він є лише 6% часу навіть за півмільйона літер. З іншого боку, модель в цілому завжди була значно кращою за нульову модель. Інші можливості є між ними. Хоча більшість «даних» викидаються на кожну ітерацію, все-таки можливе гарне вивчення. Наприклад, ми могли б використовувати матрицю для оцінки кореляції співвідношень ймовірностей різних змінних. var12significant
На закінчення мушу зазначити, що через складність та велику кількість пов'язаних із вашою ситуацією, це було не так просто, як я підозрював / стверджував у своєму первинному коментарі. Однак ви, звичайно, можете отримати уявлення про те, як це можна зробити в цілому, і питання, пов'язані з аналізом енергії, з того, що я тут виклав. HTH. N