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

