AIC的意外行为.svyglm函数(R调查包版本4.1-1)



我有一个搜索算法,它使用R调查包函数AIC.svyglm对线性回归模型。我将软件包更新到4.1-1版本,新功能出现了一些问题。

我注意到在帮助页,在新版本中,"高斯链接模型的extractAIC使用基于方差参数和回归参数的极大似然估计的实际AIC;而它使用的是Rao-Scott近似,所以我不期望得到相同的结果。然而,我注意到一个意想不到的行为。

下面是一个简单的例子:

library(survey)
data(api)
# Define a simple design, for illustration
dclus2<-svydesign(id=~0, weights=~pw, data=apiclus2)
# 3 models (note: Gaussian family)
model0<-svyglm(I(sch.wide=="Yes")~ell+meals+mobility, 
design=dclus2, family=gaussian())
model1<-update(model0, formula = .~.+as.numeric(stype), 
design=dclus2, family=gaussian())
model2<-update(model0, formula = .~.+stype, 
design=dclus2, family=gaussian())
# 'Equivalent' lm
model0lm<-lm(I(sch.wide=="Yes")~ell+meals+mobility, data=apiclus2, weights=pw)
model1lm<-update(model0lm, formula = .~.+as.numeric(stype))
model2lm<-update(model0lm, formula = .~.+stype)
summary(model1)
summary(model1lm)
#AIC on svyglm
AIC(model0,model1, model2)
#AIC on lm
AIC(model0lm,model1lm, model2lm)

对于svyglm,结果如下:

eff.p      AIC deltabar
[1,]  8.686176 803.6719 2.171544
[2,] 14.317939 811.0289 2.863588
[3,] 30.163107 746.8759 5.027185

,而我们确实期望模型1的AIC低于模型0的AIC。对于statslm

df      AIC
model0lm  5 198.6607
model1lm  6 166.9859
model2lm  7 131.5015

我错过什么了吗?

我使用R版本4.1.0和survey版本4.1-1

我建议直接从svyglm模型中读取AIC值,就像这样:

c(model0$aic, model1$aic, model2$aic)
#[1] 198.6607 166.9859 131.5015

注意,通过这种方式,您将获得与应用于lm模型的AIC函数完全相同的值。

AIC(model0lm,model1lm, model2lm)
#          df      AIC
# model0lm  5 198.6607
# model1lm  6 166.9859
# model2lm  7 131.5015

我意识到这并没有回答为什么这与AIC(model0, model1, model2)的结果不同的问题。然而,也许这将是解决你问题的办法。

相关内容

  • 没有找到相关文章

最新更新