17

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

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

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

5 回答 5

26

除了使用predictwith linesor之外,segments您还可以使用withclip函数abline

x <- 1:10
y <- 1:10
plot(x,y)
clip(1,10, -100, 100)
abline(lm(y~x))
于 2012-04-06T16:35:34.877 回答
17

代替使用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)
于 2012-04-05T21:53:36.377 回答
8

您可以使用预测来做到这一点。

您可以预测 x 的特定值(请参阅 ?predict)

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))

在此处输入图像描述

于 2012-04-05T22:05:25.387 回答
4

plotrix 库具有以下ablineclip()功能:

x <- 1:10
y <- 1:10
plot(x,y)
ablineclip(lm(y~x),x1=1,x2=5)
于 2016-03-15T16:45:22.307 回答
0

另一种方法是使用该功能(此处segments的文档)。

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

现在,假设您想在x0和之间显示 x 的线x1。然后,以下代码绘制您的行:

# 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 为您选择的值即可。

在此处输入图像描述


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

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

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

于 2017-03-17T10:47:09.770 回答