如何在R中使用curve函数绘制各模型的WEIGHT预测回归线?
使用curve函数绘制线性模型的预测曲线
核心思路
curve()函数的作用是根据给定的表达式/函数,在指定的x值范围内生成曲线。对于你的线性模型,要展示AVFOOD对WEIGHT的平均预测值,需要:
- 对于只含AVFOOD的模型(m1.f),直接用模型的预测表达式即可;
- 对于包含其他协变量(GSIZE、AREA)的模型(m2.f、m3.f),需要固定这些协变量在均值水平(这样才能单独看AVFOOD的影响)。
完整代码实现
确保foxes数据集已加载后,按以下步骤操作:
# 先绘制原始散点图作为基底 plot(foxes$AVFOOD, foxes$WEIGHT, pch = 16, col = "gray", xlab = "AVFOOD", ylab = "WEIGHT", main = "不同模型的WEIGHT预测曲线") # 1. 绘制m0.f的预测线(截距模型,所有x对应的预测值都是均值) curve(predict(m0.f, newdata = data.frame(AVFOOD = x, GSIZE = mean(foxes$GSIZE), AREA = mean(foxes$AREA))), add = TRUE, col = "black", lwd = 2, lty = 2) # 2. 绘制m1.f的预测线(仅AVFOOD作为自变量) curve(predict(m1.f, newdata = data.frame(AVFOOD = x)), add = TRUE, col = "blue", lwd = 2) # 3. 绘制m2.f的预测线(固定GSIZE为均值) curve(predict(m2.f, newdata = data.frame(AVFOOD = x, GSIZE = mean(foxes$GSIZE))), add = TRUE, col = "red", lwd = 2, lty = 3) # 4. 绘制m3.f的预测线(固定GSIZE和AREA为均值) curve(predict(m3.f, newdata = data.frame(AVFOOD = x, GSIZE = mean(foxes$GSIZE), AREA = mean(foxes$AREA))), add = TRUE, col = "green", lwd = 2, lty = 4) # 添加图例 legend("topleft", legend = c("m0.f(仅截距)", "m1.f(AVFOOD)", "m2.f(AVFOOD+GSIZE)", "m3.f(AVFOOD+GSIZE+AREA)"), col = c("black", "blue", "red", "green"), lwd = 2, lty = c(2,1,3,4))
关键代码解释
add = TRUE:将曲线添加到已有的散点图上,而非新建画布;predict()函数:根据模型和新的自变量取值生成预测值,newdata参数需传入包含模型所有自变量的数据框;- 对于含多个协变量的模型(m2.f、m3.f),用
mean(foxes$GSIZE)和mean(foxes$AREA)固定变量取值为数据集均值,得到的曲线代表其他协变量处于平均水平时,AVFOOD对WEIGHT的预测效应; lty和col参数:区分不同模型的曲线样式与颜色,方便对比。
内容的提问来源于stack exchange,提问作者connectedvoid
相关产品推荐
相关产品推荐

