该函数的作用:
本质上,该函数从您的数据模型生成新的伪随机响应(即)数据。使用的模型是标准的常客模型。按照惯例,假设您的 * 数据是已知常量——它们不会以任何方式采样。我认为这个函数的重要特征是它包含了估计参数的不确定性。 YX
*请注意,在将其输入函数之前,您必须手动添加矩阵的最左列,除非您想抑制截距(这通常不是一个好主意)。1X
这个函数的意义是什么:
我真的不知道。它可能是贝叶斯 MCMC 例程的一部分,但它只是一个片段——您将需要更多的其他代码来实际运行贝叶斯分析。我觉得贝叶斯方法的专家不足以对此做出明确评论,但该功能对我来说并不像通常使用的那样“感觉”。
它也可以用于基于仿真的功率分析。(请参阅我的答案:Logistic回归功率分析设计实验的模拟,以获取有关此类事物的信息。)值得注意的是,基于先前数据的功率分析通常不考虑参数估计的不确定性乐观的。(我在这里讨论这一点:期望效果大小与预期效果大小。)
如果您想使用此功能:
正如@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))
}