2012-04-05 71 views
12

使用R,我想绘制两个变量之间的线性关系,但我希望拟合线只出现在数据范围内。例如,如果我有以下代码,我希望行只能以1:10的x和y值存在(使用默认参数,此行超出数据点范围)。在一定范围内绘制拟合线R

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

回答

13

代替使用abline()的,(a)中保存的拟合模型,(b)中使用predict.lm()找到对应于x = 1和拟合的y值x = 10,且然后(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) 
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

17

除了使用predictlinessegments您还可以使用clip功能与abline

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

+1,因为它可以与任何行一起使用,也可以使用abline(),而不使用predict()方法。这样,人们可以(例如)修剪延伸到绘图边缘的线条,但仅限于一边,例如,向右,而不是向左。 – pfifas 2015-01-27 12:40:07

2

plotrix l ibrary具有用于只是这个ablineclip()功能:

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

一种替代方法是使用segments功能(文件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值。