Затем вам нужно использовать 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
!