使用
svyglm()$aic
与使用 stats::AIC(model)
时,我得到不同的 AIC 值。据我所知,这个话题之前已经在here讨论过。然而,没有对差异进行详细解释——“只是”建议使用一种方法而不是另一种方法。我怀疑这与this有关,但不幸的是我的统计数据还不够强大,无法完全理解并得出结论。
如果有人能帮助我,告诉我哪种方法是正确的(如果有的话)以及原因,我将不胜感激。如下例所示,这两种方法可能会产生截然不同的结果,甚至改变对哪个模型似乎更适合的解释。
最小示例:
library(survey)
df <- data.frame(
y = c(1.2, 2.4, 3.1, 4.5, 5.6, 6.3, 8.6),
a = c(0.5, 1.3, 1.7, 2.2, 3.1, 3.8, 4.0),
b = c(2.1, 2.7, 3.3, 3.8, 4.2, 4.5, 5.1),
weights = c(0.7, 1.4, 0.9, 1.1, 1.0, 0.8, 1.2)
)
weighted <- svydesign(ids = ~1, data = df, weights = ~weights)
A <- svyglm(y ~ a + b, design = weighted, family = "gaussian")
B <- svyglm(y ~ a, design = weighted, family = "gaussian")
AIC(A,B)[,2]
[1] 19.29119 17.03959
> c(A$aic,B$aic)
[1] 15.06302 17.45406
我正在使用 R 4.4.1 和调查 4.4-2
简短的答案是,您应该始终*使用访问器方法,例如
AIC
,而不是使用$
或(尤其是)@
从对象中提取元素。无法保证标记为 $aic
的元素实际上是 AIC 值,或者定义在包版本之间保持稳定。 假设包作者知道他们在做什么,并在他们提供的方法中提供了 AIC(或其他)的最佳版本。
?AIC.svyglm
的帮助页面显示:
“AIC”是使用 Rao-Scott 近似加权来定义的 对数似然(Lumley 和 Scott,2015)。它取代了通常的 惩罚项 p,是对数的零期望 似然比,通过广义设计效应的轨迹 矩阵,即复杂采样下的期望。为了 计算原因一切都按比例缩放,因此权重总和为 样本大小。
如果你想深入了解
AIC()
在这种情况下到底做了什么,你最终会得到 survey:::extractAIC_svylm
的代码。
要准确理解
$aic
插槽包含的内容,您必须深入研究 survey
包代码(或询问维护者),但您 不必知道这个数量代表什么,因为它是拟合模型对象的内部组件。
* 很高兴在评论部分听到反例。