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

如何在rms包lrm模型的bplot中显示比值比而非对数优势比

把rms包3D交互图的Y轴从Log-Odds转为Odds Ratio(OR)

我之前在做类似的rms包交互项可视化时,也遇到过要把log-odds转成OR的需求,给你两个实用的解决方案,直接套到你的代码里就行:

方法1:先转换Predict结果再绘图

这个方法最直接,先把Predict输出的log-odds计算为OR,再传递给bplot:

# 第一步:生成预测对象并转换log-odds为OR
pred_results <- Predict(model, cont.var1=seq(5,110), cont.var2, np=50, ref.zero=TRUE)
pred_results$yhat <- exp(pred_results$yhat) # 核心转换步骤

# 第二步:绘制3D曲面,修改Y轴标签和刻度
bplot(pred_results, 
      lfun=wireframe, 
      adj.subtitle=FALSE, 
      drape=TRUE,
      ylab="Odds Ratio (OR)", # 明确标注Y轴含义
      scales=list(
        y=list(
          at=c(0.25, 0.5, 1, 2, 4), # 选择读者易理解的OR刻度
          labels=c("0.25", "0.5", "1", "2", "4")
        )
      )
)

这里因为你用了ref.zero=TRUE,所以原始的yhat是相对于参考点的log-odds,取指数后得到的就是相对于参考点的OR,参考点的OR为1,读者能直观判断变量变化带来的效应方向(OR>1是正效应,<1是负效应)。

方法2:仅修改坐标轴显示(保留原始log-odds数据)

如果不想改动预测数据,可以直接在绘图时替换Y轴的刻度和标签,让底层数据还是log-odds,但显示出来的是OR:

bplot(Predict(model, cont.var1=seq(5,110), cont.var2, np=50, ref.zero=TRUE), 
      lfun=wireframe, 
      adj.subtitle=FALSE, 
      drape=TRUE,
      ylab="Odds Ratio (OR)",
      scales=list(
        y=list(
          at=log(c(0.25, 0.5, 1, 2, 4)), # 对应OR的log值(即原始log-odds刻度)
          labels=c("0.25", "0.5", "1", "2", "4") # 显示OR标签
        )
      )
)

这个方法的优势是保留了原始的log-odds数据,后续如果需要调整分析的话不用重新计算,适合需要同时保留两种尺度的场景。

小提示

  • 选择OR刻度时,优先用0.25、0.5、1、2、4这类有直观含义的数值,避免用连续的小数刻度,降低读者理解成本;
  • 如果用了drape=TRUE,颜色映射是基于原始log-odds的,不过因为OR和log-odds的趋势完全一致,所以颜色依然能准确反映效应大小,不需要额外调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:55:29