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

使用ggplot绘制逻辑回归线时stat_smooth报错如何解决

报错原因说明

  1. 用glm.fit作为method参数报错:glm.fit是R的底层拟合函数,不接收ggplot传递的data参数,必须用glm作为method参数。
  2. 切换为glm后的两个报错:
    • y值范围错误:你将A2_auto设为因子后,取值对应为1、2,不符合逻辑回归要求的0≤y≤1;即使你手动转成0/1数值,也要确认转换后确实是整数0和1,没有其他异常值。
    • 算法不收敛:从你给出的数据集结构看,自变量A21(距离)的取值全为1,自变量没有任何变异,逻辑回归无法计算系数,自然无法收敛,这是核心问题。

解决步骤

  • 步骤1:重新生成变量,同时保留数值型0/1变量用于拟合、因子变量用于标签展示
library(dplyr)
dataset <- dataset %>%
  mutate(
    # 数值型0/1用于回归拟合
    A2_auto_num = car::recode(A2, "1 = 1; 2:9 = 0", as.factor = FALSE),
    # 因子型用于可视化标签
    A2_auto_fct = factor(A2_auto_num, levels = c(0,1), labels = c("kein Auto", "Auto"))
  )
  • 步骤2:检查自变量A21的取值,确认距离变量是否正确导入
# 查看A21的取值分布
table(dataset$A21)
# 如果输出显示只有1这一个取值,说明你的原始数据存在问题,需要先修正数据
  • 步骤3:确认A21存在不同取值后,运行绘图代码
library(ggplot2)
ggplot(data=dataset, aes(x=A21, y=A2_auto_num)) + 
  # 增加抖动避免0/1散点完全重叠
  geom_jitter(alpha=.5, height = 0.05) +
  stat_smooth(method="glm", se=FALSE, method.args = list(family=binomial)) +
  # 调整y轴显示分类标签
  scale_y_continuous(breaks = c(0,1), labels = c("不驾车", "驾车"), name = "出行方式") +
  xlab("前往足球场的距离(km)")

补充说明

如果你的距离变量确实全部为1,不存在变异,那么无法通过回归验证距离是否是驾车出行的预测因子,需要先修正数据问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:09:01