R中使用lme构建双随机效应混合模型及方差分量标准误求解问题
lme函数拟合双交叉随机效应的正确设置方法
核心问题原因
nlme的lme默认仅支持嵌套随机效应结构,你之前写的random = ~ 1 |id + 1|age不会被识别为两个独立交叉随机效应,嵌套写法id/age更是强制假设age嵌套于id之下,因此得到的方差估计和lmer的交叉随机模型不匹配甚至顺序互换。
双交叉随机效应的正确写法
要拟合和lmer(alcuse ~ 1 + peer + (1|id) + (1|age))完全等价的双随机截距交叉效应模型,使用pdIdent结构明确声明两个独立的分组水平即可,代码如下:
model2.lme.correct <- lme( fixed = alcuse ~ 1 + peer, data = alcohol1, # 声明两个独立的随机截距分组:id和age,二者为交叉关系 random = list( id = pdIdent(~ 1), age = pdIdent(~ 1) ), method = "REML" )
运行后调用nlme::VarCorr(model2.lme.correct)输出的方差分量结果将和lmer的model2结果完全一致,不会出现方差顺序互换的问题。
ρ指标标准误计算方法
你需要的家庭方差占比ρ的标准误可以通过delta方法实现,借助lmeInfo包提取方差分量的方差-协方差矩阵,再用msm包的deltamethod函数计算即可,示例代码如下:
# 提取方差分量估计值 vc_df <- as.data.frame(nlme::VarCorr(model2.lme.correct)) # 对应你的研究场景替换分组名即可,示例中假设var_age为家庭共享方差σ²_γ,var_id为个体异质性方差σ²_α var_alpha <- vc_df[vc_df$grp == "id", "vcov"] var_gamma <- vc_df[vc_df$grp == "age", "vcov"] # 提取方差分量的方差-协方差矩阵 vcov_vc <- lmeInfo::vcov_varCorr(model2.lme.correct) # delta方法计算ρ的标准误 rho_se <- msm::deltamethod( ~ x2 / (x1 + x2), mean = c(var_alpha, var_gamma), cov = vcov_vc[1:2, 1:2] )
内容的提问来源于stack exchange,提问作者Daniel2805
相关产品推荐
相关产品推荐

