拟合线、不同权重的数据点

Fitted line, data points with different weights

我想尝试将 R 中的 'line of best fit' 拟合到一组点。但我希望每个点都根据该点的精度承载特定的权重。

我的数据是:

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

所以我希望直线更适合精度较高的点,而不是适合精度较低的点。

我猜是这样的:

abline(lm(y~x+precision))

虽然这似乎不起作用 非常感谢

然后你需要在 lm 函数中使用 weights 参数来做到这一点:

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 参数的工作原理!

正如你所问的关于可视化这些。

abline() 需要事先调用 plot()。这应该是 x 和 y 的散点图,否则只是线图不包含任何有用的信息。

为了可视化您的回归线是基于加权回归的,您可以为具有相同权重的模型放入另一条线and/or使点大小取决于精度。

下面是一个简单的例子:

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' (https://en.wikipedia.org/wiki/Ebbinghaus_illusion)