很多时候,我们需要计算形如X’X的逆(即X' %*% X)。这很容易实现,例如:
> x=matrix(rnorm(9),ncol=3,nrow=3)
> x
[,1] [,2] [,3]
[1,] -0.1806586 -0.76340512 0.002652331
[2,] -1.8018584 0.04467943 1.416332187
[3,] 1.2785359 -1.31653513 0.180653002
> solve(crossprod(x))
[,1] [,2] [,3]
[1,] 1.2181837 0.9664576 1.470940
[2,] 0.9664576 1.2010110 1.204599
[3,] 1.4709402 1.2045986 2.269921
R中的strucchange包中的函数solveCrossprod()也可完成:
> install.packages("strucchange")
> library("strucchange")
参数
> args(solveCrossprod)
function (X, method = c("qr", "chol", "solve"))
NULL
> solveCrossprod(x,method=”qr”)
[,1] [,2] [,3]
[1,] 1.2181837 0.9664576 1.470940
[2,] 0.9664576 1.2010110 1.204599
[3,] 1.4709402 1.2045986 2.269921
> solveCrossprod(x,method=”chol”)
[,1] [,2] [,3]
[1,] 1.2181837 0.9664576 1.470940
[2,] 0.9664576 1.2010110 1.204599
[3,] 1.4709402 1.2045986 2.269921
> solveCrossprod(x,method=”solve”)
[,1] [,2] [,3]
[1,] 1.2181837 0.9664576 1.470940
[2,] 0.9664576 1.2010110 1.204599
[3,] 1.4709402 1.2045986 2.269921
[参考]
1. > help("solveCrossprod")
solveCrossprod package:strucchange R Documentation
Inversion of X'X
Description:
Computes the inverse of the cross-product of a matrix X.
Usage:
solveCrossprod(X, method = c("qr", "chol", "solve"))
Arguments:
X: a matrix, typically a regressor matrix.
method: a string indicating whether the QR decomposition, the
Cholesky decomposition or ‘solve’ should be used.
Details:
Using the Cholesky decomposition of X'X (as computed by
‘crossprod(X)’) is computationally faster and preferred to
‘solve(crossprod(X))’. Using the QR decomposition of X is slower
but should be more accurate.
Value:
a matrix containing the inverse of ‘crossprod(X)’.
Examples:
X <- cbind(1, rnorm(100))
solveCrossprod(X)
solve(crossprod(X))