Um problema comum em estatística é calcular a raiz quadrada inversa de uma matriz definida positiva simétrica. Qual seria a maneira mais eficiente de calcular isso?
Encontrei alguma literatura (que ainda não li) e algum código R incidental aqui , que reproduzirei aqui por conveniência
# function to compute the inverse square root of a matrix
fnMatSqrtInverse = function(mA) {
ei = eigen(mA)
d = ei$values
d = (d+abs(d))/2
d2 = 1/sqrt(d)
d2[d == 0] = 0
return(ei$vectors %*% diag(d2) %*% t(ei$vectors))
}
Não tenho muita certeza de entender a linha d = (d+abs(d))/2
. Existe uma maneira mais eficiente de calcular a raiz quadrada da matriz inversa? A eigen
função R chama LAPACK .
d[d<0] = 0
, que é mais expressiva.