R中对数转换线性混合模型:特定频率下估计值的SD与95%CI计算
问题场景
在R环境中采用线性混合模型,计算选定频率(连续型协变量)下4个类别位置对应的速度估计值,已编写的初始分析代码如下:
lmer.df = lmer(log(velocity) ~ location + frequency + (1 | heart), data = df) emm = emmeans(lmer.df, specs = ~ location, type = "response") summary(emm, infer = TRUE) # 输出平均频率下反向转换的估计边际均值 summary(contrast(emm, method = "revpairwise", infer = TRUE)) # 输出平均频率下反向转换的两两比较结果,含SE与95%CI
运行上述代码时,emmeans()默认仅输出协变量frequency取样本均值时速度估计值的标准误(SE)与95%置信区间(95%CI),需要实现特定频率取值(例如frequency = 90)下对应估计值的标准差(或置信区间)计算,输出与平均频率场景格式一致的结果表格。
实现方法
emmeans对模型中的连续协变量默认取样本均值作为固定值计算边际均值,只需通过at参数覆盖该默认设定,指定协变量的目标取值即可,无需重新拟合模型,输出格式与原有逻辑完全一致:
- 第一步:指定协变量取值计算估计边际均值
调用emmeans()时传入at参数,以列表形式明确给出frequency的目标取值,保留type = "response"参数自动完成对数转换的反向变换,直接得到原始速度尺度的估计结果:
若需要同时计算多个频率下的结果,直接在列表中传入取值向量即可,例如# 计算frequency = 90时各位置对应的估计边际均值 emm_freq90 = emmeans(lmer.df, specs = ~ location, at = list(frequency = 90), # *核心参数*:指定连续协变量的固定取值 type = "response")at = list(frequency = c(60, 90, 120)),输出会自动按频率值分组展示。 - 第二步:输出指定频率下的估计值结果表
沿用原有summary()逻辑,即可得到与平均频率场景格式完全一致的结果,包含估计值、SE、95%CI、假设检验统计量:summary(emm_freq90, infer = TRUE) - 第三步:输出指定频率下的位置两两比较结果
同样沿用原有对比计算逻辑,即可得到该频率下位置间两两比较的反向变换结果、SE与95%CI:summary(contrast(emm_freq90, method = "revpairwise", infer = TRUE))
内容的提问来源于stack exchange,提问作者Theresa
相关产品推荐
相关产品推荐

