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

含分类变量数据的Logistic回归实现报错问题

问题分析与解决方案

错误核心原因

  • 你的数据集是聚合后的计数数据,每个primary_fur_color对应runs_from=0和1的样本计数n,但原代码完全忽略了n的存在,相当于告诉模型每个毛色的0/1结果各只有1个样本,而实际上每个结果对应多个观测。
  • 同时将x和y都设为runs_from(二元0/1变量),每个毛色组仅两个数据点,逻辑回归无法从两个点拟合出有效的回归曲线。
  • 管道传递数据后,重复指定data = Squirrels.Count属于冗余代码,虽不报错但没必要。

修正后的代码

方案1:用权重拟合逻辑回归(推荐)

直接在stat_smooth中加入weight=n参数,让模型识别每个观测的实际样本量:

Squirrels.Count %>% 
  ggplot(aes(x = primary_fur_color, y = runs_from)) +   
  # 用点大小直观展示计数n的多少
  geom_point(aes(size = n, color = primary_fur_color)) +   
  stat_smooth(method = "glm", se = TRUE, 
              method.args = list(family = binomial),
              aes(weight = n))

方案2:先展开原始数据再拟合

如果不想用权重,也可以先将聚合数据展开为原始单条记录的形式,再绘图:

# 展开数据
Squirrels.raw <- Squirrels.Count %>%
  uncount(n)

# 绘图
Squirrels.raw %>%
  ggplot(aes(x = primary_fur_color, y = runs_from)) +
  geom_jitter(aes(color = primary_fur_color), width = 0.1, alpha = 0.5) +
  stat_smooth(method = "glm", se = TRUE, 
              method.args = list(family = binomial))

代码说明

  • 方案1的权重参数weight=n是处理聚合计数数据的标准方式,避免了展开数据的内存开销,尤其适合大样本聚合数据。
  • 用geom_point的size=n可以直观看到每个毛色下0/1结果的样本量差异;如果觉得点重叠,也可以换成geom_jitter添加少量偏移。
  • 逻辑回归拟合的是runs_from=1的概率随primary_fur_color的变化趋势,se=TRUE会显示置信区间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 10:42:17