使用带有多个x条目的行()'

时间:2013-03-31 16:35:59

标签: r plot regression

我正在寻找一种在数据集上绘制非线性回归线的方法,其中我的向量y中的每个值都被存储了多次,所以我尝试使用类似的东西:

x <- c(1,2,3,4,5,6,7,8,9,10)
y <- c(1,4,9,15,25,9,36,25,36,25)
reg4 <- lm( x ~ y + I(y^2) )
plot(x ~ y)
lines(y, predict(reg4), type="l", col="red", lwd=1)

这给了http://i.imgur.com/qSEVNdT.png enter image description here

所以我的问题是,有没有办法,让我们说,为每个y条目使用某种平均值?或者只是让它成为一个“连续”的。在有多个条目的点处,行而不是分支成多行的东西/返回到较低的y值。

2 个答案:

答案 0 :(得分:1)

在这些情况下,最好是在协变量范围内从模型中predict。对于在x范围内等间隔的50或100个位置,您可以这样做。根据需要增加或减少要预测的位置数量 - 更复杂的响应将需要更多位置等。这也解决了意大利面条问题,因为提供的newdata将按x <的顺序排列/ p>

x <- c(1,2,3,4,5,6,7,8,9,10)
y <- c(1,4,9,15,25,9,36,25,36,25)
reg4 <- lm( x ~ y + I(y^2) )
## predictions
pred <- data.frame(y = seq(min(y), max(y), length = 100))
pred <- transform(pred, x = predict(reg4, newdata = pred))
## plot
plot(x ~ y)
lines(x ~ y, data = pred, type = "l", col = "red", lwd = 1)

enter image description here

答案 1 :(得分:0)

问题不是来自数据中的联系: 对于给定的y值,只有一个预测值。 问题是这些点没有排序, 这样,当你加入它们时,你最终会出现纠结的线条。 您可以使用order对点进行重新排序。

plot(
  x ~ y, 
  xlab = "y", ylab = "x"  # Confusing...
)
i <- order(y)
lines( y[i], predict(reg4)[i] )