A blog about data, information and IT, by Mario Alberich

Jul 11
2013

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:

Desglose de la varianza en términos de esperanza matemáticaLo 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?

Tags

gestión documental 10     Recuperación información 11     Linux 7     Usabilidad 5     open source 3     Tagging 12     lógica borrosa 2     fuentes de información 12     Google 6     off-topic 6     spam 2     grafos 6     Web social 11     modelización 12     Productividad 11     buscadores 2     utilidades 17     Profesionales 9     SEO 5     estándares 3     veracidad 3     relevancia 2     lingüística 2     PLN 2     lenguajes documentales 2     apis-mashups 3     reseñas 7     Flash 7     Gráficos estadísticos 13     Publicidad 3     Innovación 5     muestreo estadístico 9     PHP 14     internet 2     testeo 12     desarrollo 3     visualizacion 36     javascript 16     datos abiertos 9     elecciones 2     simulación 5     html5 7     phing 9     ssh 2     seguridad 3     indicadores 2     demografía 3     media 2     algoritmos 7     shell 4     mysql 2     backup 2     big data 6     twitter 2     d3js 11     revealjs 2     metodología 6     data-journalism 6     smartcities 2     NYT 2     privacidad 3     benchmarking 4     recopilaciones 21     magento 5     formacion 2     github 2     HHVM 3     psicología 2     angularjs 3     grep 2     nodejs 5     promises 2     mapreduce 3     crossfilter 2     exploración de datos 2     machine learning 2    

© 2007 and beyond Mario Alberich, licensed under CC-BY-SA unless stated otherwise.