首页 > 解决方案 > 利用帽子值计数与自己计数

问题描述

我有以下问题:假设我正在处理这个简单的模型:

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(model) 的值几乎相等......但不相等。

我定义了向量,它将计算它们之间的差异以获得:

> 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

所以差异很小,但它们存在的原因是什么?

标签: rlinear-regression

解决方案


推荐阅读