绘制一定范围内的拟合线 R
Posted
技术标签:
【中文标题】绘制一定范围内的拟合线 R【英文标题】:Plot fitted line within certain range R 【发布时间】:2012-04-19 15:45:13 【问题描述】:使用 R,我想绘制两个变量之间的线性关系,但我希望拟合线仅存在于数据范围内。
例如,如果我有以下代码,我希望这条线只存在于 1:10 的 x 和 y 值(使用默认参数,这条线超出了数据点的范围)。
x <- 1:10
y <- 1:10
plot(x,y)
abline(lm(y~x))
【问题讨论】:
【参考方案1】:不使用abline()
,(a) 保存拟合模型,(b) 使用predict.lm()
找到对应于x=1 和x=10 的拟合y 值,然后(c) 使用@987654323 @ 在两点之间添加一条线:
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】:您可以使用 predict 来做到这一点。
您可以预测 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))
【讨论】:
【参考方案3】:除了将predict
与lines
或segments
一起使用之外,您还可以将clip
函数与abline
一起使用:
x <- 1:10
y <- 1:10
plot(x,y)
clip(1,10, -100, 100)
abline(lm(y~x))
【讨论】:
+1,因为它适用于任何行,也适用于 abline(),而无需使用带有 predict() 的 hack。这样,例如,还可以修剪延伸到绘图边缘的 ablines,但只能修剪到一侧,例如向右,而不是向左。 这是一个比公认的更好的答案。简单得多,并且实际上可以根据需要对视觉表示进行操作,而不是使用predict
制作一些奇怪的新行表示【参考方案4】:
plotrix 库有 ablineclip()
函数用于此目的:
x <- 1:10
y <- 1:10
plot(x,y)
ablineclip(lm(y~x),x1=1,x2=5)
【讨论】:
【参考方案5】:另一种方法是使用segments
函数(文档here)。
假设你估计了这条线,你得到了a
的截距和b
的斜率。因此,您的拟合函数是y = a + bx
。
现在,假设您想在 x0
和 x1
之间显示 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
的值替换为您选择的值。
对于像我这样想为任意一对数字(而不是适合给定回归的数字)绘制一条线的人来说,您需要以下代码:
plot(c(0,5), c(0,5), type = "n", xlab = "", ylab = "", bty='l')
segments(x0, yo, x1, y1)
只需将 x0, y0, x1, y1
的值替换为您选择的值。
【讨论】:
以上是关于绘制一定范围内的拟合线 R的主要内容,如果未能解决你的问题,请参考以下文章
带置信区间的拟合线几种绘制方式-在python和R中的实现 (二)
R语言使用car包的scatterplotMatrix函数绘制散点图矩阵并添加线性和loess拟合线在主对角线上放置箱图密度或直方图在图像边缘添加轴须图rug可以基于分组变量绘制散点图矩阵