Seguindo o post de Stephan Kolassa (não posso adicionar isso como comentário), tenho um código alternativo para uma simulação. Isso usa a mesma estrutura básica, mas é expandida um pouco mais, então talvez seja um pouco mais fácil de ler. Também é baseado no código de Kleinman e Horton para simular a regressão logística.
nn é o número na amostra. A covariável deve ser continuamente distribuída normalmente e padronizada para significar 0 e sd 1. Usamos rnorm (nn) para gerar isso. Selecionamos um odds ratio e o armazenamos em odds.ratio. Também escolhemos um número para a interceptação. A escolha desse número controla qual proporção da amostra experimenta o "evento" (por exemplo, 0,1, 0,4, 0,5). Você tem que brincar com esse número até obter a proporção certa. O código a seguir fornece uma proporção de 0,1 com um tamanho de amostra de 950 e um 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)
O resumo (proporção) confirma que a proporção é ~ 0,1
Em seguida, usando as mesmas variáveis, a potência é calculada em 10.000 execuções:
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)
Eu acho que esse código está correto - eu comparei com os exemplos dados em Hsieh, 1998 (tabela 2), e parece concordar com os três exemplos dados lá. Eu também o testei contra o exemplo nas páginas 342 - 343 de Hosmer e Lemeshow, onde encontrou uma potência de 0,75 (em comparação com 0,8 em Hosmer e Lemeshow). Portanto, em algumas circunstâncias, essa abordagem subestima o poder. No entanto, quando executei o mesmo exemplo nesta calculadora on-line , descobri que ela concorda comigo e não com o resultado em Hosmer e Lemeshow.
Se alguém puder nos dizer por que esse é o caso, eu estaria interessado em saber.