我想尝试将R中的“最佳拟合线”拟合到一组点。但是我希望每个点根据该点的精确度来携带一个特定的权重。
我的数据是:
x y precision
4 4 2
16 18 5
17 39 4
29 30 20
38 38 11
所以我希望线条能够以更高的精度拟合点,而不是精度更低的点。
我猜它有点像:
abline(lm(y~x+precision))
这似乎不起作用 非常感谢
答案 0 :(得分:5)
然后你需要使用weights
函数中的lm
参数来做到这一点:
df <- read.table(header=T, text='x y precision
4 4 2
16 18 5
17 39 4
29 30 20
38 38 11')
a <- lm( y ~ x , data=df , weights=precision)
> a
Call:
lm(formula = y ~ x, data = df, weights = precision)
Coefficients:
(Intercept) x
10.7895 0.7096
如您所见,这与您未使用weights
参数时得到的结果不同:
> a <- lm( y ~ x , data=df)
> a
Call:
lm(formula = y ~ x, data = df)
Coefficients:
(Intercept) x
7.5893 0.8755
这样,每个点根据精度值给出一个特定的权重。
只是让你确切知道weights
是如何工作的,它会复制每一行weights
向量指示的次数(在本例中为精度)。即。
df2 <- read.table(header=T, text='x y precision
4 4 2
4 4 2
16 18 5
16 18 5
16 18 5
16 18 5
16 18 5
17 39 4
17 39 4
17 39 4
17 39 4
29 30 20
29 30 20
29 30 20
29 30 20
29 30 20
29 30 20
29 30 20
29 30 20
29 30 20
29 30 20
29 30 20
29 30 20
29 30 20
29 30 20
29 30 20
29 30 20
29 30 20
29 30 20
29 30 20
29 30 20
38 38 11
38 38 11
38 38 11
38 38 11
38 38 11
38 38 11
38 38 11
38 38 11
38 38 11
38 38 11
38 38 11')
b <- lm( y ~ x , data=df2)
> b
Call:
lm(formula = y ~ x, data = df2)
Coefficients:
(Intercept) x
10.7895 0.7096
正如您所看到的,结果与将weights
参数的精度应用完全相同。
这样您就可以准确了解weights
参数的工作原理!
答案 1 :(得分:0)
正如您还要询问可视化这些。
abline()
需要事先致电plot()
。这应该是x和y的散点图,否则只是线图不包含任何有用的信息。
为了使您的回归线基于加权回归可视化,您可以为模型添加另一条线,使其具有相同的权重和/或使点大小取决于精度。
请参阅下面的简单示例:
df <- read.table(header=T, text='x y precision
4 4 2
16 18 5
17 39 4
29 30 20
38 38 11')
u <- lm( y ~ x , data=df)
w <- lm( y ~ x , data=df, weights=precision)
plot(df$x, df$y, cex=df$precision/max(df$x)*10)
abline(u, lty=2)
abline(w)
然而,请注意,有些人不赞成使用圆圈,因为人们在比较它们的尺寸方面有困难。我确定在stackexchange上讨论过这个问题。这方面的一个例子就是“艾宾浩斯幻觉”(Ebbinghaus illusion&#39; (https://en.wikipedia.org/wiki/Ebbinghaus_illusion)