Recientemente publiqué esta pregunta en la lista de correo de r-help pero no obtuve ninguna respuesta, así que pensé en publicarla aquí también y ver si había alguna sugerencia.Cálculo eficiente de la desviación estándar acumulada de la matriz en r
Estoy tratando de calcular la desviación estándar acumulativa de una matriz. Quiero una función que acepte una matriz y devuelva una matriz del mismo tamaño donde la celda de salida (i, j) se establece en la desviación estándar de la columna de entrada j entre las filas 1 ei. Las NA deben ignorarse, a menos que la celda (i, j) de la matriz de entrada en sí sea NA, en cuyo caso la celda (i, j) de la matriz de salida también debe ser NA.
No pude encontrar una función incorporada, así que implementé el siguiente código. Desafortunadamente, esto utiliza un bucle que termina siendo algo lento para matrices grandes. ¿Hay una función incorporada más rápida o alguien puede sugerir un mejor enfoque?
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
}
Gracias.
Muy agradable Marek, esto hace que mi análisis sea mucho más eficiente. FYI, no parece que hayas usado la variable n <- nrow (mat) en la función. – Abiel
Esto es residuo de una de las primeras versiones;). – Marek
Ten cuidado con este algoritmo; @Marek tiene una buena idea, pero usar esta ecuación para la varianza puede dar resultados graciosos cuando la SD es pequeña en relación con la media. Wikipedia tiene [mejores algoritmos] (http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance); también vea mi respuesta [aquí] (http://stackoverflow.com/questions/7474943/surprisingly-slow-standard-deviation-in-r/7475664#7475664). – Aaron