如何在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()仅支持单个模型的诊断图,不能直接绘制多模型预测曲线。正确操作如下:
- 生成预测用的连续年龄序列
new_age <- seq(16, 50, by = 1) # 覆盖16-50岁的所有年龄 new_data <- data.frame(age = new_age)
- 分别计算两个模型的响应尺度预测值
# 主效应模型预测概率 pred_lmod <- predict(lmod, newdata = new_data, type = "response") # 二次模型预测概率 pred_lmod2 <- predict(lmod2, newdata = new_data, type = "response")
- 绘制原始数据+双模型预测曲线
# 先画原始年龄组的唐氏儿比例散点 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
相关产品推荐
相关产品推荐

