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
相关产品推荐
相关产品推荐

