Після публікації від Стефана Коласса (я не можу додати це як коментар), у мене є альтернативний код для моделювання. Тут використовується однакова основна структура, але вибухає трохи більше, тому, можливо, її читати трохи простіше. Він також заснований на коді Клеймана та Хортона для імітації логістичної регресії.
nn - число у вибірці. Коваріат повинен бути постійно нормально розподілений і стандартизований на значення 0 і sd 1. Для цього генеруємо rnorm (nn). Ми вибираємо коефіцієнт шансів і зберігаємо його в коефіцієнті. Ми також підбираємо номер для перехоплення. Вибір цього числа визначає, яка частка вибірки переживає "подію" (наприклад, 0,1, 0,4, 0,5). Ви повинні пограти з цим числом, поки не отримаєте потрібну пропорцію. Наступний код дає пропорцію 0,1 з розміром вибірки 950 та АБО 1,5:
nn <- 950
runs <- 10000
intercept <- log(9)
odds.ratio <- 1.5
beta <- log(odds.ratio)
proportion <- replicate(
n = runs,
expr = {
xtest <- rnorm(nn)
linpred <- intercept + (xtest * beta)
prob <- exp(linpred)/(1 + exp(linpred))
runis <- runif(length(xtest),0,1)
ytest <- ifelse(runis < prob,1,0)
prop <- length(which(ytest <= 0.5))/length(ytest)
}
)
summary(proportion)
резюме (пропорція) підтверджує, що пропорція становить ~ 0,1
Потім, використовуючи ті самі змінні, потужність обчислюється протягом 10000 пробігів:
result <- replicate(
n = runs,
expr = {
xtest <- rnorm(nn)
linpred <- intercept + (xtest * beta)
prob <- exp(linpred)/(1 + exp(linpred))
runis <- runif(length(xtest),0,1)
ytest <- ifelse(runis < prob,1,0)
summary(model <- glm(ytest ~ xtest, family = "binomial"))$coefficients[2,4] < .05
}
)
print(sum(result)/runs)
Я вважаю, що цей код є правильним - я перевірив його на прикладах, наведених у Hsieh, 1998 (таблиця 2), і, схоже, згоден з трьома наведеними там прикладами. Я також протестував це на прикладі на p 342 - 343 Hosmer та Lemeshow, де він знайшов потужність 0,75 (порівняно з 0,8 у Hosmer та Lemeshow). Тож може статися, що в деяких обставинах цей підхід недооцінює владу. Однак, коли я запустив той самий приклад у цьому он-лайн калькуляторі , я виявив, що він узгоджується зі мною, а не з результатом у Hosmer та Lemeshow.
Якщо хтось може сказати нам, чому це так, мені було б цікаво знати.