在一定范围R内绘制拟合线

时间:2012-04-05 21:42:29

标签: r plot lm par

使用R,我想绘制两个变量之间的线性关系,但我希望拟合线只出现在数据范围内。

例如,如果我有以下代码,我希望该行仅存在于1:10的x和y值(默认参数此行超出数据点范围)。

x <- 1:10
y <- 1:10
plot(x,y)
abline(lm(y~x))

5 个答案:

答案 0 :(得分:18)

除了将predictlinessegments一起使用外,您还可以将clip功能与abline一起使用:

x <- 1:10
y <- 1:10
plot(x,y)
clip(1,10, -100, 100)
abline(lm(y~x))

答案 1 :(得分:14)

不使用abline(),(a)保存拟合模型,(b)使用predict.lm()找到对应于x = 1和x = 10的拟合y值,然后(c) )使用lines()在两点之间添加一行:

f <- lm(y~x)
X <- c(1, 10)
Y <- predict(f, newdata=data.frame(x=X))

plot(x,y)
lines(x=X, y=Y)

答案 2 :(得分:8)

您可以使用预测。

您可以预测x的具体值(参见?预测)

x<-1:10
y<-1:10
plot(x,y)
new <- data.frame(x = seq(1, 5, 0.5))
lines(new$x, predict(lm(y~x), new))

enter image description here

答案 3 :(得分:3)

plotrix库具有ablineclip()功能:

x <- 1:10
y <- 1:10
plot(x,y)
ablineclip(lm(y~x),x1=1,x2=5)

答案 4 :(得分:0)

另一种方法是使用segments函数(doc here)。

假设你估计了这条线,你得到a的截距和b的斜率。因此,拟合函数为y = a + bx

现在,假设您要在x0x1之间显示x行。然后,以下代码绘制您的行:

# inputs

a <- 0.5
b <- 2

x0 <- 1
x1 <- 5

# graph

plot(c(0,5), c(0,5), type = "n", xlab = "", ylab = "", bty='l')
segments(x0, a+b*x0, x1, a+b*x1)

只需将 a, b, x0, x1 的值替换为您选择的值

enter image description here

对于像我这样想要为任意一对数字绘制一条线的人(而不是那些适合给定回归的那些),我们需要以下代码:

plot(c(0,5), c(0,5), type = "n", xlab = "", ylab = "", bty='l')
segments(x0, yo, x1, y1)

只需将 x0, y0, x1, y1 的值替换为您选择的值