首页 > 解决方案 > 如何仅通过数据范围绘制回归线

问题描述

我在绘制仅涵盖 x 值范围的回归线时遇到问题。我开始工作的唯一解决方案类似于 using abline,它会在整个绘图中生成回归线。

我的数据框“费率”:

structure(list(subpop = structure(1:13, .Label = c("BB", "DS", 
"FB", "GB", "KB", "LS", "MC", "NB", "NW", "SB", "SH", "VM", "WH"), 
class = "factor"), totharv = c(5902, 3187, 5429, 1513, 880, 
4027, 1100, 1642, 197, 2811, 2477, 173, 1747), annumean = c(12.321503131524, 
65.0408163265306, 110.795918367347, 30.8775510204082, 17.9591836734694, 
82.1836734693878, 22.4489795918367, 33.5102040816327, 4.02040816326531, 
57.3673469387755, 50.5510204081633, 3.53061224489796, 35.6530612244898),
totarea = c(1078840.89485, 2620106.29649, 1181019.17255, 171136.23318, 
156514.755664, 487532.074005, 495256.254596, 944667.823467, 147262.719799, 
715030.748752, 1135249.6887, 209962.017835, 502379.942988), prcprime = c(31, 
42, 96, 98, 67, 70, 99, 23, 74, 60, 100, 62, 100), prime = c(334440.6774035, 
1100444.6445258, 1133778.405648, 167713.5085164, 104864.88629488, 
341272.4518035, 490303.69205004, 217273.59939741, 108974.41265126, 
429018.4492512, 1135249.6887, 130176.4510577, 502379.942988), 
prey = c(8, 8, 7, 5, 5, 6, 2, 3, 2, 4, 5, 2, 5), density = c(2.62, 
1.27, 2.19, 9.3, 2.28, 5.21, 0.57, 1.04, 1.38, 1.27, 0.69, 
0.77, 2.05), prime1000 = c(334.4406774035, 1100.4446445258, 
1133.778405648, 167.7135085164, 104.86488629488, 341.2724518035, 
490.30369205004, 217.27359939741, 108.97441265126, 429.0184492512, 
1135.2496887, 130.1764510577, 502.379942988), totarea1000 = c(1078.84089485, 
2620.10629649, 1181.01917255, 171.13623318, 156.514755664, 
487.532074005, 495.256254596, 944.667823467, 147.262719799, 
715.030748752, 1135.2496887, 209.962017835, 502.379942988
), meanrate = c(8.70146823014459, 4.93980932053221, 4.31244487144207, 
2.27890716207299, 6.83701834392294, 3.19292620629519, 3.07469056764831, 
2.9169758812616, 1.43304970891178, 3.60271608599471, 5.95451287881945, 
1.09586402811883, 3.65560375696448)), row.names = c(NA, -13L), 
class = "data.frame")

绘制数据点的脚本:

plot(rates$prime1000,rates$meanrate,pch=19,cex=1.7,ylim=c(0,10),
    xlim=c(0,1250),lwd=2,las=1,cex.lab=1.3,
ylab="Mean rate (%)",xlab="Shelf area (1000 sq.km)")
text(rates$prime1000,rates$meanrate,labels=rates$subpop,
    cex=0.9,pos=2,offset=0.7)

并且脚本应该仅在 x 值的范围内绘制回归线,遗憾的是它不起作用:

fit <- lm(rates$meanrate~rates$prime1000)
x0 <- seq(min(rates$prime1000), max(rates$prime1000))
y0 <- predict.lm(fit, newdata = list(prime1000 = x0),length=20)
lines(x0, y0, col = 2)

可能有其他方法可以做到这一点,但有没有人在这个脚本中看到问题?

标签: rplotlinear-regression

解决方案


predict函数必须包含与模型中完全相同的变量fit。而不是包括rates$prime1000(和rates$meanrate),将分离出数据帧源:

fit <- lm(meanrate~prime1000, data = rates)

带有回归线的绘图


推荐阅读