Siguiendo la publicación de Stephan Kolassa (no puedo agregar esto como comentario), tengo un código alternativo para una simulación. Utiliza la misma estructura básica, pero explota un poco más, por lo que quizás sea un poco más fácil de leer. También se basa en el código de Kleinman y Horton para simular la regresión logística.
nn es el número en la muestra. La covariable debe estar continuamente distribuida normalmente y estandarizada para significar 0 y sd 1. Utilizamos rnorm (nn) para generar esto. Seleccionamos un odds ratio y lo almacenamos en odds.ratio. También elegimos un número para la intercepción. La elección de este número rige qué proporción de la muestra experimenta el "evento" (por ejemplo, 0.1, 0.4, 0.5). Tienes que jugar con este número hasta que obtengas la proporción correcta. El siguiente código le proporciona una proporción de 0.1 con un tamaño de muestra de 950 y un OR de 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)
el resumen (proporción) confirma que la proporción es ~ 0.1
Luego, usando las mismas variables, la potencia se calcula sobre 10000 carreras:
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)
Creo que este código es correcto: lo comparé con los ejemplos dados en Hsieh, 1998 (tabla 2), y parece estar de acuerdo con los tres ejemplos dados allí. También lo probé con el ejemplo de las páginas 342 a 343 de Hosmer y Lemeshow, donde encontró una potencia de 0,75 (en comparación con 0,8 en Hosmer y Lemeshow). Por lo tanto, puede ser que, en algunas circunstancias, este enfoque subestime el poder. Sin embargo, cuando ejecuté el mismo ejemplo en esta calculadora en línea , descubrí que está de acuerdo conmigo y no con el resultado en Hosmer y Lemeshow.
Si alguien puede decirnos por qué este es el caso, me interesaría saberlo.