Плечо подсчитывает по шляпным значениям против подсчета по себе - PullRequest
1 голос
/ 27 апреля 2020

У меня следующий вопрос: допустим, я имею дело с этой простой моделью:

x=rnorm(10)
z=runif(10)
y=c()
y=x-z
model=lm(y~x)

И я хочу посчитать рычаги, по себе и по шляпным значениям так:

X=model.matrix(model)
H = X %*% solve(t(X) %*% X) %*% t(X)
diag(H)   #leverages counted by myself
hatvalues(model)   #leverages counted by implemented function
diag(H)==hatvalues(model)

И у меня проблема с самой последней строкой, потому что значения векторов diag (H) и hatvalues ​​(модель) почти равны ... но не равны.

Я определяю вектор, который будет считать различия между ними, чтобы получить:

> p=c()
> for (i in 1:10){
+   p[i]=abs(diag(H)[i]-hatvalues(model)[i])
+ }
> p
 [1] 2.775558e-17 1.387779e-17 5.551115e-17 0.000000e+00 1.665335e-16
 [6] 0.000000e+00 2.775558e-17 2.775558e-17 1.387779e-17 2.775558e-17

Значит, различия очень малы, но в чем причина их существования?

...