Що функція робить:
По суті, функція генерує нові дані псевдовипадкової відповіді (тобто ) з моделі ваших даних. Використовувана модель - це стандартна модель частотизму. Як це прийнято, передбачається, що ваші дані * є відомими константами - вони ні в якому разі не відбираються. Я вважаю важливою особливістю цієї функції те, що вона містить непевність щодо оцінених параметрів. YX
* Зауважте, що вам потрібно вручну додати вектор до лівого стовпця вашої матриці перш ніж вводити його у функцію, якщо ви не хочете придушити перехоплення (що, як правило, не є хорошою ідеєю).1X
У чому полягала ця функція:
я чесно не знаю. Це могло бути частиною байєсівської програми MCMC, але це було б лише одне ціле - вам потрібно більше коду в іншому місці, щоб фактично провести байєсівський аналіз. Я не відчуваю достатнього досвіду байєсівських методів, щоб остаточно прокоментувати це, але ця функція не відчуває мене, як те, що зазвичай використовується.
Він також міг бути використаний при силових аналізах потужності. (Дивіться мою відповідь тут: Моделювання аналізу потужності логістичної регресії - розроблені експерименти для отримання інформації про цей тип речі.) Варто зазначити, що аналіз потужності на основі попередніх даних, які не враховують невизначеність оцінок параметрів, часто враховуються оптимістичний. (Я обговорюю цей момент тут: бажаний розмір ефекту проти очікуваного розміру ефекту .)
Якщо ви хочете скористатися цією функцією:
Як зазначає @whuber у коментарях, ця функція буде неефективною. Якщо ви хочете використовувати це для (наприклад) аналізу потужності, я розділив би цю функцію на дві нові функції. Перший буде читати у ваших даних і виводити параметри та невизначеності. Друга нова функція створила б нові псевдовипадкові даніНаведений нижче приклад (хоча це можливо вдосконалити далі): 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))
}