Recentemente ho postato questa domanda sulla mailing list di r-help ma non ho ricevuto risposte, quindi ho pensato di postarla anche qui e vedere se c'erano suggerimenti.Calcolo efficiente della deviazione standard cumulativa della matrice in
Sto tentando di calcolare la deviazione standard cumulativa di una matrice. Voglio una funzione che accetta una matrice e restituisce una matrice della stessa dimensione in cui la cella di output (i, j) è impostata sulla deviazione standard della colonna di input j tra le righe 1 e i. Le NA dovrebbero essere ignorate, a meno che la cellula (i, j) della matrice di input stessa sia NA, nel qual caso anche la cella (i, j) della matrice di output dovrebbe essere NA.
Impossibile trovare una funzione incorporata, quindi ho implementato il seguente codice. Sfortunatamente, questo usa un ciclo che finisce per essere un po 'lento per le matrici di grandi dimensioni. C'è una funzione incorporata più veloce o qualcuno può suggerire un approccio migliore?
cumsd <- function(mat)
{
retval <- mat*NA
for (i in 2:nrow(mat)) retval[i,] <- sd(mat[1:i,], na.rm=T)
retval[is.na(mat)] <- NA
retval
}
Grazie.
Marek molto carino, questo rende la mia analisi molto più efficiente. Per tua informazione, non sembra che tu abbia usato la variabile n <- nrow (mat) nella funzione. – Abiel
Questo è un residuo di una delle prime versioni;). – Marek
Attenzione con questo algoritmo; @Marek ha una buona idea ma usare questa equazione per la varianza può dare risultati divertenti quando il sd è piccolo rispetto alla media. Wikipedia ha [algoritmi migliori] (http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance); vedi anche la mia risposta [qui] (http://stackoverflow.com/questions/7474943/surprisingly-slow-standard-deviation-in-r/7475664#7475664). – Aaron