逻辑回归模型操作

机器算法验证 r 物流 贝叶斯 广义线性模型
2022-03-06 09:50:54

我想了解以下代码在做什么。编写代码的人不再在这里工作,而且几乎完全没有文档记录。有人要求我进行调查,他认为“这是一个贝叶斯逻辑回归模型

bglm <- function(Y,X) {
    # Y is a vector of binary responses
    # X is a design matrix

    fit <- glm.fit(X,Y, family = binomial(link = logit))
    beta <- coef(fit)
    fs <- summary.glm(fit)
    M <- t(chol(fs$cov.unscaled))
    betastar <- beta + M %*% rnorm(ncol(M))
    p <- 1/(1 + exp(-(X %*% betastar)))
    return(runif(length(p)) <= p)
}

我可以看到它适合逻辑模型,对估计的协方差矩阵进行 Cholseky 因子分解的转置,将其后乘以来自的抽取向量,然后添加到模型估计中。然后将其与设计矩阵进行预乘,取其逆对数,与来自的绘制向量进行比较,并返回结果二进制向量。但是这一切在统计上意味着什么呢?N(0,1)U(0,1)

1个回答

该函数的作用:
本质上,该函数从您的数据模型生成新的伪随机响应(即)数据。使用的模型是标准的常客模型。按照惯例,假设您的 * 数据是已知常量——它们不会以任何方式采样。我认为这个函数的重要特征是它包含了估计参数的不确定性。 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))
}