在 R 中绘制最小二乘回归图中的垂直偏移
我感兴趣的是用最小二乘回归线和将数据点连接到回归线的线段绘制图,如称为垂直偏移的图形所示: http://mathworld.wolfram.com/LeastSquaresFitting.html
(来自 MathWorld - Wolfram 网络资源:wolfram.com)
我在这里完成了绘图和回归线:
## Dataset from http://www.apsnet.org/education/advancedplantpath/topics/RModules/doc1/04_Linear_regression.html
## Disease severity as a function of temperature
# Response variable, disease severity
diseasesev<-c(1.9,3.1,3.3,4.8,5.3,6.1,6.4,7.6,9.8,12.4)
# Predictor variable, (Centigrade)
temperature<-c(2,1,5,5,20,20,23,10,30,25)
## For convenience, the data may be formatted into a dataframe
severity <- as.data.frame(cbind(diseasesev,temperature))
## Fit a linear model for the data and summarize the output from function lm()
severity.lm <- lm(diseasesev~temperature,data=severity)
# Take a look at the data
plot(
diseasesev~temperature,
data=severity,
xlab="Temperature",
ylab="% Disease Severity",
pch=16,
pty="s",
xlim=c(0,30),
ylim=c(0,30)
)
abline(severity.lm,lty=1)
title(main="Graph of % Disease Severity vs Temperature")
我应该使用某种 for 循环和段 http://www.iiap.res.in/astrostat/School07/R/html/graphics/html/segments.html 执行以下操作垂直偏移?有更有效的方法吗?如果可能,请提供示例。
I'm interested in making a plot with a least squares regression line and line segments connecting the datapoints to the regression line as illustrated here in the graphic called perpendicular offsets:
http://mathworld.wolfram.com/LeastSquaresFitting.html
(from MathWorld - A Wolfram Web Resource: wolfram.com)
I have the plot and regression line done here:
## Dataset from http://www.apsnet.org/education/advancedplantpath/topics/RModules/doc1/04_Linear_regression.html
## Disease severity as a function of temperature
# Response variable, disease severity
diseasesev<-c(1.9,3.1,3.3,4.8,5.3,6.1,6.4,7.6,9.8,12.4)
# Predictor variable, (Centigrade)
temperature<-c(2,1,5,5,20,20,23,10,30,25)
## For convenience, the data may be formatted into a dataframe
severity <- as.data.frame(cbind(diseasesev,temperature))
## Fit a linear model for the data and summarize the output from function lm()
severity.lm <- lm(diseasesev~temperature,data=severity)
# Take a look at the data
plot(
diseasesev~temperature,
data=severity,
xlab="Temperature",
ylab="% Disease Severity",
pch=16,
pty="s",
xlim=c(0,30),
ylim=c(0,30)
)
abline(severity.lm,lty=1)
title(main="Graph of % Disease Severity vs Temperature")
Should I use some kind of for loop and segments http://www.iiap.res.in/astrostat/School07/R/html/graphics/html/segments.html to do the perpendicular offsets? Is there a more efficient way? Please provide an example if possible.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您首先需要计算出垂直线段底部的坐标,然后调用
segments
函数,该函数可以将坐标向量作为输入(不需要循环)。现在只需调用线段:
请注意,除非确保绘图的 x 单位和 y 单位具有相同的表观长度(等距比例),否则结果看起来不会垂直。您可以通过使用
pty="s"
获取方形图并将xlim
和ylim
设置为相同范围来实现此目的。You first need to figure out the coordinates for the base of the perpendicular segments, then call the
segments
function which can take vectors of coordinates as inputs (no need for a loop).Now just call segments:
Note that the results will not look perpendicular unless you ensure that the x-unit and y-unit of your plot have the same apparent length (isometric scales). You can do that by using
pty="s"
to get a square plot and setxlim
andylim
to the same range.