使用R包gamm4拟合GAMM后无法计算AIC的问题求助
解决gamm4模型的AIC计算问题
核心原因
gamm4()返回的是**gamm类的列表对象**,而非单一模型对象,直接对整个列表调用AIC()会因找不到对应方法报错。这个列表包含两个关键子对象:
$gam:标准gam类对象,对应模型的固定效应(含平滑项)部分$mer:lmerMod类对象,对应模型的随机效应部分
方法1:直接提取gam对象计算AIC
这是最简便的方式,gam类内置了logLik和AIC方法:
aic_model1 <- AIC(model_1$gam)
方法2:修正手动计算偏差的代码
你之前的代码出错是因为提取响应变量和拟合值的路径错误,正确路径是从$gam子对象中获取:
# 从gam对象提取二分类响应变量和拟合概率 y <- model_1$gam$y fitted_probs <- fitted(model_1$gam) # 计算二项分布的偏差(用log=TRUE更高效) deviance_model <- -2 * sum(dbinom(y, size = 1, prob = fitted_probs, log = TRUE))
方法3:计算随机效应部分的AIC
如果需要考虑随机效应的条件似然AIC,可以调用$mer子对象:
aic_conditional <- AIC(model_1$mer)
注意:$gam的AIC基于边际似然(积分掉随机效应),$mer的AIC基于条件似然(固定随机效应),可根据分析目标选择。
内容的提问来源于stack exchange,提问作者Greatwhite4
相关产品推荐
相关产品推荐

