我正在尝试扩展lwr()包的功能McSptial,它适合将加权回归作为非参数估计。在函数的核心中lwr(),它使用以下方法反转矩阵solve(),它使用QR 分解而不是 QR 分解来我想更改它,但无法弄清楚如何从 QR 分解中获取帽子矩阵(或其他导数)。
有数据:
set.seed(0); xmat <- matrix(rnorm(500), nrow=50) ## model matrix
y <- rowSums(rep(2:11,each=50)*xmat) ## arbitrary values to let `lm.wfit` work
w <- runif(50, 1, 2) ## weights
Run Code Online (Sandbox Code Playgroud)
该lwr()功能如下:
xmat2 <- w * xmat
xx <- solve(crossprod(xmat, xmat2))
xmat1 <- tcrossprod(xx, xmat2)
vmat <- tcrossprod(xmat1)
Run Code Online (Sandbox Code Playgroud)
我需要的值,例如:
sum((xmat[1,] %*% xmat1)^2)
sqrt(diag(vmat))
Run Code Online (Sandbox Code Playgroud)
目前我使用reg <- lm.wfit(x=xmat, y=y, w=w)但无法设法恢复在我看来是帽子矩阵(xmat1)的东西。
我需要以下对角线:
diag(X %*% solve(A) %*% t(X))
Run Code Online (Sandbox Code Playgroud)
其中A是满秩矩阵,X是矩形矩阵.这两个A和X稀疏.
我知道发现矩阵的逆是坏的,除非你真的需要它.但是,我无法看到如何重写公式,以便用两个参数solve(A)替换solve,这样线性系统就可以在没有显式反转的情况下得到解决.那可能吗?