【问题标题】:How to plot regression line only through data range如何仅通过数据范围绘制回归线
【发布时间】:2019-10-15 18:50:19
【问题描述】:

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

我的数据框'rates':

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)

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

【问题讨论】:

    标签: r plot linear-regression


    【解决方案1】:

    您的代码运行良好?我刚刚更改了预测的长度以匹配x0 的长度。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 它仍然不起作用:predict.lm 调用后的错误消息:eval 中的错误(predvars,data,env):找不到对象 'meanrate'。这很奇怪,因为它显然在数据框中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-12
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2018-09-24
      • 2021-03-18
      • 2018-07-10
      相关资源
      最近更新 更多