使用R构建Logistic Regression Model得到直线而非S曲线求助
问题原因与解决办法
你的逻辑回归模型本身没问题,之所以画出直线而非S曲线,核心原因是自变量century_in_less_than_30_overs是0/1的二分变量:
- 逻辑回归对二分自变量的预测结果是两个离散的概率值:x=0对应一个固定概率,x=1对应另一个固定概率
- 用
curve函数连接这两个点,自然会呈现直线,这是符合数据类型的正常表现
正确的可视化方案
方案1:贴合二分变量的可视化(推荐)
直接展示两个自变量取值对应的预测概率,用点+短线呈现更合理:
# 计算0和1对应的预测概率 pred_probs <- predict(model, newdata = data.frame(century_in_less_than_30_overs = c(0,1)), type = "response") # 绘制原始散点图 plot(ENGR2280$century_in_less_than_30_overs, ENGR2280$`Win/Lose`, xlab = "Century in Less Than 30 Overs", ylab = "Win/Lose", main = "Logistic Regression Model", pch = 19, col = "blue") # 添加预测点和连线 points(c(0,1), pred_probs, col = "red", pch = 19, cex = 1.5) lines(c(0,1), pred_probs, col = "red", lwd = 2)
方案2:获得S型曲线(改用连续自变量)
如果想看到典型的S型逻辑回归曲线,需要用连续型自变量。你可以用原始的over for century(完成百分的投球局数,连续变量)重新建模:
# 基于连续变量构建逻辑回归 model_continuous <- glm(`Win/Lose` ~ `over for century`, data = ENGR2280, family = binomial) # 绘制散点图 plot(ENGR2280$`over for century`, ENGR2280$`Win/Lose`, xlab = "Overs for Century", ylab = "Win/Lose", main = "Logistic Regression with Continuous Predictor", pch = 19, col = "blue") # 添加S型拟合曲线 curve(predict(model_continuous, data.frame(`over for century` = x), type = "response"), add = TRUE, col = "red", lwd = 2)
内容的提问来源于stack exchange,提问作者Shantel Daley
相关产品推荐
相关产品推荐

