在R中使用ggplot结合glm绘制逻辑回归时无拟合线问题
解决ggplot2中逻辑回归拟合线不显示的问题
我来帮你搞定这个问题!你遇到的拟合线不显示的核心原因是你的age变量是分类(因子)类型,而geom_smooth()在处理分类x轴时,默认的逻辑回归模型不会生成一条连续的拟合线——因为二分类的x对应的是两个独立的成功概率,而非连续变量的趋势线。
下面给你两种可行的解决方案:
方案1:将分类变量转为数值型后绘图
把age转换成0/1的数值变量,让geom_smooth()能识别出连续的x轴,从而拟合出逻辑回归曲线:
# 先给age赋值数值标签 data$age_num <- ifelse(data$age == "18-49 years old", 0, 1) # 绘制带拟合线的图 ggplot(data, aes(age_num, result)) + # 添加抖动散点,避免原始数据点重叠 geom_jitter(width = 0.1, alpha = 0.5, color = "gray") + # 拟合逻辑回归线 geom_smooth(method = "glm", formula = y ~ x, colour = "black", method.args = list(family = binomial), se = TRUE) + # 把x轴标签改回原分类名称,更直观 scale_x_continuous(breaks = c(0, 1), labels = c("18-49 years old", "50 and older")) + labs(x = "Age Group", y = "Result (1 = Success, 0 = Failure)")
方案2:直接在分类x轴上拟合概率点+趋势线
如果你不想转换变量,可以在geom_smooth()的公式里把分类变量转为数值,同时用stat_summary()展示每个年龄组的实际成功概率:
ggplot(data, aes(age, result)) + geom_jitter(width = 0.2, alpha = 0.3, color = "gray") + # 用红点显示每个年龄组的平均成功概率(即实际观测的概率) stat_summary(fun = mean, geom = "point", size = 3, color = "red") + # 拟合逻辑回归线,明确把分类x转为数值 geom_smooth(method = "glm", formula = y ~ as.numeric(x), colour = "black", method.args = list(family = binomial)) + labs(x = "Age Group", y = "Result (1 = Success, 0 = Failure)")
额外提示:先查看模型结果验证
你可以先单独拟合逻辑回归模型,确认参数是否合理,再对应到可视化上:
# 拟合逻辑回归模型 logit_model <- glm(result ~ age, data = data, family = binomial) summary(logit_model) # 计算每个年龄组的成功概率 predict(logit_model, newdata = data.frame(age = c("18-49 years old", "50 and older")), type = "response")
这样你就能清楚看到两组的预测概率,也能对应上可视化里的拟合结果啦~
内容的提问来源于stack exchange,提问作者Vlad Fedo
相关产品推荐
相关产品推荐

