我想知道是否有办法计算绘图中的abline和数据点之间的距离?例如,concentration == 40与signal == 643(元素5)和基线之间的距离是多少?
concentration <- c(1,10,20,30,40,50)
signal <- c(4, 22, 44, 244, 643, 1102)
plot(concentration, signal)
res <- lm(signal ~ concentration)
abline(res)
Run Code Online (Sandbox Code Playgroud)
csg*_*pie 13
你基本上是要求了residuals.
R> residuals(res)
1 2 3 4 5 6
192.61 12.57 -185.48 -205.52 -26.57 212.39
Run Code Online (Sandbox Code Playgroud)
另外,当您拟合线性回归时,残差的总和为0:
R> sum(residuals(res))
[1] 8.882e-15
Run Code Online (Sandbox Code Playgroud)
如果模型正确,应遵循正态分布 - qqnorm(res).
我发现更容易使用标准化残差.
> rstandard(res)
1 2 3 4 5 6
1.37707 0.07527 -1.02653 -1.13610 -0.15845 1.54918
Run Code Online (Sandbox Code Playgroud)
这些残差已经缩放为具有平均零,方差(近似)等于1并且具有正态分布.边界标准化残差是那些大于+/- 2的残差.
您可以使用以下功能:
http://paulbourke.net/geometry/pointlineplane/pointline.r
然后只提取斜率和截距:
> coef(res)
(Intercept) concentration
-210.61098 22.00441
Run Code Online (Sandbox Code Playgroud)
所以你的最终答案是:
concentration <- c(1,10,20,30,40,50)
signal <- c(4, 22, 44, 244, 643, 1102)
plot(concentration, signal)
res <- lm(signal ~ concentration)
abline(res)
Run Code Online (Sandbox Code Playgroud)

cfs <- coef(res)
distancePointLine(y=signal[5], x=concentration[5], slope=cfs[2], intercept=cfs[1])
Run Code Online (Sandbox Code Playgroud)
如果您想要一个更通用的解决方案来查找特定点,则concentration == 40返回一个长度为的布尔向量length(concentration).您可以使用该向量来选择点.
pt.sel <- ( concentration == 40 )
> pt.sel
[1] FALSE FALSE FALSE FALSE TRUE FALSE
> distancePointLine(y=signal[pt.sel], x=concentration[pt.sel], slope=cfs["concentration"], intercept=cfs["(Intercept)"])
1.206032
Run Code Online (Sandbox Code Playgroud)
不幸的是,distancePointLine似乎没有矢量化(或者确实如此,但是当你向它传递一个向量时它会返回一个警告).否则,只需将[]选择器从x和y参数中移开,就可以得到所有点的答案.
| 归档时间: |
|
| 查看次数: |
7184 次 |
| 最近记录: |