You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在emmeans中计算连续变量对比?重现rms包lrm的对比操作

用emmeans重现rms包lrm的连续变量对比分析

完整实现代码

在原代码基础上加入emmeans的操作,即可完成需求:

# 加载所需包
library("rms")
library("emmeans")
set.seed(1)

# 生成数据
age <- rnorm(200,40,12)
sex <- factor(sample(c('female','male'),200,TRUE))
logit <- (sex=='male') + (age-40)/5
y <- ifelse(runif(200) <= plogis(logit), 1, 0)
myData <- data.frame(y=y,sex=sex,age=age)

# 拟合lrm模型
dd <- datadist(myData)
options(datadist="dd")
f <- lrm(y ~ age*sex,data=myData)

# --- 用emmeans实现对比 ---
# 1. 获取女性在指定年龄的logit尺度边际均值(对应log odds)
emm_female <- emmeans(f, ~ age | sex, 
                      at = list(sex = "female", 
                                age = c(32.634, 47.356)))

# 2. 计算两个年龄的log odds差异
emm_contrast <- contrast(emm_female, method = "pairwise")

# 输出结果(含exp转换为优势比)
print(emm_contrast, fun = exp)

关键步骤说明

  • 锁定分组与指定连续变量取值:通过emmeans()的at参数,固定sex="female",同时传入需要对比的两个年龄值,得到这两个点对应的log odds边际均值。
  • 执行差值计算:contrast()的method="pairwise"会直接计算两个均值的差值,结果和rms包contrast()的输出完全一致。
  • 转换为优势比:添加fun=exp参数,将log odds差异转换为优势比,和原代码print(k,fun=exp)的输出效果相同。

emmeans中连续变量对比的通用方法

针对连续变量的对比场景,常用两种操作:

  1. 特定取值点的差异:如本例,用at参数指定连续变量的多个目标取值,再对这些取值的边际均值做两两对比或自定义对比。
  2. 趋势/斜率对比:若需分析连续变量的变化趋势(比如不同性别组的年龄斜率差异),可使用emtrends()函数,通过var=age指定目标连续变量,获取各组的斜率后再做对比。

内容的提问来源于stack exchange,提问作者julieth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 01:13:16