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

在R中针对连续预测变量范围绘制比值比(含样条项)的方法

在R中简便绘制连续变量(含样条项)的比值比(OR)曲线

核心思路

比值比(OR)的本质是当前取值下的优势(odds)与参考点优势的比值,公式为:
OR(x) = odds(x) / odds(x_ref) = exp(logodds(x) - logodds(x_ref))
不需要循环计算,直接利用预测的对数优势比(logodds)做差值再指数化即可,这是最简便的实现方式。


1. 普通Logistic回归的OR绘制

基于你提供的代码,直接扩展OR的计算与可视化:

library(tidyverse)
library(splines)

# 加载数据
dat <- read.csv("https://stats.idre.ucla.edu/stat/data/binary.csv")

# 普通logistic模型
mod <- glm(admit ~ gre, data = dat, family = "binomial")

# 创建预测数据集
newdat <- data.frame(gre = seq(0, 800, 1))

# 预测logodds及标准误(保留SE用于绘制置信区间)
pred <- predict(mod, newdata = newdat, type = "link", se.fit = TRUE)
newdat <- newdat %>%
  mutate(
    logodds = pred$fit,
    se = pred$se.fit,
    # 选取gre=500作为参考点(也可替换为均值mean(dat$gre)等有意义的取值)
    ref_logodds = predict(mod, newdata = data.frame(gre=500), type="link"),
    # 计算OR及95%置信区间
    or = exp(logodds - ref_logodds),
    or_lower = exp((logodds - ref_logodds) - 1.96*se),
    or_upper = exp((logodds - ref_logodds) + 1.96*se)
  )

# 绘制OR曲线(带置信区间)
ggplot(newdat, aes(x = gre, y = or)) +
  geom_line(size=1) +
  geom_ribbon(aes(ymin=or_lower, ymax=or_upper), alpha=0.2) +
  geom_hline(yintercept=1, linetype="dashed", color="red") +
  labs(x="GRE分数", y="比值比(OR,参考gre=500)", title="普通Logistic回归的OR曲线") +
  theme_bw()

普通模型中OR为水平线,符合预期——因为gre是线性项,OR随gre的变化幅度固定。


2. 含样条项模型的OR绘制

样条模型的处理逻辑完全一致,仅需替换模型即可:

# 5节点自然样条模型
mod_spline <- glm(admit ~ ns(gre,5), data = dat, family = "binomial")

# 预测并计算OR
pred_spline <- predict(mod_spline, newdata = newdat, type = "link", se.fit = TRUE)
newdat_spline <- newdat %>%
  select(gre) %>%
  mutate(
    logodds = pred_spline$fit,
    se = pred_spline$se.fit,
    ref_logodds = predict(mod_spline, newdata = data.frame(gre=500), type="link"),
    or = exp(logodds - ref_logodds),
    or_lower = exp((logodds - ref_logodds) - 1.96*se),
    or_upper = exp((logodds - ref_logodds) + 1.96*se)
  )

# 绘制样条模型的OR曲线
ggplot(newdat_spline, aes(x = gre, y = or)) +
  geom_line(size=1, color="blue") +
  geom_ribbon(aes(ymin=or_lower, ymax=or_upper), alpha=0.2, fill="blue") +
  geom_hline(yintercept=1, linetype="dashed", color="red") +
  labs(x="GRE分数", y="比值比(OR,参考gre=500)", title="样条模型的OR曲线") +
  theme_bw()

这里OR曲线会随gre取值波动,清晰展示样条拟合后OR的非线性变化趋势。


关键说明

  • 参考点可根据业务需求选择:比如变量的均值、中位数,或具有实际意义的阈值(如考试及格线)。
  • 1.96对应95%置信水平,若需其他置信水平,可替换为对应正态分布分位数。
  • 该方法采用向量运算,完全避免循环,计算效率远高于循环迭代。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 18:41:08