Calcular la variancia sin recorrer dos veces los datos
El cálculo de la variancia (o varianza, según la literatura) implica a la media. Dado que para calcular la media necesitamos todos los datos (bueno no siempre, pero en este caso sí), el algoritmo más básico nos obligaría a recorrer dos veces la muestra de datos:
- Recorremos la primera vez sumando los valores, y acabamos calculando la media.
- Recorremos una segunda vez la muestra, y para cada valor calculamos el cuadrado de su distancia respecto a la media.
- Finalizamos dividiendo el segundo resultado entre el número de datos de la muestra.
Este proceso es harto costoso en términos de tiempo. Recorremos dos veces una muestra (que pueden ser miles de datos) y eso ya es motivo para pensar si podemos reducirlo.
Por suerte, la varianza se puede exponer, en términos de esperanza matemática, de otra forma. Extraído directamente de Wikipedia:
Lo que está indicando esta fórmula es que podemos separar el cálculo de la media del de sus valores al cuadrado.
¿Esto mejora lo anterior? Sí, porque al poderlo diferenciar, lo podemos paralelizar, y por lo que podemos utilizar un solo recorrido por los datos para calcular la varianza.
Algoritmo de cálculo
- Recorremos los datos, generando dos variables: X y M.
- Para cada valor de los datos
- sumamos el valor a M.
- Elevamos el valor al cuadrado y lo sumamos a X.
- Al finalizar el cálculo dividimos ambos valores por el número de datos de la muestra.
- restamos X-M, y tenemos la varianza.
Calcular la varianza como flujo
Relacionado con el post sobre el algoritmo de cálculo de la media, y viendo la optimización anterior, ¿Crees que es posible calcular la varianza al vuelo?