Varianza y desviación típica
La idea detrás de las medidas de dispersión es entender qué tan distintos son los valores entre sí. Intuitivamente sabemos que si todos los valores son iguales, la dispersión o diversidad de los datos es nula. ¿Pero cuando los valores son distintos, cómo medir la diferencia entre estos?
Uno de los enfoques más comúnmente utilizados es tomar una medida de tendencia central como la media y comparar todos los valores con esta. Hay quienes opinan (incluyéndome) que no tiene sentido reportar una medida de tendencia central sin acompañarla de al menos una medida de dispersión apropiada. Pero primero necesitamos que más gente entienda lo que son las medidas de dispersión ¡Tenemos tarea!
… necesitamos que más gente entienda lo que son las medidas de dispersión ¡Tenemos tarea!
Como siempre, vamos a utilizar el tidyverse
y vamos a limpiar los nombres de iris
para seguir la guía de estilo de código del tidyverse.
library(dplyr)
library(janitor)
iris <- as_tibble(iris) %>% clean_names()
Primer intento: promediar los desvíos
Un enfoque intuitivo es promediar las diferencias de cada valor con la media:
\[ \frac{\sum_{i=1}^{n}(x_i-\bar{X})}{n} \]
A la expresión \((x_i-\bar{X})\) se le conoce como desvío. Es decir, podemos leer la fórmula como la suma de los desvíos dividida entre el tamaño de la muestra.
El problema con esto es que siempre es cero (y en la universidad lo vas a tener que demostrar… ¡SUSTO!).
iris %>%
summarise(
sepal_length_md = mean(sepal_length - mean(sepal_length))
)
## # A tibble: 1 x 1
## sepal_length_md
## <dbl>
## 1 -3.67e-16
Desviación media
Tenemos que solucionar el problema del cero. Lo que sucede es que los desvíos positivos (cuando \(x_i > \bar{X}\)) se cancelan con los desvíos negativos (cuando \(x_i < \bar{X}\)). Una solución lógica es hacer que todos sean positivos y entonces promediamos. Esto lo logramos utilizando el valor absoluto de los desvíos. A esta medida la llamamos desviación media:
\[ DM = \frac{\sum_{i=1}^{n}|x_i-\bar{X}|}{n} \]
Entre las funciones por defecto de R, no hay una con la que podamos calcular directamente la Desviación Media, pero eso no impide que hagamos el cálculo:
iris %>%
mutate(
deviations = sepal_length - mean(sepal_length),
absolute_deviations = abs(deviations)
) %>%
summarise(
sepal_length_md = mean(absolute_deviations)
)
## # A tibble: 1 x 1
## sepal_length_md
## <dbl>
## 1 0.688
Es decir, en promedio los valores están a 0.688 unidades de la media.
Entonces ¿fin de la historia, no? Pues desafortunadamente, no. Aunque la desviación media tiene la ventaja de ser fácilmente interpretable, el valor absoluto es una función con una característica matemática que la hace no tan deseable. Esta propiedad hace que sea difícil construir más métodos sobre la Desviación Media, y por esto su uso no es tan frecuente.
Para los curiosos, estudiosos o que sepan algo de cálculo diferencial, el problema del valor absoluto es que no es diferenciable en todo su dominio. Específicamente, no es diferenciable el cero.
Varianza
Una alternativa a tomar el valor absoluto es elevar los desvíos al cuadrado. El resultado es lo que se conoce como Varianza y se representa con \(S^2\)
\[ S^2=\frac{\sum_{i=1}^{n}(x_i-\bar{X})^2}{n} \]
Con la varianza ganamos en propiedades matemáticas pero es menos interpretable ¿Por qué es más utilizada que la desviación media? En primer lugar, porque hay un montón de métodos estadísticos más avanzados que utilizan la suma de los desvíos al cuadrado, así que se prefiere utilizar siempre el mismo principio para medir la dispersión. En segundo lugar pues simplemente por tradición o convención.
Asombrosamente, en R tampoco hay una función para calcular la varianza. Esto se debe a que se prefiere cambiar el denominador por \(n-1\) en lugar de \(n\), nuevamente por propiedades matemáticas. A este estadístico se le conoce como Cuasi-varianza y se denota con \(\hat{S}^2\):
\[ \hat{S}^2=\frac{\sum_{i=1}^{n}(x_i-\bar{X})^2}{n-1} \]
Nuevamente, para los curiosos y estudiantes cerebritos, la Cuasi-varianza es un estimador insesgado. Este concepto viene de lo que se conoce como estadística matemática o inferencia estadística. Se dice que un estimador es insesgado si su esperanza matemática es igual al parámetro que estima.
El símbolo \(\hat{}\) se lee circunflejo, techo o sombrero ¿Cuál es la manera correcta? Mi opinión es que cualquiera, siempre y cuando te entiendan, aunque circunflejo es probablemente la que más sentido tiene desde el punto de vista lingüístico.
Cálculo en R
En R podemos calcular la cuasi-varianza utilizando la función var
. Esta función también tiene un argumento na.rm
para eliminar los valores nulos antes de hacer el cálculo, como con la media.
iris %>%
summarize(
sepal_length_var = var(sepal_length)
)
## # A tibble: 1 x 1
## sepal_length_var
## <dbl>
## 1 0.686
Propiedades de la varianza y la cuasi-varianza
Dada una muestra de tamaño \(n\), \(x_1, x_2, ..., x_n\), se puede demostrar que la varianza, \(S_X^2\) cumple con las siguientes propiedades:
- Si a una variable la multiplicamos por una constante, tendremos que multiplicar la varianza (o la cuasi-varianza) por esta constante al cuadrado. Por otro lado, si le sumamos una constante, esto no afectará la varianza. Formalmente, si aplicamos la transformación lineal \(y_i=ax_i+b\) y calculamos la varianza, obtendremos el resultado \(S^2_Y=a^2S_X\).
iris %>%
mutate(
petal_length_plus_one = petal_length + 1,
petal_length_double = petal_length * 2
) %>%
summarise(
petal_length_var = var(petal_length),
petal_length_plus_one_var = var(petal_length_plus_one),
petal_length_double_var = var(petal_length_double),
)
## # A tibble: 1 x 3
## petal_length_var petal_length_plus_one_var petal_length_double_var
## <dbl> <dbl> <dbl>
## 1 3.12 3.12 12.5
- La menor suma de desvíos al cuadrado que podemos obtener es cuando la calculamos con respecto de la media. Formalmente:
\[ \min_{\alpha}\sum_{i=1}^{n}(x_i-\alpha)^2 = \sum_{i=1}^{n}(x_i-\bar{X})^2 \]
Esto nos da un criterio objetivo para elegir cuál medida de tendencia central utilizamos para calcular la suma de desvíos al cuadrado. Vamos a graficar la suma de desvíos al cuadrado para distintos valores de \(\alpha\) y comprobar gráficamente que esta suma es mínima si \(\alpha = \bar{X}\).
library(purrr)
library(ggplot2)
mean_petal_length = mean(iris$petal_length)
min_petal_length = mean_petal_length - 3
max_petal_length = mean_petal_length + 3
alpha_values <- seq(min_petal_length, max_petal_length, length.out = 100)
alpha_values <- c(mean(iris$petal_length), alpha_values)
ss <- map_df(alpha_values, function(.alpha) {
iris %>%
summarise(
ss = sum((petal_length - .alpha) ^ 2)
) %>%
mutate(alpha = .alpha)
})
ggplot(ss, aes(x = alpha, y = ss)) +
geom_line() +
geom_vline(aes(colour = "mean", xintercept = mean_petal_length),
linetype = "dashed") +
ggtitle("Suma de desvíos al cuadrado con respecto a distintos valores") +
labs(y = "Suma de desvíos al cuadrado", colour = "", x = expression(alpha))
- La varianza de una constante es 0
constant <- c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
var(constant)
## [1] 0
Pregunta
Desviación típica
La varianza y cuasi-varianza tienen el problema de estar expresadas en las mismas unidades de la variable original ¡pero al cuadrado! Por ejemplo, sepal_length
está medida en centímetros, por lo tanto, la varianza que acabamos de calcular está en centímetros cuadrados. Una solución es sacar la raíz cuadrada. A estos nuevos estadísticos se les conoce como Desviación típica o Cuasi-desviación típica, según sea el caso.
Desviación típica \[ S=\sqrt{S^2} \]
Cuasi-desviación típica \[ \hat{S}=\sqrt{\hat{S}^2} \]
En R, utilizamos sd
para calcular la cuasi-desviación típica No hay una función para calcular la desviación típica por los mismos motivos que no hay una para calcular la varianza.
iris %>%
summarize(
sepal_length_sd = sd(sepal_length)
)
## # A tibble: 1 x 1
## sepal_length_sd
## <dbl>
## 1 0.828
En la literatura en castellano también se substituye típica por estandar. Este tema con los nombres es muy habitual en estadística y tiene que ver en parte con que mucha de la literatura es traducida de otros idiomas como inglés, francés, ruso, italiano, etc.
Propiedades de la desviación típica
Dada una muestra de tamaño \(n\), \(x_1, x_2, ..., x_n\), se puede demostrar que la desviación típica, \(S_X\) cumple con las siguientes propiedades:
Si a una variable la multiplicamos por una constante, tendremos que multiplicar la desviación típica (o la cuasi-desviación) por esta misma constante. Por otro lado, si le sumamos una constante, esto no afectará la desviación típica. Formalmente, si aplicamos la transformación lineal \(y_i=ax_i+b\) y calculamos la varianza, obtendremos el resultado \(S_Y=aS_X\).
La desviación típica de una constante es 0
Pregunta
¿Cómo comprobarías estas propiedades en R? Para esta pregunta no te damos la respuesta. Simplemente comprueba que el resultado que te da R es lo que dicen las propiedades de la desviación.
¿Cómo se ve la dispersión?
Vamos a comparar la desviación típica de sepal_length
para las distintas species
:
iris %>%
group_by(species) %>%
summarise(sepal_length_sd = sd(sepal_length))
## # A tibble: 3 x 2
## species sepal_length_sd
## <fct> <dbl>
## 1 setosa 0.352
## 2 versicolor 0.516
## 3 virginica 0.636
Según este resultado, las flores setosa son más parecidas entre sí que las otras dos especies porque tienen una cuasi-desviación típica menor. Esto se puede apreciar al graficar el histograma para cada especie:
library(ggplot2)
iris %>%
ggplot() +
geom_histogram(aes(x = sepal_length), binwidth = 0.25, colour = 'lightgrey') +
facet_grid(species ~ .)
Vemos cómo los valores de sepal_length
de las setosa están más concentrados en el medio del histograma, mientras que en el otro extremo tenemos que para las virginica, los valores están más dispersos.
Conclusión
Las medidas de dispersión no son muy populares fuera de las clases de estadística por la complejidad de su interpretación, pero son necesarias al tratar de resumir las características de un conjunto de datos en unos pocos números. Por regla general, acompaña cualquier medida de tendencia central con una o más medidas de dispersión y con gráficos Hay otras medidas de dispersión que vale la pena explorar como el coeficiente de variación, el rango intercuartílico o el coeficiente de Gini, pero las dejaremos para otro post para no complicar este más de lo necesario.