In seguito al post di Stephan Kolassa (non posso aggiungerlo come commento), ho un codice alternativo per una simulazione. Questo utilizza la stessa struttura di base, ma viene esploso un po 'di più, quindi forse è un po' più facile da leggere. Si basa anche sul codice di Kleinman e Horton per simulare la regressione logistica.
nn è il numero nel campione. La covariata dovrebbe essere continuamente distribuita normalmente e standardizzata per significare 0 e sd 1. Usiamo rnorm (nn) per generare questo. Selezioniamo un odds ratio e lo memorizziamo in odds.ratio. Scegliamo anche un numero per l'intercettazione. La scelta di questo numero regola la percentuale dell'esperienza del campione "evento" (ad es. 0,1, 0,4, 0,5). Devi giocare con questo numero finché non ottieni la giusta proporzione. Il codice seguente fornisce una proporzione di 0,1 con una dimensione del campione di 950 e un OR di 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)
il sommario (proporzione) conferma che la proporzione è ~ 0,1
Quindi utilizzando le stesse variabili, la potenza viene calcolata su 10000 corse:
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)
Penso che questo codice sia corretto: l'ho verificato rispetto agli esempi forniti in Hsieh, 1998 (tabella 2), e sembra concordare con i tre esempi forniti. L'ho anche provato con l'esempio a p 342 - 343 di Hosmer e Lemeshow, dove ha trovato una potenza di 0,75 (rispetto allo 0,8 di Hosmer e Lemeshow). Quindi può darsi che in alcune circostanze questo approccio sottovaluti il potere. Tuttavia, quando ho eseguito lo stesso esempio in questo calcolatore online , ho scoperto che è d'accordo con me e non il risultato in Hosmer e Lemeshow.
Se qualcuno può dirci perché è così, sarei interessato a saperlo.