如何在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中连续变量对比的通用方法
针对连续变量的对比场景,常用两种操作:
- 特定取值点的差异:如本例,用
at参数指定连续变量的多个目标取值,再对这些取值的边际均值做两两对比或自定义对比。 - 趋势/斜率对比:若需分析连续变量的变化趋势(比如不同性别组的年龄斜率差异),可使用
emtrends()函数,通过var=age指定目标连续变量,获取各组的斜率后再做对比。
内容的提问来源于stack exchange,提问作者julieth
相关产品推荐
相关产品推荐

