Cálculo de la varianza y la desviación estándar en Python

La varianza y la desviación estándar miden la dispersión de un conjunto de datos. En este tutorial, aprenderemos cómo funcionan estas funciones y cómo codificarlas en Python.

Introducción

Dos medidas estadísticas estrechamente relacionadas nos permitirán hacernos una idea de la dispersión o dispersión de nuestros datos. La primera medida es la varianza, que mide qué tan lejos de su media están las observaciones individuales en nuestros datos. El segundo es la desviación estándar, que es la raíz cuadrada de la varianza y mide la cantidad de variación o dispersión de un conjunto de datos.

En este tutorial, aprenderemos a calcular la varianza y la desviación estándar en Python. Primero codificaremos una función de Python para cada medida y luego, aprenderemos a usar el módulo estadísticas de Python para realizar la misma tarea rápidamente.

Con este conocimiento, podremos echar un primer vistazo a nuestros conjuntos de datos y tener una idea rápida de la dispersión general de nuestros datos.

Cálculo de la varianza

En estadística, la varianza es una medida de qué tan lejos están los valores individuales (numéricos) en un conjunto de datos del [valor medio o medio](/calcular-la-mediana-media-y-la-moda- en-.python/). La varianza se usa a menudo para cuantificar la propagación o la dispersión. La dispersión es una característica de una muestra o población que describe cuánto variabilidad que hay en ella.

Una varianza alta nos dice que los valores en nuestro conjunto de datos están lejos de su media. Por lo tanto, nuestros datos tendrán altos niveles de variabilidad. Por otro lado, una varianza baja nos dice que los valores están bastante cerca de la media. En este caso, los datos tendrán bajos niveles de variabilidad.

Para calcular la varianza en un conjunto de datos, primero debemos encontrar la diferencia entre cada valor individual y la media. La varianza es el promedio de los cuadrados de esas diferencias. Podemos expresar la varianza con la siguiente expresión matemática:

$$
\sigma^2 = \frac{1}{n}{\sum_{i=0}^{n-1}{(x_i - \mu)^2}}
$$

En esta ecuación, x~i~ representa valores u observaciones individuales en un conjunto de datos. μ representa la media o el promedio de esos valores. n es el número de valores en el conjunto de datos.

El término x~i~ - μ se denomina desviación de la media. Entonces, la varianza es la media de las desviaciones cuadráticas. Es por eso que lo denotamos como σ^2^.

Digamos que tenemos un conjunto de datos [3, 5, 2, 7, 1, 3]. Para encontrar su varianza, necesitamos calcular la media que es:

$$
(3 + 5 + 2 + 7 + 1 + 3) / 6 = 3,5
$$

Luego, necesitamos calcular la suma de la desviación cuadrada de la media de todas las observaciones. Así es cómo:

$$
(3 - 3,5)^2 + (5 - 3,5)^2 + (2 - 3,5)^2 + (7 - 3,5)^2 + (1 - 3,5)^2 + (3 - 3,5) ^2 = 23,5
$$

Para encontrar la varianza, solo necesitamos dividir este resultado por el número de observaciones como esta:

$$
23,5 / 6 = 3,916666667
$$

Eso es todo. La varianza de nuestros datos es 3.916666667. La varianza es difícil de entender e interpretar, particularmente lo extrañas que son sus unidades.

Por ejemplo, si las observaciones en nuestro conjunto de datos se miden en libras, la varianza se medirá en libras cuadradas. Entonces, podemos decir que las observaciones son, en promedio, 3.916666667 libras cuadradas lejos de la media de 3.5. Afortunadamente, la desviación estándar soluciona este problema, pero ese es un tema de una sección posterior.

Si aplicamos el concepto de varianza a un conjunto de datos, podemos distinguir entre la varianza de la muestra y la varianza de la población. La varianza de la población es la varianza que vimos antes y podemos calcularla usando los datos de la población completa y la expresión para σ^2^.

La varianza de la muestra se denota como S^2^ y podemos calcularla usando una muestra de una población dada y la siguiente expresión:

$$
S^2 = \frac{1}{n}{\sum_{i=0}^{n-1}{(x_i - X)^2}}
$$

Esta expresión es bastante similar a la expresión para calcular σ^2^ pero en este caso, x~i~ representa observaciones individuales en la muestra y X es la media de la muestra.

S^2^ se usa comúnmente para estimar la varianza de una población (σ^2^) usando una muestra de datos. Sin embargo, S^2^ subestima sistemáticamente la varianza de la población. Por esa razón, se le conoce como estimador sesgado de la varianza de la población.

Cuando tenemos una muestra grande, S^2^ puede ser un estimador adecuado de σ^2^. Para muestras pequeñas, tiende a ser demasiado bajo. Afortunadamente, hay otra estadística simple que podemos usar para estimar mejor σ^2^. Aquí está su ecuación:

$$
S^2_{n-1} = \frac{1}{n-1}{\sum_{i=0}^{n-1}{(x_i - X)^2 }}
$$

Esto se parece bastante a la expresión anterior. Parece la desviación al cuadrado de la media, pero en este caso, dividimos por n - 1 en lugar de por n. Esto se llama Corrección de Bessel. La corrección de Bessel ilustra que S^2^~n-1~ es el mejor estimador imparcial para la varianza de la población. Entonces, en la práctica, usaremos esta ecuación para estimar la varianza de una población usando una muestra de datos. Tenga en cuenta que S^2^~n-1~ también se conoce como la varianza con n - 1 grados de libertad.

Ahora que hemos aprendido cómo calcular la varianza usando su expresión matemática, es hora de entrar en acción y calcular la varianza usando Python.

Codificación de una función de variación () en Python {#codificación de una función de variación en Python}

Para calcular la varianza, codificaremos una función de Python llamada varianza(). Esta función tomará algunos datos y devolverá su varianza. Dentro de variance(), vamos a calcular la media de los datos y las desviaciones cuadradas de la media. Finalmente, vamos a calcular la varianza encontrando el promedio de las desviaciones.

Aquí hay una posible implementación para variance():

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
>>> def variance(data):
...     # Number of observations
...     n = len(data)
...     # Mean of the data
...     mean = sum(data) / n
...     # Square deviations
...     deviations = [(x - mean) ** 2 for x in data]
...     # Variance
...     variance = sum(deviations) / n
...     return variance
...

>>> variance([4, 8, 6, 5, 3, 2, 8, 9, 2, 5])
5.76

Primero calculamos el número de observaciones (n) en nuestros datos usando la función integrada largo(). Luego, calculamos la media de los datos, dividiendo la suma total de las observaciones por el número de observaciones.

El siguiente paso es calcular las desviaciones cuadradas de la media. Para hacer eso, usamos una lista de comprensión que crea una lista de desviaciones cuadradas usando la expresión (x - mean) ** 2 donde x representa cada observación en nuestros datos.

Finalmente, calculamos la varianza sumando las desviaciones y dividiéndolas por el número de observaciones n.

En este caso, variance() calculará la varianza de la población porque estamos usando n en lugar de n - 1 para calcular la media de las desviaciones. Si estamos trabajando con una muestra y queremos estimar la varianza de la población, entonces necesitaremos actualizar la expresión varianza = suma (desviaciones) / n a varianza = suma (desviaciones) / ( n - 1).

Podemos refactorizar nuestra función para hacerla más concisa y eficiente. Aquí hay un ejemplo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
>>> def variance(data, ddof=0):
...     n = len(data)
...     mean = sum(data) / n
...     return sum((x - mean) ** 2 for x in data) / (n - ddof)
...

>>> variance([4, 8, 6, 5, 3, 2, 8, 9, 2, 5])
5.76

>>> variance([4, 8, 6, 5, 3, 2, 8, 9, 2, 5], ddof=1)
6.4

En este caso, eliminamos algunos pasos intermedios y variables temporales como desviaciones y varianza. También convertimos la comprensión de lista en un generador de expresión, que es mucho más eficiente en términos de consumo de memoria.

Tenga en cuenta que esta implementación toma un segundo argumento llamado ddof que predeterminados a 0. Este argumento nos permite establecer los grados de libertad que queremos usar al calcular la varianza. Por ejemplo, ddof=0 nos permitirá calcular la varianza de una población. Mientras tanto, ddof=1 nos permitirá estimar la varianza de la población usando una muestra de datos.

Usar pvariance() y variance() de Python

Python incluye un módulo estándar llamado Estadísticas que proporciona algunas funciones para calcular estadísticas básicas de datos. En este caso, las estadísticas.pvariance() y [estadísticas.varianza()](https://docs. python.org/3/library/statistics.html#statistics.variance) son las funciones que podemos utilizar para calcular la varianza de una población y de una muestra respectivamente.

Así es como funciona pvariance() de Python:

1
2
3
4
>>> import statistics

>>> statistics.pvariance([4, 8, 6, 5, 3, 2, 8, 9, 2, 5])
5.760000000000001

Solo necesitamos importar el módulo statistics y luego llamar a pvariance() con nuestros datos como argumento. Eso devolverá la varianza de la población.

Por otro lado, podemos usar variance() de Python para calcular la varianza de una muestra y usarla para estimar la varianza de toda la población. Eso es porque variance() usa n - 1 en lugar de n para calcular la varianza. Así es como funciona:

1
2
3
4
>>> import statistics

>>> statistics.variance([4, 8, 6, 5, 3, 2, 8, 9, 2, 5])
6.4

Esta es la varianza de la muestra S^2^. Por lo tanto, el resultado de usar variance() de Python debe ser una estimación imparcial de la varianza de la población σ^2^, siempre que las observaciones sean representativas de toda la población.

Cálculo de la desviación estándar

La desviación estándar mide la cantidad de variación o dispersión de un conjunto de valores numéricos. La desviación estándar es la raíz cuadrada de la varianza σ^2^ y se denota como σ. Entonces, si queremos calcular la desviación estándar, todo lo que tenemos que hacer es sacar la raíz cuadrada de la varianza de la siguiente manera:

$$
\sigma = \sqrt{\sigma^2}
$$

Nuevamente, debemos distinguir entre la desviación estándar de la población, que es la raíz cuadrada de la varianza de la población (σ^2^) y la desviación estándar de la muestra, que es la raíz cuadrada de la varianza de la muestra (S ^2^). Indicaremos la desviación estándar de la muestra como S:

$$
S = \raíz cuadrada{S^2}
$$

Los valores bajos de desviación estándar nos dicen que los valores individuales están más cerca de la media. Los valores altos, por otro lado, nos dicen que las observaciones individuales están muy lejos de la media de los datos.

Los valores que están dentro de una desviación estándar de la media pueden considerarse bastante típicos, mientras que los valores que están a tres o más desviaciones estándar de la media pueden considerarse mucho más atípicos. También se conocen como valores atípicos.

A diferencia de la varianza, la desviación estándar se expresará en las mismas unidades de las observaciones originales. Por lo tanto, la desviación estándar es una estadística más significativa y fácil de entender. Retomando nuestro ejemplo, si las observaciones se expresan en libras, entonces la desviación estándar también se expresará en libras.

Si estamos tratando de estimar la desviación estándar de la población usando una muestra de datos, entonces estaremos mejor servidos usando n - 1 grados de libertad. Aquí hay una expresión matemática que normalmente usamos para estimar la varianza de la población: $$
\sigma_x = \sqrt\frac{\sum_{i=0}^{n-1}{(x_i - \mu_x)^2}}{n-1}
$$
Tenga en cuenta que esta es la raíz cuadrada de la varianza de la muestra con n - 1 grados de libertad. Esto es equivalente a decir:
$$
S_{n-1} = \sqrt{S^2_{n-1}}
$$
Una vez que sabemos cómo calcular la desviación estándar usando su expresión matemática, podemos ver cómo podemos calcular esta estadística usando Python.

Codificación de una función stdev() en Python

Para calcular la desviación estándar de un conjunto de datos, nos basaremos en nuestra función variance(). También vamos a usar la función sqrt() del [módulo de matemáticas](/la-biblioteca -matematica-de-python/) de la biblioteca estándar de Python. Aquí hay una función llamada stdev() que toma los datos de una población y devuelve su desviación estándar:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
>>> import math

>>> # We relay on our previous implementation for the variance
>>> def variance(data, ddof=0):
...     n = len(data)
...     mean = sum(data) / n
...     return sum((x - mean) ** 2 for x in data) / (n - ddof)
...

>>> def stdev(data):
...     var = variance(data)
...     std_dev = math.sqrt(var)
...     return std_dev

>>> stdev([4, 8, 6, 5, 3, 2, 8, 9, 2, 5])
2.4

Nuestra función stdev() toma algunos datos y devuelve la desviación estándar de la población. Para hacer eso, confiamos en nuestra función variance() anterior para calcular la varianza y luego usamos math.sqrt() para sacar la raíz cuadrada de la varianza.

Si queremos usar stdev() para estimar la desviación estándar de la población usando una muestra de datos, entonces solo necesitamos calcular la varianza con n - 1 grados de libertad como vimos antes. Aquí hay un stdev() más genérico que nos permite pasar grados de libertad también:

1
2
3
4
5
6
7
8
>>> def stdev(data, ddof=0):
...     return math.sqrt(variance(data, ddof))

>>> stdev([4, 8, 6, 5, 3, 2, 8, 9, 2, 5])
2.4

>>> stdev([4, 8, 6, 5, 3, 2, 8, 9, 2, 5], ddof=1)
2.5298221281347035

Con esta nueva implementación, podemos usar ddof=0 para calcular la desviación estándar de una población, o podemos usar ddof=1 para estimar la desviación estándar de una población usando una muestra de datos.

Usando pstdev() y stdev() de Python

El módulo statistics de Python también proporciona funciones para calcular la desviación estándar. Podemos encontrar pstdev() y [desvst()](https://docs.python.org/3/ biblioteca/estadísticas.html#estadísticas.stdev). La primera función toma los datos de una población completa y devuelve su desviación estándar. La segunda función toma datos de una muestra y devuelve una estimación de la desviación estándar de la población.

Así es como funcionan estas funciones:

1
2
3
4
5
6
7
>>> import statistics

>>> statistics.pstdev([4, 8, 6, 5, 3, 2, 8, 9, 2, 5])
2.4000000000000004

>>> statistics.stdev([4, 8, 6, 5, 3, 2, 8, 9, 2, 5])
2.5298221281347035

Primero necesitamos importar el módulo estadísticas. Luego, podemos llamar a statistics.pstdev() con datos de una población para obtener su desviación estándar.

Si no tenemos los datos de toda la población, que es un escenario común, entonces podemos usar una muestra de datos y usar statistics.stdev() para estimar la desviación estándar de la población.

Conclusión

La varianza y la desviación estándar se usan comúnmente para medir la variabilidad o dispersión de un conjunto de datos. Estas medidas estadísticas complementan el uso de la media, la mediana y la moda cuando estamos describiendo nuestros datos.

En este tutorial, hemos aprendido cómo calcular la varianza y la desviación estándar de un conjunto de datos usando Python. Primero aprendimos, paso a paso, cómo crear nuestras propias funciones para calcularlas, y luego aprendimos cómo usar el módulo Python statistics como una forma rápida de abordar su cálculo.

Licensed under CC BY-NC-SA 4.0