У меня следующий вопрос: допустим, я имею дело с этой простой моделью:
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
Значит, различия очень малы, но в чем причина их существования?