Я шукаю програму (в R або SAS або окрему, якщо безкоштовна або низька вартість), яка зробить аналіз потужності для порядкової логістичної регресії.
Я шукаю програму (в R або SAS або окрему, якщо безкоштовна або низька вартість), яка зробить аналіз потужності для порядкової логістичної регресії.
Відповіді:
Я вважаю за краще робити аналіз потужності поза межами основ шляхом моделювання. Що стосується попередньо замовлених пакетів, я ніколи не впевнений, які припущення робляться.
Моделювання сили досить прямо (і доступно) за допомогою Р.
replicate
функцію, щоб запустити код зверху кілька разів (я зазвичай починаю приблизно в 100 разів, щоб відчути, скільки часу займає, і отримати потрібну загальну площу, а потім до 1000, а іноді і 10 000 або 100 000 для кінцеві значення, які я буду використовувати). Частка разів, коли ви відхилили нульову гіпотезу, - це сила.Ось простий приклад із порядковою регресією:
library(rms)
tmpfun <- function(n, beta0, beta1, beta2) {
x <- runif(n, 0, 10)
eta1 <- beta0 + beta1*x
eta2 <- eta1 + beta2
p1 <- exp(eta1)/(1+exp(eta1))
p2 <- exp(eta2)/(1+exp(eta2))
tmp <- runif(n)
y <- (tmp < p1) + (tmp < p2)
fit <- lrm(y~x)
fit$stats[5]
}
out <- replicate(1000, tmpfun(100, -1/2, 1/4, 1/4))
mean( out < 0.05 )
eta1 <- beta0 + beta1*x1 + beta2*x2 + beta3*x3
.
replicate
не знаходиться у функції та не змінюється. Функція повертає p-значення (що відповідає fit $ stats [5]) за одну ітерацію, реплікація виконує функцію 1000 разів (або будь-яке число, яке ви вказали) та повертає 1000 p-значень, mean
тоді функція обчислює частку тести, які б відхилили нуль при .
Я відповів би ще одне на відповідь Сноу (і це стосується будь-якого аналізу потужності за допомогою симуляції) - зверніть увагу на те, чи шукаєте ви 1 або 2 хвіст тесту. Популярні програми, такі як G * Power за замовчуванням для односхилого тесту, і якщо ви намагаєтеся побачити, чи відповідають ваші імітації (завжди гарна ідея, коли ви навчитеся робити це), ви хочете перевірити це спочатку.
Для того, щоб Сніг запустив тест на 1 хвіст, я додав би параметр, який називається "хвіст", до функціональних входів і помістив щось подібне у саму функцію:
#two-tail test
if (tail==2) fit$stats[5]
#one-tail test
if (tail==1){
if (fit$coefficients[5]>0) {
fit$stats[5]/2
} else 1
Версія з 1 кінцем в основному перевіряє, чи є коефіцієнт позитивним, а потім скорочує р-значення навпіл.
Окрім відмінного прикладу Snow, я вважаю, що ви також можете зробити силове моделювання, перекомпонувавшись із наявного набору даних, що впливає. Не зовсім завантажувальна програма, оскільки ви не займаєтеся вибіркою-заміною тієї самої n , але тієї самої ідеї.
Ось ось приклад: я провів невеликий самоексперимент, який став позитивною оцінкою, але, оскільки його було мало, не був майже статистично значущим у порядковій логістичній регресії. З цією точковою оцінкою, наскільки мені знадобиться велика n ? Для різних можливих n я багато разів генерував набір даних і виконував порядкову логістичну регресію і бачив, наскільки мало значення p- значення:
library(boot)
library(rms)
npt <- read.csv("http://www.gwern.net/docs/nootropics/2013-gwern-noopept.csv")
newNoopeptPower <- function(dt, indices) {
d <- dt[sample(nrow(dt), n, replace=TRUE), ] # new dataset, possibly larger than the original
lmodel <- lrm(MP ~ Noopept + Magtein, data = d)
return(anova(lmodel)[7])
}
alpha <- 0.05
for (n in seq(from = 300, to = 600, by = 30)) {
bs <- boot(data=npt, statistic=newNoopeptPower, R=10000, parallel="multicore", ncpus=4)
print(c(n, sum(bs$t<=alpha)/length(bs$t)))
}
З виходом (для мене):
[1] 300.0000 0.1823
[1] 330.0000 0.1925
[1] 360.0000 0.2083
[1] 390.0000 0.2143
[1] 420.0000 0.2318
[1] 450.0000 0.2462
[1] 480.000 0.258
[1] 510.0000 0.2825
[1] 540.0000 0.2855
[1] 570.0000 0.3184
[1] 600.0000 0.3175
При цьому при n = 600 потужність становила 32%. Не дуже обнадійливо.
(Якщо мій симуляційний підхід невірний, будь ласка, хтось скаже мені. Я виходжу з декількох медичних робіт, де обговорюється силове моделювання для планування клінічних випробувань, але я зовсім не впевнений у своїй точній реалізації.)
Посилаючись на перше моделювання (запропоноване Snow; /stats//a/22410/231675 ):
Я все ще не впевнений, як має виглядати моделювання з більш (зокрема, трьома) незалежними змінними. Я розумію, що я повинен "включити їх усіх у елемент1, наприклад, ета1 <- бета0 + бета1 * х1 + бета2 * х2 + бета3 * х3" (як згадувалося вище). Але я не знаю, як відрегулювати решту параметрів у функції. Може хтось допоможе мені в цьому?