R语言分段线性混合效应模型的lsmeans正确获取方法
问题结论与解释
两种结果差异的原因
你拟合的是分段线性混合效应模型,time1和time2是互斥生效的分段变量,二者的取值有严格的对应逻辑,不存在任意组合的可能:
- 时间点<0(冥想前):time2固定为0,仅time1随时间变化
- 时间点=0(冥想启动周):time1和time2均为0
- 时间点>0(冥想后):time1固定为0,仅time2随时间变化
你仅指定time1计算lsmeans时,输出明确标注了Results are averaged over the levels of: time2,也就是lsmeans默认将未指定的time2取所有观测值的平均,相当于强制把不符合逻辑的time1=-1同时time2=1这类不存在的组合纳入平均,得到的结果自然不符合你的实际需求。
正确的计算方法
你需要同时指定两个分段变量,且仅传入符合实际观测逻辑的取值组合,不要加入不存在的time1/time2配对:
# 三个时间点对应的正确分段变量取值 lsmeans(pwmodel, ~ time1 + time2, at = list( time1 = c(-1, 0, 0), time2 = c(0, 0, 1) ))
输出的三个结果分别对应时间点-1、0、1的边际均值。如果需要更直观的展示,可以给三个组合加上时间标签:
# 用emmeans包实现的版本也同理 library(emmeans) emmeans(pwmodel, ~ time_point, at = list( time1 = c(-1, 0, 0), time2 = c(0, 0, 1), time_point = c("-1周", "0周", "1周") ))
补充说明
你示例代码中time2的注释有误,误写为“Time (weeks) before introduction of routine”,实际应为冥想后的时间,注意不要影响后续变量定义。
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

