qinv {INLA} | R Documentation

## Computes (parts of) the inverse of a SPD sparse matrix

### Description

This routine use the GMRFLib implementation which compute parts of the inverse of a SPD sparse matrix. The diagonal and values for the neighbours in the inverse, are provided.

### Usage

    inla.qinv(Q, constr, reordering = INLA::inla.reorderings(), num.threads = NULL)

### Arguments

`Q` | A SPD matrix, either as a (dense) matrix or sparseMatrix.
`constr` | Optional linear constraints; see `?INLA::f` and argument `extraconstr`
`reordering` | The type of reordering algorithm to be used for `TAUCS`; either one of the names listed in `inla.reorderings()` or the output from `inla.qreordering(Q)`. The default is "auto" which try several reordering algorithm and use the best one for this particular matrix.
`num.threads` | Maximum number of threads the `inla`-program will use, or as 'A:B' defining the number threads in the outer (A) and inner (B) layer for nested parallelism.

### Value

`inla.qinv` returns a `sparseMatrix` of type `dgTMatrix` with the diagonal and values for the neigbours in the inverse. Note that the full inverse is NOT provided!

### Author(s)

Havard Rue hrue@r-inla.org

### Examples

     ## dense matrix example
     n = 10
     A = matrix(runif(n^2), n, n)
     Q = A %*% t(A)
     print(mean(abs(inla.qinv(Q) - solve(Q))))

     ## sparse matrix example
     rho = 0.9
     Q = toeplitz(c(1+rho^2, -rho,  rep(0, n-3), -rho)) / (1-rho^2)
     Q = inla.as.dgTMatrix(Q)
     Q.inv = inla.qinv(Q)

     ## compute the marginal variances as a vector from a precision matrix
     marginal.variances = diag(inla.qinv(Q))

     ## read the sparse matrix from a file in the 'i, j, value' format
     filename = tempfile()
     write(t(cbind(Q@i+1L,  Q@j+1L,  Q@x)), ncol=3, file=filename)
     Qinv = inla.qinv(filename)
     unlink(filename)

[Package INLA version 26.08.22 Index]