很多时候,我们需要计算形如X’X的逆(即X' %*% X)。这很容易实现,例如: > x=matrix(rnorm(9),ncol=3,nrow=3)
[1,] -0.1806586 -0.76340512 0.002652331
[2,] -1.8018584 0.04467943 1.416332187
[3,] 1.2785359 -1.31653513 0.180653002
[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")
function (X, method = c("qr", "chol", "solve"))
> solveCrossprod(x,method=”qr”)
[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,] 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,] 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 DocumentationInversion of X'XDescription: 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))