Cosa fa la funzione:
in sostanza, la funzione genera nuovi dati di risposta pseudocasuali (cioè ) da un modello dei dati. Il modello in uso è un modello frequentist standard. Come è consuetudine, si presume che i dati * siano costanti note - non vengono campionati in alcun modo. Quello che vedo come la caratteristica importante di questa funzione è che sta incorporando l'incertezza sui parametri stimati. XYX
* Nota che devi aggiungere manualmente un vettore di come colonna più a sinistra della tua matrice prima di immetterlo nella funzione, a meno che tu non voglia sopprimere l'intercetta (che generalmente non è una buona idea).X1X
Qual era il punto di questa funzione:
non lo so onestamente. Avrebbe potuto far parte di una routine MCMC bayesiana, ma sarebbe stato solo un pezzo - avresti bisogno di altro codice altrove per eseguire effettivamente un'analisi bayesiana. Non mi sento sufficientemente esperto dei metodi bayesiani per commentare in modo definitivo su questo, ma la funzione non mi "sente" come quello che verrebbe normalmente usato.
Potrebbe anche essere stato utilizzato nelle analisi di potenza basate sulla simulazione. (Vedi la mia risposta qui: Simulazione dell'analisi della potenza della regressione logistica - esperimenti progettati , per informazioni su questo tipo di cose.) Vale la pena notare che le analisi della potenza basate su dati precedenti che non tengono conto dell'incertezza delle stime dei parametri sono spesso ottimista. (Discuto questo punto qui: dimensione dell'effetto desiderato vs. dimensione dell'effetto previsto .)
Se si desidera utilizzare questa funzione:
Come osserva @whuber nei commenti, questa funzione sarà inefficiente. Se si desidera utilizzarlo per eseguire (ad esempio) analisi di potenza, dividerei la funzione in due nuove funzioni. Il primo leggeva i tuoi dati e produceva i parametri e le incertezze. La seconda nuova funzione genererebbe i nuovi dati pseudocasuali . Di seguito è riportato un esempio (sebbene possa essere possibile migliorarlo ulteriormente): Y
simulationParameters <- function(Y,X) {
# Y is a vector of binary responses
# X is a design matrix, you don't have to add a vector of 1's
# for the intercept
X <- cbind(1, X) # this adds the intercept for you
fit <- glm.fit(X,Y, family = binomial(link = logit))
beta <- coef(fit)
fs <- summary.glm(fit)
M <- t(chol(fs$cov.unscaled))
return(list(betas=beta, uncertainties=M))
}
simulateY <- function(X, betas, uncertainties, ncolM, N){
# X <- cbind(1, X) # it will be slightly faster if you input w/ 1's
# ncolM <- ncol(uncertainties) # faster if you input this
betastar <- betas + uncertainties %*% rnorm(ncolM)
p <- 1/(1 + exp(-(X %*% betastar)))
return(rbinom(N, size=1, prob=p))
}