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

基于boot包downs.bc数据集的事件概率、OR与OD模型计算咨询

问题解答

一、现有计算方式的可行性

你用glm(cbind(r, m-r) ~ age, family = binomial, data = boot::downs.bc)拟合模型的做法完全正确——这种列联表形式(cbind(r, m-r))是处理分组二项数据的标准操作,模型输出的系数也没问题。但要注意:你计算出来的-6.43632和-5.06053是对数优势(log-odds),不是事件发生的概率,必须经过转换才能得到概率。

二、计算20岁、30岁人群的事件概率

有两种常用方法:

方法1:用predict函数直接预测

这是最简便且不易出错的方式,直接指定type = "response"就能得到概率:

# 先拟合模型(和你的代码一致)
mod1 <- glm(cbind(r, m-r) ~ age, family = binomial, data = boot::downs.bc)

# 构造包含目标年龄的新数据集
new_ages <- data.frame(age = c(20, 30))

# 预测概率
predicted_probs <- predict(mod1, newdata = new_ages, type = "response")
predicted_probs

方法2:手动转换对数优势

用sigmoid函数把你算出的log-odds转换成概率,公式为:概率 = exp(对数优势) / (1 + exp(对数优势))

# 20岁人群的概率
log_odds_20 <- -10.563690 + 20 * 0.137579
prob_20 <- exp(log_odds_20) / (1 + exp(log_odds_20))

# 30岁人群的概率
log_odds_30 <- -10.563690 + 30 * 0.137579
prob_30 <- exp(log_odds_30) / (1 + exp(log_odds_30))

prob_20
prob_30

两种方法得到的结果完全一致。

三、计算Odds Ratio(优势比)并构建模型

你提到的“OD模型”应该是指基于优势比的logistic回归模型——你已经拟合了正确的模型,下面是具体的OR计算方法:

1. 构建模型

你拟合的mod1就是标准的logistic回归模型,它的核心就是用优势比来量化自变量对事件发生概率的影响:模型中age的系数表示年龄每增加1岁,事件发生的对数优势的变化量。

2. 计算优势比

优势比是系数的指数形式,直接对模型系数取指数即可得到:

# 计算年龄的优势比
age_or <- exp(coef(mod1)[["age"]])
age_or

# 计算优势比的95%置信区间(更严谨的做法)
age_or_ci <- exp(confint(mod1)[["age"], ])
age_or_ci

这里得到的OR≈1.147,意思是:年龄每增加1岁,事件发生的优势(发生概率/不发生概率)是原来的1.147倍。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:20:50