“Bayesglm”、p 值和自由度?

机器算法验证 回归 物流 贝叶斯 广义线性模型
2022-03-31 21:25:54

我正在尝试执行一些逻辑回归(我是 R 的新手用户)。最初我使用“glm”来计算系数、AIC 和 p 值;在我遇到一个完全分离的数据集之前,这很有效。在 [1] 中,Gelman 等人建议在解决这个问题之前使用(信息丰富的);相应的算法在 R 中实现为“bayesglm”(在 ARM 包中)。

这是我的问题。以前,使用“glm”,我将计算 p 值如下:

mylogit <- bayesglm(a ~ b+c+d+e+f+g+h, data = mydata, family="binomial")
with(mylogit, pchisq(null.deviance - deviance, df.null - df.residual, lower.tail = FALSE))

有53-48=5个自由度:

Null deviance: 71.188  on 53  degrees of freedom
Residual deviance: 37.862  on 48  degrees of freedom

但是,如果我使用“bayesglm”而不是“glm”,那么得到的自由度对我来说有点令人惊讶:

Null deviance: 22.279  on 53  degrees of freedom
Residual deviance: 39.030  on 54  degrees of freedom

如果我将前面的公式插入 p 值,我有 -1 的自由度!有人可以帮我得到一个更明智的答案(或帮我解释这个)吗?

顺便说一句,“bayesglm”命令的文档包括以下不祥的评论:

我们包含了所有 glm() 参数,但我们还没有测试所有选项(例如,null 模型的 offests、对比、偏差)是否都有效。

[1] 格尔曼、安德鲁等人。“逻辑和其他回归模型的信息量较弱的默认先验分布。” 应用统计年鉴(2008 年):1360-1383。

1个回答

我不确定你是如何为glm基于 - 的模型获得 5 个自由度和 7 个自变量的,但我会假设这只是某个地方的错字,或者我遗漏了一些小问题。

无论如何,使用受先验约束的模型计算自由度可能会很棘手,并且在许多情况下不一定有“正确”的方法来做到这一点。也许作者arm使用 -1 自由度来防止人们盲目地误解结果。

虽然我们不能轻易计算大多数正则化模型的自由度数,但我们至少可以给它设置一个上限:自由度数必须小于或等于对应的自由度-正则化模型。

因此(假设您在上面报告的 5 个自由度是正确的),您可以插入 5 并确信真正的 P 值不会大于您的卡方检验预测的值。因此,如果它以 5 个自由度显着,则真实值也将显着。

如果你想要更精确的东西,你可能想考虑使用 lasso 或 ridge 回归来进行正则化:统计学家投入了大量精力来计算这些模型的自由度,甚至为它们开发了一些显着性检验。Andrew Gelman 在他的博客上谈到了最近的一项进展

编辑添加:如果您坚持bayesglm但不相信空偏差估计,您可以通过运行除截距之外没有预测变量的模型自己找到它。其公式语法为a ~ 1.