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

如何在R语言中将两个模型预测曲线合并到同一绘图中?

问题与解决方案

问题描述

需求:绘制一幅以年龄为X轴、各年龄组唐氏儿出生比例为Y轴的图,同时添加主效应模型与二次模型的预测概率曲线及图例。

已构建两个glm模型:

lmod2 <- glm(prop ~ age + I(age^2),
             family=quasibinomial, finaldata)
lmod <- glm(prop ~ age,
            family=quasibinomial, finaldata)

尝试以下代码后报错:

plot(predict(lmod,lmod2, newdata = list(age = 16:50), type = 'response'), type = 'l',
      ylab = "Probability of Down's syndrome per live birth", 
      xlab = 'Maternal age')
# 错误信息:Error in !se.fit : invalid argument type

plot(lmod,lmod2)
# 错误信息:Error in plot.lm(lmod, lmod2) : 'which' must be in 1:6

解决步骤

你的错误源于predict()无法同时传入两个模型,且plot.lm()仅支持单个模型的诊断图,不能直接绘制多模型预测曲线。正确操作如下:

  1. 生成预测用的连续年龄序列
new_age <- seq(16, 50, by = 1)  # 覆盖16-50岁的所有年龄
new_data <- data.frame(age = new_age)
  1. 分别计算两个模型的响应尺度预测值
# 主效应模型预测概率
pred_lmod <- predict(lmod, newdata = new_data, type = "response")
# 二次模型预测概率
pred_lmod2 <- predict(lmod2, newdata = new_data, type = "response")
  1. 绘制原始数据+双模型预测曲线
# 先画原始年龄组的唐氏儿比例散点
plot(finaldata$age, finaldata$prop, 
     xlab = "Maternal age", 
     ylab = "Probability of Down's syndrome per live birth",
     pch = 16, col = "gray",
     main = "Down's Syndrome Probability by Maternal Age")

# 叠加主效应模型曲线
lines(new_age, pred_lmod, col = "blue", lwd = 2)

# 叠加二次模型曲线
lines(new_age, pred_lmod2, col = "red", lwd = 2)

# 添加图例区分元素
legend("topleft", 
       legend = c("Raw Data", "Linear Model", "Quadratic Model"),
       col = c("gray", "blue", "red"),
       pch = c(16, NA, NA),
       lty = c(NA, 1, 1),
       lwd = c(NA, 2, 2))

关键说明

  • predict()一次只能处理单个模型,必须分开计算两个模型的预测结果
  • 先绘制原始散点,再用lines()叠加曲线,避免图形覆盖
  • 图例通过pch和lty分别匹配散点与曲线样式,保证显示逻辑清晰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:01:11