适合线,不同重量的数据点

时间:2015-01-01 14:43:48

标签: r

我想尝试将R中的“最佳拟合线”拟合到一组点。但是我希望每个点根据该点的精确度来携带一个特定的权重。

我的数据是:

x  y   precision
4  4   2
16 18  5
17 39  4
29 30  20
38 38  11

所以我希望线条能够以更高的精度拟合点,而不是精度更低的点。

我猜它有点像:

abline(lm(y~x+precision))

这似乎不起作用 非常感谢

2 个答案:

答案 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