Un problema común en estadística es calcular la inversa de la raíz cuadrada de una matriz simétrica positiva definida. ¿Cuál sería la forma más eficiente de calcular esto?
Encontré algo de literatura (que aún no he leído) y algún código R incidental aquí , que reproduciré aquí por conveniencia
# 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))
}
No estoy completamente seguro de entender la línea d = (d+abs(d))/2
. ¿Existe una forma más eficiente de calcular la matriz inversa de raíz cuadrada? La eigen
función R llama LAPACK .
d[d<0] = 0
, que es más expresiva.