R语言gamlss包如何指定与lmer效果一致的随机效应?
问题原因及解决方法
差异与报错的核心原因
- 你之前调用的
random()是gamlss原生随机效应函数,采用惩罚似然估计,和lmer默认的REML(限制性最大似然)计算逻辑不同,因此同分布下结果也会存在差异 re()函数不属于gamlss原生函数,来自gamlss.add扩展包,未加载包、拆分随机效应为多个re()项都会触发变量长度不匹配报错
正确配置步骤
- 先安装加载对应依赖包
install.packages("gamlss.add") library(gamlss) library(gamlss.add)
- 调整模型写法,将所有随机效应放在同一个
re()项中,同时指定估计方法为REML和lmer对齐
df <- na.omit(df) df$ISO3 <- as.factor(df$ISO3) df$Year <- as.factor(df$Year) fourC <- gamlss( # 公式部分:所有随机效应放在同一个re()的random参数中 formula = Forest_loss_annual_perc_boxcox ~ fourC_area_perc + Pop_Dens_km2 + Pop_Growth_perc + GDP_Capita_current_USD + GDP_Capita_growth_perc + GDP_AgrForFis_percGDP + Gini_2008_2018 + Arable_land_perc + Forest_extent_2000_perc + re(random = ~1|ISO3 + 1|Year), data = df, family = NO, # 估计方法和lmer默认的REML对齐 method = REML, control = gamlss.control(n.cyc = 200) )
上述写法底层调用lme4的计算逻辑,高斯分布下输出的固定效应系数、随机效应方差分量都会和lmer结果基本一致。
内容的提问来源于stack exchange,提问作者saskiadroege
相关产品推荐
相关产品推荐

