带异方差cCAR(1)结构的随机截距LMM方差协方差矩阵获取
问题1 第二个模型参数指定是否符合需求
- 你当前指定的
corCAR1(form=~1|id)和varIdent(form=~1|week)两个结构本身符合你提到的「残差服从异方差连续一阶自相关」需求:corCAR1(form=~1|id)会按受试者id分组,基于实际测量的周次间隔计算连续一阶自相关,varIdent(form=~1|week)允许每个周次的残差方差独立估计,满足异方差要求。 - 需要注意核心差异:gls模型本身不包含任何随机效应项,如果你说的「仅含随机截距」是指需要单独估计受试者层面的随机截距方差,那当前的gls写法没有实现这个需求,你需要改用lme函数,添加
random = ~1|id的随机效应声明,相关结构和方差结构保留你当前的写法即可。如果你的「仅含随机截距」只是指代不需要随机斜率、所有个体层面变异都纳入残差协方差结构建模,那当前的参数指定是符合要求的。
问题2 如何获取gls模型的方差协方差矩阵
gls对象默认不支持getVarCov()函数,你可以通过相关矩阵和方差参数手动计算得到方差协方差矩阵,步骤如下:
- 提取模型的连续一阶自相关矩阵
- 提取各周次的残差方差权重与模型尺度参数
- 通过对角标准差矩阵与相关矩阵相乘得到最终的方差协方差矩阵
示例代码如下,假设你的gls模型命名为mod_gls:
# 提取单个受试者的相关矩阵(所有受试者的相关结构一致,取任意一个即可) car_cor <- corMatrix(mod_gls$modelStruct$corStruct)[[1]] # 提取各周次的方差权重(varIdent结构中每个周次对应唯一权重) week_var_weights <- unique(varWeights(mod_gls$modelStruct$varStruct)) # 提取模型残差尺度参数 sigma <- mod_gls$sigma # 计算各周次的实际残差标准差 week_sds <- sigma / week_var_weights # 构建对角标准差矩阵 sd_diag <- diag(week_sds) # 计算方差协方差矩阵 vcov_matrix <- sd_diag %*% car_cor %*% sd_diag
计算得到的vcov_matrix就是你指定结构的残差方差协方差矩阵,对角元素为各周次的残差方差,非对角元素为对应周次间的残差协方差。
内容的提问来源于stack exchange,提问作者tcvdb1992
相关产品推荐
相关产品推荐

