Un problema comune nelle statistiche è il calcolo dell'inverso della radice quadrata di una matrice definita positiva simmetrica. Quale sarebbe il modo più efficiente per calcolare questo?
Mi sono imbattuto in alcuni articoli letterari (che non ho ancora letto) e in alcuni codici R casuali qui , che riprodurrò qui per comodità
# 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))
}
Non sono del tutto sicuro di aver compreso la linea d = (d+abs(d))/2
. Esiste un modo più efficiente di calcolare l'inverso della radice quadrata della matrice? La eigen
funzione R chiama LAPACK .
d[d<0] = 0
, che è più espressiva.