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

逻辑回归分类数据预测概率ggplot绘制问题求助

R逻辑回归预测概率曲线绘制问题排查与解决方案

错误原因

  • 预测数据集的Location因子水平与训练集不匹配:训练用df的Location取值为"A"/"B"/"C",你生成预测数据时用rep(0:2, each=100)转因子,水平完全不对应,导致predict函数无法匹配分组直接报错。
  • 预测数据集行数不匹配:3组Location各需要100个Density值,总数据量应为300行,但你写的rep(seq(from=0, to=1,length.out=100),2)仅生成200个Density值,和Location的300行长度不一致,合并时会报错。
  • 非必要的数据集调用:生成预测数据时不需要用with(c_freq_pca, ...),你的模型是基于df训练的,直接构造独立的预测数据集即可。
  • glm参数写法不规范:na.action = na.omit()加括号会直接执行函数,正确写法是传入函数名na.action = na.omit,若训练集无缺失值该问题不会触发报错,但属于不规范写法。

完整可运行实现代码

首先加载需要的包:

library(ggplot2)

构造示例训练数据:

df <- data.frame(
  Choice = c(0,1,1,0,1,0,1,0,1,0),
  Density = c(0.7,0.3,0.2,0.6,0.2,0.8,0.2,0.9,0.1,0.9),
  Location = factor(c("A","B","B","A","C","A","B","A","C","A"))
)

构建逻辑回归模型:

logit <- glm(Choice ~ Density + Location, 
             family = binomial(link = "logit"),
             na.action = na.omit, 
             data = df)

构造匹配模型要求的预测数据集:

newdata <- data.frame(
  Density = rep(seq(from = 0, to = 1, length.out = 100), 3), # 3组各100个密度值,共300行
  Location = factor(rep(c("A","B","C"), each = 100), levels = levels(df$Location)) # 水平和训练集完全对齐
)

计算预测值与概率:

# 计算预测值与标准误
newdata <- cbind(newdata, predict(logit, newdata, type = "link", se = TRUE))
# 转换为0-1区间的预测概率
newdata$PredictedProb <- plogis(newdata$fit)

绘制预测概率曲线:

ggplot(newdata, aes(x = Density, y = PredictedProb, color = Location)) +
  geom_line(linewidth = 1) +
  labs(x = "Density", y = "预测概率") +
  theme_bw()

输出说明

运行上述代码会得到符合预期的结果:x轴为Density取值,y轴为0-1区间的预测概率,共3条对应Location A/B/C的曲线,且整体随Density升高预测概率呈下降趋势。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:06:04