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

R语言oddsratio包报错:重复列下标,求or_gam函数解决方法

解决R中oddsratio包计算优势比的报错问题

咱们来拆解你遇到的duplicate subscripts for columns错误,核心是代码里的两个关键问题导致的:

问题1:模型公式写法错误

你当前定义model_1时直接用newdata$提取列拼接,这不是R中模型公式的正确写法,会让后续函数识别变量时出现混乱。正确的公式只需写变量名,不用加数据框前缀——后续通过data参数关联数据框即可。

问题2:pred参数传值错误

or_gam()的pred参数需要传入你要计算优势比的自变量名称(字符向量),而不是因变量INJG11A。你传入newdata$INJG11A相当于把整个因变量列塞进去,函数会尝试重复处理列,直接触发下标重复的错误。


修正后的完整代码步骤

1. 先拟合GAM模型(or_gam()专为GAM模型设计)

首先用mgcv包的gam()函数拟合二分类逻辑回归类型的GAM模型(默认假设INJG11A是二分类因变量):

# 加载所需包
library(mgcv)
library(oddsratio)

# 拟合正确的GAM模型
model_1 <- gam(INJG11A ~ DHHGAGE + ADL_01, 
               data = newdata, 
               family = binomial()) # 二分类因变量指定binomial族

2. 计算目标变量的优势比

用or_gam()传入拟合好的模型,以及要计算OR的自变量名称:

# 计算DHHGAGE和ADL_01的优势比
or_results <- or_gam(model = model_1, 
                     pred = c("DHHGAGE", "ADL_01"), 
                     data = newdata)

# 查看结果
print(or_results)

额外补充:普通逻辑回归的OR计算

如果只是需要普通逻辑回归的优势比,也可以用glm()拟合后直接计算,更简单:

# 拟合普通逻辑回归
glm_model <- glm(INJG11A ~ DHHGAGE + ADL_01, data = newdata, family = binomial())
# 计算OR及置信区间
exp(cbind(OR = coef(glm_model), confint(glm_model)))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:36:24