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

R中加权逻辑回归实现疑问:基于成功比例、样本量与自变量

处理分组比例数据的逻辑回归(R语言)

嘿,我注意到你现在用复制数据集的方式来做逻辑回归,虽然能得到结果,但这种方法确实不够规范,还会平白把数据集变大——咱们换更高效更合理的方式来处理这类分组比例数据:

首先先明确你的数据结构:每一行代表一组观测,包含自变量x、该组的总样本量cases,以及成功比例prop。我们可以基于这些信息直接构建正确的逻辑回归模型,不需要复制数据集。

方法一:直接传入成功/失败计数(最直观)

先计算每组的成功数和失败数(如果你的prop是精确值,也可以手动输入准确的成功数,避免round的微小误差):

datf <- data.frame(prop = c(0.125, 0, 0.667, 1, 0.9), 
                   cases = c(8, 1, 3, 3, 10), 
                   x = c(11, 12, 15, 16, 18))
# 计算成功数和失败数
datf$success <- round(datf$prop * datf$cases)
datf$failure <- datf$cases - datf$success

然后用glm的二项式模型,把成功数和失败数组合成响应变量:

model <- glm(cbind(success, failure) ~ x, data = datf, family = binomial)
summary(model)

方法二:使用权重参数(更简洁)

如果你不想单独计算成功/失败数,可以直接用成功比例作为响应变量,把总样本量cases设为权重:

model <- glm(prop ~ x, data = datf, family = binomial, weights = cases)
summary(model)

这个方法和方法一的结果完全一致,代码更短,适合快速建模。

为什么你原来的方法不妥当?

你之前把数据集复制两次,标记success为1和0,这种方式并没有正确反映每组的成功/失败样本量——相当于把每组的成功和失败都只当成1个样本,这和实际的分组数据不符。如果非要展开成个体级别的数据(不推荐大样本场景),可以这样做:

# 仅小样本演示,大样本不建议用
individual_data <- data.frame(
  x = rep(datf$x, datf$cases),
  success = unlist(mapply(rep, c(1, 0), times = c(datf$success, datf$failure)))
)
model <- glm(success ~ x, data = individual_data, family = binomial)
summary(model)

这个结果和前两种方法一致,但当样本量很大时,会生成非常庞大的数据集,占用大量内存,所以还是前两种方法更实用。

总结一下,优先选择方法一或方法二,它们既符合逻辑回归的建模规范,又能高效处理分组比例数据~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:22:15