函数的作用:
本质上,函数从您的数据模型生成新的伪随机响应(即)数据。使用的模型是标准的常客模型。按照惯例,假设您的 *数据是已知常数,则不会以任何方式对其进行采样。我认为此功能的重要特征是它并入了有关估计参数的不确定性。 ÿX
* 请注意,除非要抑制截距(通常不是一个好主意),否则在将输入到函数之前,必须手动添加一个向量作为矩阵的最左列。1个X
此功能的目的是什么:
我不诚实地知道。它可能是贝叶斯MCMC例程的一部分,但它只是其中一部分-您将需要在其他地方放置更多代码才能实际运行贝叶斯分析。对于贝叶斯方法,我没有足够的专家来对此做出明确的评论,但是该函数对我的感觉并不像通常使用的那样。
它也可能已用于基于仿真的功率分析中。(有关此问题的信息,请参见此处的答案:逻辑回归功效分析的模拟-设计的实验,以获取有关此类事物的信息。)值得注意的是,基于先验数据的功效分析通常没有考虑参数估计的不确定性。乐观的 (我在这里讨论这一点:所需效果大小与预期效果大小。)
如果要使用此功能:
如@whuber注释中所述,此功能将无效。如果要使用它进行(例如)功耗分析,我会将函数拆分为两个新函数。第一个将读取您的数据并输出参数和不确定性。第二个新函数将生成新的伪随机数据。以下是一个示例(尽管有可能进一步改进): ÿ
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))
}