Una vez organizada la información a través de tablas, el siguiente paso es calcular cierto número de valores característicos que resumen nuestros datos y ayudan a su descripción, ya que también anlizan su distribución en conjunto. Estos valores característicos se calculan a partir de la aplicación de una fórmula matemática.
Estos valores suelen denominarse indistintamente parámetros o estadísticos, pero en realidad no son equivalentes:
Los parámetros se calculan sobre toda la población.
Los estadísticos se calculan sobre una muestra.
Si un estadístico se usa para aproximar un parámetro también se le suele llamar estimador.
Dado que normalmente no es posibles trabajar con toda la población, la expresión habitual asume que trabajamos con estadísticos. Existen diferentes tipos:
De tendencia central o centralidad.
De dispersión.
De forma.
De concentración.
De igualdad.
Iniciaremos esta actividad estableciendo una semilla para asegurar su reproducibilidad.
set.seed(123)
Indican en torno a qué valor (centro) se distribuyen los datos. Son los siguientes:
Media.
Moda
Mediana
Cuando hablamos de la media o promedio, normalmente hablamos de la media aritmética, aunque existen otras, como la media geométrica, la armónica etc..
Se obtiene sumando todos los datos y dividiéndolos entre el número total de datos:
\[ \overline{x}=\frac{\sum_{i=1}^n x_i}{n}\]
El valor medio de un vector o variable obtiene mediante la función
mean()
.
<- c(0:10, 50)
x
mean(x) # Con función
sum(x)/length(x) # Manualmente
La media aritmética tiene las siguientes propiedades:
Sólo puede calcularse para variables cuantitativas.
Se expresa en las mismas unidades que la variable original.
Aunque en su cálculo intervienen todos los valores de la variable
original, es sensible a los valores extremos. Para evitar la distorsión
estas puntuaciones extremas puedan causar en la media aritmética se
utiliza la media recortada
(mean α-trimmed
), que excluye el α por ciento de los datos.
Para ello se añade el argumento trim
dentro de la función
mean()
; en el ejemplo a continuación se excluye el 10 % de
los datos del extremo superior y el 10% del extremo inferior.
mean(x, trim = 0.10)
mean(x)
rm(x)
Se utiliza cuando no todos los elementos de los que se pretende
obtener la media tienen la misma importancia. Su uso es frecuente para
promediar porcentajes, tasas, números índices. etc., es decir, cuando la
variable presenta variaciones acumulativas. Se calcula multiplicando
cada uno de los valores por un peso
, que es un valor que
indica su importancia con respecto al resto de valores.
Fórmula de la media aritmética ponderada
Ventajas e inconvenientes de la media aritmética ponderada:
Cálculo complicado.
Los valores extremos tienen menor influencia que en la media aritmética.
Cuando en la variable existe un caso con un valor de 0 se anula.
EJEMPLO Para calcular la nota final de una asignatura, se asigna al examen final un valor tres veces superior al resto de las notas. ¿Cuál será la la nota media ponderada de un estudiante que sacó 4,5 y 6,8 en las dos primeras pruebas y 7,4 en el examen final?
<- c(4.5,6.8,7.4)
notas <- c(1,1,3) ponderaciones
El cálculo de la media ponderada se puede realizar manualmente, o
bien mediante la función weighted mean()
.
sum(notas*ponderaciones)/sum(ponderaciones) # Cálculo manual
weighted.mean(notas, ponderaciones) # Función `weighted.mean()`
mean(notas) # Media aritmética
rm(notas, ponderaciones)
La media geométrica es más apropiada que la aritmética para calcular el cambio promedio durante el periodo de análisis, típicos del estudio de fenómenos que, como la inflacción o la evolución de precios, están sometido a incrementos/decrecimientos periódicos.
Fórmula de la media aritmética ponderada
EJEMPLO Durante 5 años, el tamaño de un ejample de abejas ha variado con tasas anuales de 14% (primer año), 26% (segundo año etc.), 16%, -38%, -6%. El número de abejas al comienzo del periodo de análisis era 5000. ¿Cuál ha sido el cambio promedio experimentado por el enjambre?.
Si calculamos la media aritmética los resultados serían los siguientes:
<- c(14, 26, 16, -38, -6) # Tasas de cambio anual en %
abejas mean(abejas) # Media aritmética
De acuerdo con el resultado de la media aritmética, el enjambre habría crecido durante esos 5 años. Para comprobar esta afirmación, procedemos al cálculo de la media geométrica en dos pasos:
<- 1 + abejas/100
crec.relativo crec.relativo
round(5000 *
1] *
crec.relativo[2] *
crec.relativo[3] *
crec.relativo[4] *
crec.relativo[5]) crec.relativo[
A partir de esos resultados obtenemos una reducción del número de abejas.
También podemos realizar un cálculo análogo a través de la media geométrica
<- length(abejas) # Número de observaciones
longitud <- (crec.relativo[1] *
media.geometrica 2] *
crec.relativo[3] *
crec.relativo[4] *
crec.relativo[5]) ^ (1/longitud)
crec.relativo[
round(media.geometrica,3) # Resultados redondeados en %
El valor 0.994 es el porcentaje final de abejas respecto al número inicial, que equivale a 4855.
En el caso de R, existe una función geometric.mean()
implantada en el paquete psych que proporciona ese
mismo porcentaje final.
if (!require("psych")) install.packages("psych")
library("psych")
geometric.mean(crec.relativo)
Es la raíz n-ésima del producto de todos los números de un vector o variable. Es recomendada para promediar razones, interés compuesto y números índice.
No existe en R ninguna función que calcule la media geométrica ponderada, pero existe una función ex profeso para su cálculo.Para asegurarnos que la implementación es correcta, retomamos el ejemplo del enjambre de abejas de la sección anterior.
<- function(vals, weights){prod(vals)^(1/sum(weights))} media.geometrica.ponderada
En el ejemplo anterior se observaron durante 5 años las tasas de cambio de la población de abejas. Las tasas de variación anual fueron 1,14, 1,26, 1,16, 0,62, 0,94, que corresponden a x1, x2, … xn. Para reproducir el resultado anterior, establecemos todos los pesos w1, w2, … wn en 1.
round(media.geometrica.ponderada(crec.relativo, rep(1,5)),3)
rm(list = ls())
Es un estadístico propiado para calcular promedios de la velocidad (km/h) o la densidad de población (pob(km2).
Fórmula de la media armónica
EJEMPLO La distancia desde Torrelavega a Santander es 32 km. La velocidad media del vieaje de ida esta mañana ha sido de 105 km/h. A la vuelta, debido a la alta densidad de tráfico, la velocidad era de 60 km/h. ¿Cuál ha sido la velocidad media de todo el viaje?.
<- 105
ida <- 60
vuelta
# Media aritmética
mean(c(ida,vuelta))
El resultado de la media aritmética ignora el hecho que se condujo a 105 km/h durante menos tiempo que a 60 km/h (viaje de vuelta). Para calcular la media armónica podemos implementar una función.
<- function(vals){length(vals) / sum(1/vals)}
media.armonica media.armonica(c(ida,vuelta))
O utilizar la función harmonic.mean
del paquete
psych.
library("psych")
harmonic.mean(c(ida, vuelta))
Un ejemplo clásico del uso de la media armónica comparada es el cálculo de la densidad de la población (por ejemplo, de un país) según unidades administrativas más pequeñas (por ejemplo, estados, provincias, municipios), con diferente tamaño (población y sobre todo, superficie). El siguiente ejemplo ilustra el problema.
EJEMPLO ¿Cómo calcular la densidad media de la población urbana de las capitales de cada uno de los estados federados de Alemania?.
Para llevar a cabo este cálculo, primero es necesario cargar el fichero desde una página web.
<- read.csv('https://userpage.fu-berlin.de/soga/200/2010_data_sets/cities.csv')
ciudades
ciudadesnames(ciudades)[1:4] <- c("ciudad", "estado", "area", "poblacion")
<- function(vals, weights){
media_armonica_ponderada if (sum(weights) != 1){
= weights/sum(weights)
weights print('Las ponderaciones no suman 1. Se normaliza las ponderaciones...')
} sum(weights)/sum(weights/vals)
}
$densidad <- ciudades$poblacion / ciudades$area
ciudades ciudades
$ponderacion <- ciudades$poblacion / sum(ciudades$poblacion)
ciudades
ciudadessum(ciudades$ponderacion) # Comprobación: todas las ponderaciones suman 1
media_armonica_ponderada(ciudades$densidad, ciudades$ponderacion)
La densidad media (ponderada) de las capitales de estado en Alemania es 2363 habitantes/km2. La media aritmética sería
mean(ciudades$densidad)
rm(list=ls())
Es el valor más frecuente en un conjunto de valores, es decir, el que más veces se repite. Si dos puntuaciones adyacentes tienen la frecuencia máxima, se calcula como promedio de esas dos puntuaciones adyacentes; además, si dos o más puntuaciones tienen la misma frecuencia (máxima) hablaremos de una distribución bimodal o multimodal. Este último caso debe analizarse con precaución, ya que puede ser resultado de la mezcla de poblaciones o muestras.Si todas las puntuaciones de un grupo tienen la misma frecuencia no se podría calcular la moda. Se representa por \(Mo\).
Ventajas e inconvenientes:
Poco representativa, salvo cuando destaca mucho.
No intervienen todos los valores de la distribución.
Única medida de posición central que puede obtenerse en las variables de tipo cualitativo.
El vector sobre el que calcularemos la moda es el siguiente:
<- c(1, 1, 1, 4, 4, 5, 5, 5, 7, 8, 9, 9, 9, 9) x
R no dispone de una función en su paquete base que nos permita
calcular la moda. Existen, no obstante, algunos paquetes que sí permiten
calcular la moda. En este caso instalaremos el paquete
modeest y usaremos la función mlv()
con el
argumento method = "mfv"
, que devuelve el valor(es) más
frecuente en un vector numérico.
if (!require("modeest")) install.packages("modeest")
library(modeest)
mlv(x,
method = "mfv")
Otra posibilidad para el cálculo de la moda sería requerir a R qué valor de una tabla tiene una frecuencia máxima.
as.numeric(names(which(table(x)==max(table(x)))))
Es el valor que ocupa la posición central de la serie de números cuando los datos están ordenados de menor a mayor, y por lo tanto separa una distribución en dos partes iguales. Se representa por \(Me\) y se calcula de la siguiente manera:
median(x)
rm(list=ls())
Importa el fichero zonas_verdes.Rdata
. A partir de él,
calcula los siguientes estadísticos de la(s) variable(s) que consideres
más apropiadas.
Informan sobre cuánto se alejan los valores del centro de la distribución. Cuanto mayores sean las diferencias entre los individuos del grupo respecto de su promedio, mayor será la dispersión, y por tanto, la utilidad de los valores de tendencia central será menor.
Dispersión alrededor de la media
Los principales estadísticos de dispersión son:
Rango o recorrido.
Desviación respecto a la media.
Desviación media.
Varianza.
Desviación típica.
Comenzaremos creando un nuevo vector con los siguientes valores.
<- c(18,22,16,19,23,18,35,16,45,20,20,22,40,18,45) x
Es la diferencia entre el dato de mayor valor y el de menor valor.
Por lo tanto, en su cálculo sólo se tiene en cuenta los valores extremos
por lo que no necesariamente implica una gran dispersión. En R se
calcula anidando la función diff()
en la función
range()
.
max(x)-min(x)
range(x)
<- diff(range(x)) rango
Es la diferencia entre cada valor y la media aritmética de toda la distribución.
\[ D_i= x_i - \overline{x}\]
<- x - mean(x) desv_respecto_media
Es la media aritmética de los valores absolutos de las desviaciones respecto a la media.
Fórmula de la media armónica
<- sum(abs(x - mean(x)))/length(x) desv_media
La varianza y su raíz cuadrada positiva, la desviación típica, son las medidas de dispersión más importantes.
La varianza es la media aritmética de las diferencias al cuadrado entre los datos \(x_i\) y la media \(\overline{x}\) de la variable. Se representa por \(σ^2\) (población) o \(s^2\) (muestra).
Fórmula de la varianza
La varianza muestral se calcula con la misma fórmula que la varianza salvo que el denominador es \(n-1\) en lugar de \(n\). \[ \tilde{s}^2 =\frac{\sum_{i=1}^n (x_i-\overline{x})^2}{n-1}. \]
La distinción entre la versión muestral y la “verdadera” de la varianza está motivada por la interrelación entre la estadística descriptiva y la inferencial. Por un lado, se debe mediar la variabilidad de un conjunto de datos cuantitativos mediante su varianza “verdadera”; pero, por otro lado, nuestro conjunto de datos será, normalmente, una muestra de una población mucho mayor, de la que querremos estimar información, y en concreto su variabilidad. Con las técnicas de la estadística descriptiva, resumimos y representamos las características de esta muestra concreta; pero este estudio suele ser solo un paso previo al análisis inferencial, cuyo objetivo no es analizar esta muestra en si misma, sino inferir información sobre toda la población a partir de esta muestra.
La varianza de una muestra tiende a dar valores más pequeños que la varianza real de la población. Para muestras grandes, la diferencia no es sustancial: si \(n\) es grande, dividir por \(n\) o por \(n-1\) no supone una gran diferencia, sobre todo si tenemos en cuenta que se trata de estimar la varianza de la población, no de calcularla exactamente. Pero si el tamaño de la muestra es pequeño (menos de 25 individuos), la varianza muestral de una muestra aproxima significativamente mejor a la varianza real de la población que su varianza “verdadera”.
La varianza tiene las siguientes propiedades matemáticas:
Siempre es mayor que 0 \(s^2\geq 0\), porque es una suma de cuadrados de numeros reales.
Sólo la varianza equivale a 0 \(s^2=0\) cuando todos los sumandos \((x_i-\overline{x})^2\) son 0 y, por lo tanto, todos los datos son iguales a su media. - Si a todos los individuos de la variable se les suma un número la varianza no varía; si se multiplican por un número la varianza queda multiplicada por el cuadrado de dicho número
Es muy sensible a valores atípicos
La función de R para el cálculo de la varianza (muestral) es
var()
.
var(x)
La desviación típica es la raíz cuadrada \(s\) de la varianza: \(s=\sqrt{s^2}\). Se representa por σ (población) o s (muestra)
La desviación típica muestral es la raíz cuadrada positiva \(\tilde{s}\) de la varianza muestral: \(\tilde{s}=\sqrt{\tilde{s}^2}\).
Fórmula de la desviación típica
Se calcula con la función sd()
sd(x)
Propiedades de la desviación típica:
Siempre produce 0 o un valor positivo.
Si todos los valores de la variable se les suma un número la desviación típica no varía; si se multiplican por ese número la desviación típica queda multiplicada por dicho número.
Observaciones:
Cuanta más pequeña es la desviación típica más concentrados están los datos alrededor de la media.
Muy sensible a las puntuaciones extremas.
Calcula los siguientes estadísticos de la variable
superficie
perteneciente al dataframe
zonas_verdes.Rdata
. Crea luego una tabla con todos esos
valores
Rango
Desviación media
Varianza
Desviación típica
Se utilizan para comparar variables diferentes, que pueden tener medias y desviaciones típicas muy diferentes.
Observaciones:
La media aritmética de las puntuaciones típicas es 0.
La desviación típica de las puntuaciones típicas es 1.
Es un estadístico adimensional, o sea, independiente de las unidades utilizadas.
<- (x - mean(x)) / sd(x)
z z
EJEMPLO Un problema típico al analizar la evolución de las precipitaciones en España son los valores tan dispares existentes entre unos lugares y otros. Esto supone una dificultad, que se puede solventar transformando las precipitaciones en puntuaciones estandarizadas. Para ilustrar esta solución, analizaremos las evolución de las precipitaciones anuales en 3 observatorios españoles, Santiago de Compostela-Labacolla, Bilbao-Sondica y Murcia-Alcantarilla
<- "http://personales.unican.es/rasillad/docencia/G14/TEMA_2/precipitaciones.csv"
url <- read.csv2(url)
precipitaciones
# Cambio en el nombre de la variable
names(precipitaciones)[1] <- "AÑOS"
Los valores medios anuales de precipitación son muy diferentes en estos observatorios
mean(precipitaciones$SANTIAGO)/10
mean(precipitaciones$BILBAO)/10
mean(precipitaciones$MURCIA)/10
Representación gráfica de la evolución de las precipitaciones
plot(precipitaciones$AÑOS, precipitaciones$SANTIAGO/10, lwd = 2, col = "blue", type = "l", lty = 1, ylim = c(0,2700))
lines(precipitaciones$AÑOS, precipitaciones$BILBAO/10, lwd = 2, col = "red", type = "l", lty = 2, add = TRUE)
lines(precipitaciones$AÑOS, precipitaciones$MURCIA/10, lwd = 2, col = "darkgreen", type = "l", lty = 4, add = TRUE)
$ZSANTIAGO <- (precipitaciones$SANTIAGO - mean(precipitaciones$SANTIAGO)) / sd(precipitaciones$SANTIAGO)
precipitaciones$ZBILBAO <- (precipitaciones$BILBAO - mean(precipitaciones$BILBAO)) / sd(precipitaciones$BILBAO)
precipitaciones$ZMURCIA <- (precipitaciones$MURCIA - mean(precipitaciones$MURCIA)) / sd(precipitaciones$MURCIA) precipitaciones
Representación gráfica de la evolución de las precipitaciones transformadas en puntuaciones Z
plot(precipitaciones$AÑOS, precipitaciones$ZSANTIAGO, lwd = 2, col = "blue", type = "l", lty = 1, ylim = c(-3,3))
lines(precipitaciones$AÑOS, precipitaciones$ZBILBAO, lwd = 2, col = "red", type = "l", lty = 2, add = TRUE)
lines(precipitaciones$AÑOS, precipitaciones$ZMURCIA, lwd = 2, col = "darkgreen", type = "l", lty = 4, add = TRUE)
Se calcula como la relación entre la desviación típica y la media y se expresa como porcentaje. Permite comparar las dispersiones de dos distribuciones distintas, siempre que sus medias sean positivas. En líneas generales, a mayor coeficiente de variación mayor dispersión
Fórmula del coeficiente de variación
<- sd(x) / mean(x) * 100
cv cv
El coeficiente de variación también puede aplicarse a los datos de precipitaciones para saber cuál de los 3 observatorios presenta una mayor regularidad/irregularidad
<- sd(precipitaciones$SANTIAGO) / mean(precipitaciones$SANTIAGO) * 100
CV_SANTIAGO <- sd(precipitaciones$BILBAO) / mean(precipitaciones$BILBAO) * 100
CV_BILBAO <- sd(precipitaciones$MURCIA) / mean(precipitaciones$MURCIA) * 100 CV_MURCIA
De acuerdo con estos datos, el observatorio de Murcia es el que presenta una mayor irregularidad interanual, lo cual es típico de los climas mediterráneos, mientras el de Bilbao es el que presenta una mayor regularidad interanual, típico a su vez de los climas oceánicos.
Se llama cuantil \(p\) (o de orden \(p\)) (0<\(p\)<100) a aquel valor que, una vez ordenado un conjunto de datos de manera creciente, divide a la variable en \(n\) subconjuntos, dejando por debajo de él un \(p\) por ciento de los datos y por encima el 100−\(p\) por ciento. Por ejemplo, si \(p\)=50, el percentil de orden 50 corresponde a la mediana.
Si consideramos los cuantiles 25,50 y 75, estos 3 valores dividen
a las observaciones en cuatro partes iguales, y por eso se llaman
cuartiles (cuartil primero, cuartil segundo y cuartil
tercero). Suelen representarse por \(Q_1\), \(Q_2\) y \(Q_3\). El \(Q_2\) coincide con la mediana.
Si consideramos los cuantiles 10, 20, 30,…, 90, estos 9 valores dividen a las observaciones en diez partes iguales, y por eso se llaman deciles. Suelen representarse por \(D_1\), \(D_2\), …, \(D_9\). Equivalen a los valores correspondientes al 10%, al 20%… al 90% de los datos. El \(D_5\) coincide con la mediana
Generalmente, los percentiles van de 1 a 100, mientras los cuantiles se toman de 0 a 1, y es entonces lo mismo el percentil 12, por ejemplo, que el cuantil 0.12.
En R podemos recurrir a su cálculo manual o utilizando varias funciones.
<- runif(1000, # Número de observaciones a ser generadas
x min = 17, # Límite inferior de la distribución
max = 89) # Límite superior de la distribución
EJEMPLO: Cálculo del percentil 38
<- 25 # Definimos el percentil
k <- length(x) # Número total de datos de la variable
N round(k*N/100) # Posción que corresponde al percentil 38.
sort(x)[round(k*N/100)] # Valor original que corresponde a esa posición
length(x)
<- sort(x) # Ordenamos los datos
nub.longitud.ordenada
<- round(25*length(nub.longitud.ordenada)/100)
orden25 # Q25: elemento de una lista ordenada igual o mayor igual que el 25% de los datos
nub.longitud.ordenada[orden25]
<- round(50*length(nub.longitud.ordenada)/100)
orden50
nub.longitud.ordenada[orden50]
<- round(75*length(nub.longitud.ordenada)/100)
orden75 nub.longitud.ordenada[orden75]
quantile(x, probs = 0.38) # Cálculo del percentil 38
quantile(x, probs = c(0.25,0.50,0.75)) # Cálculo de los percentiles 25, 50 y 75
También es posible obtener el valor que corresponde a un determinado percentil de un conjunto de datos. Este rango proporciona el porcentaje de valores de ese conjunto de datos cuyo valor es menor que ese citado rango.
Creación de una función
<- function(a.vector, value) {
percentile.ranked <- length(sort(a.vector)[a.vector < value])
numerator <- length(a.vector)
denominator round(numerator/denominator,3)*100
}
Por ejemplo, calculamos el percentil de 63.5
<- 63.5
value percentile.ranked(x, value)
El rango intercuartílico que es la diferencia entre el cuartil 3º y el cuartil 1º. \(Q_{0.75}-Q_{0.25}\). También se llama a veces rango intercuartílico al intervalo intercuartílico: el intervalo \([Q_{0.25},Q_{0.75}]\).
El IQR es un parámetro muy utilizado para la identificación de datos atípicos. Se define como valor atípico leve aquel que dista 1,5 veces de el rango intercuantílico, bien por debajo de Q1 o bien por encima de Q3
q < Q1 – 1,5 · IQR o bien q > Q3 + 1,5 · IQR
y valor atípico extremo aquel que dista 3 veces el rango intercantílico por debajo de Q1 o por encima de Q3
q < Q1 – 3 · IQR o bien q > Q2 + 3 · IQR
El rango intercuartílico se calcula con la función
IQR()
IQR(x)
EJEMPLO Otro problema típico derivado de los valores tan diferentes de precipitación es la definición de sequía y de años anómalos. Ambos fenómenos pueden solventarse mediante el cálculo de los quintiles y del IQR. De nuevo recurrimos a las precipitaciones anuales de Santiago de Compostela-Labacolla, Bilbao-Sondica y Murcia-Alcantarilla.
quantile(precipitaciones$SANTIAGO, probs = c(0.20,0.40,0.60,0.80))
min(precipitaciones$SANTIAGO)
max(precipitaciones$SANTIAGO)
<- cut(precipitaciones$SANTIAGO,
clasificacion_años_SANTIAGO breaks = c(min(precipitaciones$SANTIAGO),
quantile(precipitaciones$SANTIAGO, probs = c(0.20,0.40,0.60,0.80)),
Inf),
right = FALSE,
labels = c("Muy seco", "Seco", "Normal", "Lluvioso", "Muy lluvioso"))
clasificacion_años_SANTIAGO
<- cbind(precipitaciones$SANTIAGO, precipitaciones$ZSANTIAGO, clasificacion_años_SANTIAGO)
santiago santiago
Para identificar si hay años extremos, se puede crear una nueva
variable, denominada atipicos
recodificando aquellos
valores que se cumplan las condiciones señaladas
<- quantile(precipitaciones$SANTIAGO, probs = 0.25)
Q1_SANTIAGO <- quantile(precipitaciones$SANTIAGO, probs = 0.75)
Q3_SANTIAGO <- IQR(precipitaciones$SANTIAGO) IQR_SANTIAGO
<- Q3_SANTIAGO + IQR_SANTIAGO * 1.5
atipico_superior_SANTIAGO <- Q1_SANTIAGO - 1.5 * IQR_SANTIAGO atipico_inferior_SANTIAGO
Finalmente, sólo quedar recodificar los diferentes años
$atipicos_SANTIAGO[precipitaciones$SANTIAGO <= atipico_inferior_SANTIAGO | precipitaciones$SANTIAGO >= atipico_superior_SANTIAGO] <- 1
precipitaciones$atipicos_SANTIAGO[precipitaciones$SANTIAGO > atipico_inferior_SANTIAGO & precipitaciones$SANTIAGO < atipico_superior_SANTIAGO] <- 0 precipitaciones
rm(list=ls())
Consiste en cinco números que resumen los estadísticos más importantes para resumir un conjunto de datos, informando sobre su amplitud, su dispersión y el promedio. Además, el resumen de estos cinco números también se puede representar de forma gráfica, lo cual facilita la visualización de estas características de un conjunto de datos,
Los cinco números son:
La media.
Los cuartiles 1(\(Q_1\)) y 3 (\(Q_3\))
Los valores mínimo y máximodel grupo de datos.
fivenum(x)
La función summary()
proporciona además la mediana.
summary(x)
rm(list=ls())
Muestran si la forma de una distribución presenta ciertas características que permiten clasificarlas en diferentes tipos. Son últiles para compararlas con la forma de distribuciones de probabilidad conocidas, para identificar la que mejor representa el comportamiento de los datos.
Hay dos tipos de estadísticos.
Los de asimetría o sesgo miden la simetría que presenta la distribución.
La curtosis o apuntamiento mide el apuntamiento (concentración alrededor de la media) que presentan los datos.
Son indicadores que permiten establecer el grado de simetría (o asimetría) que presentan los datos de una distribución sin tener que representarlos gráficamente. Para medir la simetría se toma como eje de asimetría la recta paralela al eje de ordenadas que pasa por la media aritmética.
Si una distribución es simétrica, existe el mismo número de valores a la derecha que a la izquierda de la media aritmética, por tanto, el mismo número de desviaciones con signo positivo que con signo negativo.
La asimetría es positiva (o a la derecha) cuando la “cola” a la derecha de la media es más larga que la de la izquierda, es decir, si hay valores más separados de la media a la derecha.
La asimetría es negativa (o a la izquierda) si la “cola” a la izquierda de la media es más larga que la de la derecha, es decir, si hay valores más separados de la media a la izquierda.
Existen diferentes estadísticos para medir la asimetría. Los más importantes son:
Coeficiente de asimetría de Fisher.
Coeficiente de asimetría de Pearson.
Coeficiente de asimetría de Bowley-Yule.
El coeficiente de asimetría de Fisher es el más utilizado. Tiene en cuenta el número casos, el promedio y la desviación típica.
Fórmula del coeficiente de asimetría de Fisher
Coeficiente de asimetría de Fisher
Para obtener el coeficiente de asimetría es necesario instalar la
librería “moments”. Esta librería contiene la función
skewness
que proporciona el coeficiente de asimétrica de
Fisher.
if (!require("moments")) install.packages("moments")
library(moments)
<- sample(17:89,
x 1000, # Número de observaciones a ser generadas
replace = TRUE)
hist(x)
skewness(x)
Es otro de los coeficientes de gran uso, pero limitado a distribuciones uniformes, unimodales y moderadamente asimétricas. Se basa en comparar la media de la distribución con respecto a su moda.
Fórmula del coeficiente de asimetría de Pearson
Si CAP<0: la distribución tiene una asimetría negativa, puesto que la media es menor que la moda.
Si CAP=0: la distribución es simétrica.
Si CAP>0: la distribución tiene una asimetría positiva, ya que la media es mayor que la moda.
Su
cálculo en R es relativamente sencillo, pero necesitamos el cálculo de
la moda a través de la función
mlv()
con el argumento
“mfv”.
library(modeest)
<- (mean(x)- mlv(x, method="mfv"))/mean(x) cap_pearson
Está basado en la posición de los cuartiles y la mediana, y utiliza la siguiente expresión:
D:/G14_EE_CC_SS_2023/TEMA_2_Estadistica_Descriptiva/graficos/3_imagen_Estadisticos_18_Bowley.png){width=40%}
Si CAB<0: la distribución tiene una asimetría negativa, puesto que la distancia de la mediana al primer cuartil es mayor que al tercero.
Si CAB=0: la distribución es simétrica, ya que el primer y tercer cuartil están a la misma distancia de la mediana.
Si CAB>0: la distribución tiene una asimetría positiva, ya que la distancia de la mediana al tercer cuartil es mayor que al primero.
Coeficiente de asimetría de de Bowley
Para obtener el Coeficiente de asimetría de Bowley, es necesario obtener antes los cuartiles.
<- quantile(x, probs = 0.25)
Q1 <- quantile(x, probs = 0.50)
Q2 <- quantile(x, probs = 0.75)
Q3
<- (Q3+Q1-2*Q2)/(Q3-Q1)
cab cab
También existe un Coeficiente Absoluto de Asimetría, que requiere también requiere haber calculado previamente los cuartiles, pero en el que el denominador es la desviación típica.
<- (Q3+Q1-2*Q2)/sd(x)
caa caa
Es una medida de forma que mide cuán escarpada o achatada está una distribución. Indica la cantidad de datos que hay cercanos a la media, de manera que a mayor curtosis, más escarpada (o apuntada) será la curva, al tiempo que existe una relativamente menor frecuencia de valores intermedios.
La fórmula de la curtosis es la siguiente:
Formula de la curtosis
Una distribución puede clasificarse como:
– Leptocúrtica: en la cual los valores están muy agrupados alrededor de la media, por lo que la distribución se presenta bastante apuntada y esbelta.
– Mesocúrtica: posee una concentración moderada de valores alrededor de la media.
– Platicúrtica: está distribución tiene una forma más ancha, pues los valores tienden a estar más dispersos.
Formula de la curtosis
Para calcular curtosis en R y RStudio vamos a usar la función kurtosis.
kurtosis(x)
Supongamos el siguiente conjunto de datos:
<- c(88, 95, 92, 97, 96, 97, 94, 86, 91, 95, 97, 88, 85, 76, 68) datos
Para visualizar rápidamente la distribución de valores de estos datos se dibuja un histograma
hist (datos)
El paquete moments ofrece la función
jarque.test()
, que realiza una prueba de bondad de ajuste
que determina si los datos de la muestra tienen asimetría y curtosis que
coinciden con una distribución normal. Las hipótesis nula y alternativa
de esta prueba son las siguientes:
Hipótesis nula: el conjunto de datos tiene una asimetría y una curtosis que coincide con una distribución normal.
Hipótesis alternativa: el conjunto de datos tiene una asimetría y una curtosis que no coincide con una distribución normal.
Para realizar la prueba:
jarque.test (datos)
El valor p de la prueba resulta ser 0.05756. Dado que este valor es superior al nivel de significación α = .05, no rechazamos la hipótesis nula. Esto significa que no hay evidencia suficiente para decir que este conjunto de datos tiene una asimetría y una curtosis diferente a la distribución normal.
rm(list=ls())
Son diferentes indicadores del grado de distribución de la variable y cuantifican el grado de igualdad en el reparto de los valores de una variable. Los más importantes son:
Índice de Gini
Curva de Lorenz
Es un índice desarrollado por Corrado Gini para medir la desigualdad en los ingresos, dentro de un país, pero puede utilizarse para medir cualquier forma de distribución desigual. Es un número entre 0 y 1, donde
El valor 0 se corresponde con la perfecta igualdad (todos tienen los mismos ingresos).
El valor 1 se corresponde con la perfecta desigualdad (una persona tiene todos los ingresos y los demás ninguno).
Índice de Gini 2015
Supongamos la siguiente distribución de rentas en un país cualquiera. Las rentas han sido agrupadas en una serie de categorías, cuyos límites serían \(L_{i1}-L_i\), \(x_i\) la marca de cada clase, \(n_i\) su frecuencia absoluta y \(N_i\) su frecuencia absoluta acumulada.
Ejemplo desarrollado del índice de Gini
Finalmente,
Ejemplo desarrollado del índice de Gini
Desarrollo del índice de Gini con R.
<-c(25,75,125,175,225,275,325,375,425,475) # Vector con valores (en este caso, marcas de clase)
xi <-c(23,72,62,48,19,8,14,7,5,2) # Vector con frecuencias ni
<-length(ni)
h
h<-cumsum(ni)
Ni
Ni<-c(xi*ni)
un
un<-cumsum(un)
M M
<-c(M/sum(un))*100
qi
qi<-c(Ni/sum(ni))*100
pi pi
Elaboración de la tabla con todas las variables.
<- cbind(xi,ni,Ni,un,M,pi,qi)
tabla_gini tabla_gini
Aplicación de la fórmula de Gini:
<- sum(pi-qi)/(sum(pi)-100)
Gini Gini
Su autor fue Max O. Lorenz en 1905. Es una representación gráfica utilizada para mostrar la distribución relativa de una variable, por ejemplo los ingresos según hogares o personas. La curva representa:
Porcentaje acumulado del ingreso (\(pi\)).
Porcentaje acumulado de personas u hogares (\(qi\)).
La curva parte del origen (0,0) y termina en el punto (100,100).
Si el ingreso estuviera distribuido de manera perfectamente equitativa, la curva coincidiría con la línea de 45 grados que pasa por el origen.
Si existiera desigualdad perfecta, o sea, si un hogar o persona poseyera todo el ingreso, la curva coincidiría con el eje horizontal hasta el punto (100,0) donde saltaría el punto (100,100).
En general la curva se encuentra en una situación intermedia entre estos dos extremos.
Cuanto más cerca de la diagonal, menor concentración/más homogeneidad en la distribución.
Cuanto más cerca de los ejes (parte inferior), mayor concentración/menor homogeneidad
En R podemos dibujarlo de manera manual:
plot(pi,qi,
type= "l")
lines(pi, qi,
col = 2,
lwd = 2,
type = "p")
legend("topleft", "curva Lorenz", col = 1:2, lty = 1, box.col = 1)
O también podemos dibujarlo a través de la función
curva.lorenz
del paquete ineq
library(ineq)
<- Lc(xi, # vector con valores
curva.lorenz # vector con frecuencias
ni) plot(curva.lorenz)
Desafío
Un aspecto frecuentemente analizado por la Geografía Agraria es el tamaño de las explotaciones agrarias. Hay regiones en las que predominan las grandes explotaciones (“latifundios”) mientras que en otras la propiedad está mucho más repartida (“minifundio”). Importa el fichero explotaciones_agrarias.csv. Crea con él un dataframe, calcula el índice de Gini para cada provincia y compáralos entre sí.
<- read.csv2(...)
datos attach(datos) # Función que informa a R que se trabajará con el dataframe datos hasta nueva orden
####################################### Estacion 1
<- length(ni1)
h1 <- cumsum(ni1)
Ni1 <-c(xi*ni1)
un1 <- cumsum(un1)
M1
<- c(M1/sum(un1))*100
qi1
qi1
<- c(Ni1/sum(ni1))*100
pi1
pi1
# Tabla con todas las variables.
<- cbind(xi,ni1,Ni1,un1,M1,pi1,qi1)
tabla_gini1
tabla_gini1
# Aplicación de la fórmula de Gini:
<- sum(pi1-qi1)/(sum(pi1)-100)
Gini1
Gini1
####################################### Estacion 2
<- length(ni2)
h2 <- cumsum(ni2)
Ni2 <-c(xi*ni2)
un2 <- cumsum(un2)
M2
<- c(M2/sum(un2))*100
qi2 <- c(Ni2/sum(ni2))*100
pi2
# Tabla con todas las variables.
<- cbind(xi,ni2,Ni2,un2,M2,pi2,qi2)
tabla_gini2
tabla_gini2
# Aplicación de la fórmula de Gini:
<- sum(pi2-qi2)/(sum(pi2)-100)
Gini2
Gini2
####################################### Estacion 3
<- length(ni3)
h3 <- cumsum(ni3)
Ni3 <-c(xi*ni3)
un3 <- cumsum(un3)
M3
<- c(M3/sum(un3))*100
qi3 <- c(Ni3/sum(ni3))*100
pi3
# Tabla con todas las variables.
<- cbind(xi,ni3,Ni3,un3,M3,pi3,qi3)
tabla_gini3
tabla_gini3
# Aplicación de la fórmula de Gini:
<- sum(pi3-qi3)/(sum(pi3)-100)
Gini3 Gini3
rm(list=ls())
En muchas ocasiones es necesario calcular un determinado estadístico en función de una o varias variables, con el fin de poder establecer comparaciones entre esos subconjuntos. Por ejemplo, imaginemos la siguiente una base de datos. En primer lugar, generaremos la base de datos con esas variables.
<- data.frame(contaminante = round(rnorm(100, sd = 10, mean = 30)),
dataset estacion = sample(c("invierno","primavera","verano", "otoño"), size = 100, replace = TRUE),
localidad = sample(paste("localidad", 1:4),
size = 100,
replace = TRUE))
head(dataset)
str(dataset)
Esta base de datos contiene las siguiente variables:
Valores de contaminación.
Estación del año.
Localidad en la que están situadas esas estaciones.
Existen diferentes posibilidades para calcular esos valores desagregados según otras variables.
aggregate()
La función aggregate()
calcula resúmenes estadísticos
para subconjuntos de datos, que devuelve en forma de dataframe. Su
sintaxis es muy sencilla
Función aggregate
Hay dos posibles ejemplos de uso de aggregate()
en
función de la salida que proporciona
En el caso de utilizar el argumento by
, para ver los
resultados deberemos crear siempre un objeto, que será un
dataframe.
En el caso de aplicar una fórmula con la sintaxis
variable numérica ~ variable categórica
, que evita escribir
el nombre completo de las variables, debe incluir a cambio el argumento
data
. Proporciona en pantalla un dataframe, que podemos o
no convertir en objeto.
Por ejemplo, para el cálculo de la concentracion de contaminantes según la estación del año.
<- aggregate(dataset$contaminante,
promedio_estacional by = list(dataset$estacion), # Variable categórica.
# Función
mean)
promedio_estacional
colnames(promedio_estacional) <- c("estación del año", "Promedio del contaminante")
promedio_estacional
La segunda opción nos puede servir para calcular el promedio de la concentración de contaminantes según la localidad.
<- aggregate(contaminante ~ localidad,
contaminante_localidad data = dataset,
FUN = mean)
contaminante_localidad
Si quisiéramos calcular los deciles extremos la sintaxis sería la siguiente:
<- aggregate(contaminante ~ localidad,
deciles_extremos data = dataset,
FUN = quantile,
probs = c(0.05, 0.95))
También es posible la agregación simultánea. Hay varias posibilidades:
aggregate(cbind(dataset$contaminante, dataset$estacion),
by = list(dataset$localidad),
mean,na.rm=TRUE)
aggregate(cbind(contaminante, estacion) ~ localidad,
FUN = mean,
data = dataset,
na.rm=TRUE)
<- aggregate(dataset$contaminante,
media_2_factores by = list(dataset$estacion, dataset$localidad),
FUN = mean,
na.rm=TRUE)
<- aggregate(dataset$contaminante,
diferentes_estadisticos by = list(dataset$estacion, dataset$localidad),
function(x) c(Suma = sum(x), Media = mean(x), SD = sd(x)))
aggregate(contaminante ~ estacion + localidad,
data = dataset,
FUN = mean,
na.rm=TRUE)
tapply()
Esta función también permite aplicar una función a una matriz, array o data frame calculando estadísticos, pero no sólo por filas, sino también por columas.
Función tapply
La clave consiste en configurar el argumento MARGIN, que puede tomar los valores 1 (por columnas), 2 ( por filas) o c(1, 2) por filas y columnas.
Primero, debemos convertir cada variable en un vector y además transformaremos las columna estación en factor, para que los nombres de los niveles se muestren en la salida de la función cuando se ejecute.
<- dataset$contaminante
contaminante <- dataset$localidad
localidad
<- factor(dataset$estacion,
estacion levels = c(1, 2, 3, 4),
labels = c("invierno", "primavera", "verano", "otoño"))
Precio medio por tipo de producto
<- tapply(contaminante, localidad, mean)
contaminación_tapply contaminación_tapply
Si es necesario se puede acceder a cada elemento de la salida especificando el índice deseado entre corchetes.
2] contaminación_tapply[
El formato de salida puede ser algo diferente (una lista) en caso de
establecer el argumento simplify
como FALSE.
<- tapply(contaminante, localidad, mean, simplify = FALSE)
contaminación_tapply contaminación_tapply
Y en este caso, para acceder a cualquier elemento de la salida hay que utilizar el signo $ y el nombre del elemento.
$`localidad 4` contaminación_tapply
Finalmente, hay también que tener cuidado con la inclusión de valores NA en nuestros datos. Vamos a simular qué pasa cuando incluimos este tipo de datos. Vamos a crear un nuevo dataset e incluiremos algunos datos ausentes
<- as.data.frame(cbind(contaminante, estacion, localidad))
dataset_NA $contaminante <- as.numeric(dataset_NA$contaminante)
dataset_NA$estacion <- as.integer(dataset_NA$estacion)
dataset_NAstr(dataset_NA)
1, 1] <- NA # Añadiendo valores NA: fila 1, columna 1.
dataset_NA[2, 3] <- NA # Añadiendo valores NA: fila 2, columna 3.
dataset_NA[ dataset_NA
Si queremos calcular el valor medio de la contaminación según estaciones astronómicas
tapply(dataset_NA$contaminante, dataset_NA$estacion, mean)
Dentro de la función tapply se pueden especificar argumentos
adicionales de la función que estás aplicando después del argumento
FUN
. En este caso, la función mean
permite
especificar el argumento na.rm
para que no tome en cuenta
esos valores NA. Este argumento por defecto es FALSE.
tapply(dataset_NA$contaminante, dataset_NA$estacion, mean, na.rm = TRUE)
by()
Por último, esta función se puede aplicar a un dataframe separando los resultados según un factor.
<- by(dataset$contaminante,
contaminante_by $localidad,
datasetFUN=summary,
na.rm = TRUE)
contaminante_by
El mayor inconveniente: hay que transformarlos en un dataframe para exportarlos. Para ello podemos recurrir a la siguiente sintaxis:
<- do.call(rbind, contaminante_by)
contaminante_by contaminante_by
Desafío
A partir del dataframe zonas_verdes
calcula:
Calcula el número total de parques en cada barrio
La superficie media, la superficie mediana, los percentiles 25 y 75, la desviación típica y el coeficiente de variación de la superficie según barrios.
El número máximo y mínimo de parques en obras/sin obras según barrio.
Cuando los ordenadores eran mucho menos potentes que los actuales, era costumbre calcular diferentes estadísticos a partir de datos agrupados si el volumen de datos era muy grande. En realidad, es preferible siempre calcular los estadísticos a partir de los datos sin agrupar, puesto que al agruparlos perdemos información.
No obstante, hay ocasiones en las que los datos se obtienen agrupados. En este tipo de situaciones, se pueden calcular los estadísticos y usarlos como aproximaciones a los que corresponderían a los datos “reales”, que en realidad no conocemos.
La media \(\overline{x}\), la varianza \(s^2\), la varianza muestral \(\tilde{s}^2\), la desviación típica \(s\) y la desviación típica muestral \(\tilde{s}\) de un conjunto de datos agrupados se calculan con las mismas fórmulas que para los datos sin agrupar, excepto que sustituimos cada clase por su marca y la contamos con su frecuencia.
Ejemplo del cálculo de la media, la varianza y la desviación típica sobre datos agrupados
<- c(1, 8, 10, 9, 8, 4, 2)
ni <- c(15+10*(0:5), 75)
xi
<- as.table(xi * ni)
xini <- as.table(xi^2 * ni)
xi2ni
<- sum(ni)
total
total
<- sum(xini)/total
media
media
<- sum(xi2ni)/total-media^2
varianza
varianza
<- sqrt(varianza)
desv.tipo desv.tipo
Despejaremos los valores anteriores
rm(desv.tipo, media, varianza, total, xini,xi2ni)
Si las aproximaciones a la mayoría de los estadísticos de tendencia central son relativamente fáciles de calcular, la moda, la mediana y los estadísticos de posición son algo más complicados. Se han planteado diferentes métodos.
Uno de los más sencillos es el siguiente, que requiere inicialmente añadir al dataframe original los límites de clase (al menos, cada límite inferior) y calcular y añadir las frecuencias relativas y frelativas acumuladas, y las frecuencias absolutas acumuladas.
En primer lugar, se reproducen los mismos límites de clase de la tabla utilizada como ejemplo.
<- 10
a <- 10
L1 <- L1 + a*(0:6)
Linf <- Linf + a Lsup
En segundo lugar, calcularemos las frecuencias relativas y relativas acumuladas, y las frecuencias absolutas acumuladas
<- cumsum(ni)
Ni <- ni/sum(ni)
fi <- cumsum(fi) Fi
Combinamos todos los elementos en una misma tabla en forma de data.frame
<- data.frame(Linf, Lsup, xi, ni, fi, Ni, Fi) datos
Por la misma razón que antes, eliminamos los vectores y nos quedaremos sólo con el dataframe.
rm(a, Linf, Lsup, L1, xi, ni, fi, Ni, Fi)
En lo que se refiere a la moda, se trabajará con el clase o intervalo modal, que es la clase con mayor frecuencia. La fórmula para el cálculo de la moda sobre datos agrupados es la siguiente:
\[ Mo=L_{i-1}+a_i\cdot \frac{n_{i+1}}{(n_{i-1} + n_{i+1})} \] donde:
Por lo tanto, es básico determinar cuál es dicha clase modal. Para ello aplicaremos la siguiente sintaxis:
<- datos[which(datos$ni==max(datos$ni)), ]
clase.modal clase.modal
A continuación, extraeremos de esa clase modal el límite inferior de la clase y el númeor de casos de esa clase modal.
<- clase.modal$Linf # límite inferior de la clase modal.
Li <- clase.modal$ni # ni número de casos de la clase modal. ni
Por último, extraeremos el número de casos de las clases inmediatamente anterior y posterior a la modal, así como la amplitud. Para ello, primero debemos saber qué filas de nuestros datos corresponden a esas clases.
datos
<- datos[2,4] # número de casos de la clase inmediatamente inferior a la modal
ni.menos1 <- datos[4,4] # número de casos de la clase inmediatamente posterior a la modal
ni.mas1 <- datos$Lsup[1] - datos$Linf[1] ai
El resultado final es:
<- Li + (ni/(ni.mas1+ni.menos1)) * ai moda.agrupados
Tabla para el cálculo de la moda sobre datos agrupados
Para la obtención de la mediana sobre datos agrupados es necesario conocer previamente cuál es la clase mediana, es decir, la clase mediana es la clase o intervalo que contiene el valor del medio de todos los datos ordenados de menor a mayor.
La clase mediana se encuentra en el intervalo cuya frecuencia absoluta acumulada es inmediatamente superior al número obtenido con la siguiente fórmula:
\[ \frac{n+1}{2} \]
Donde \(N\) es el número total de datos.
Otra manera de definir la clase mediana es el primer intervalo donde la frecuencia relativa acumulada \(F_i\) sea mayor o igual a \(0.5\).
La fórmula para obtener una aproximación \(Me\) para la mediana a partir de los datos agrupados es la siguiente:
\[ Me=L_i+A_i\cdot \frac{\frac{N}{2} - N_{i-1}}{n_i} \] En la que:
Iniciamos el cálculo con la obtención de la clase mediana
<- datos[which(datos$Fi>=0.5), ]
clase.mediana clase.mediana
Dado que el intervalo crítico corresponde a la fila 4, a continuación, extraeremos el límite inferior de esa clase y el número de casos de esa clase mediana.
<- clase.mediana[1,1] # límite inferior de la clase modal.
Li.clase.mediana <- clase.mediana[1,4] # ni número de casos de la clase modal. ni.clase.mediana
Igualmente, extraeremos el número de casos de las clases inmediatamente anterior y posterior a la modal, así como la amplitud. Para ello, primero debemos saber qué filas de nuestros datos corresponden a esas clases.
<- datos[3,6] # número de casos de la clase inmediatamente inferior a la modal
Ni.clase.mediana.anterior <- sum(datos$ni)
n <- datos$Lsup[1] - datos$Linf[1] ai
El resultado final es:
<- Li.clase.mediana + ai * ((N/2 - Ni.clase.mediana.anterior)/n) mediana.agrupados
Un ejemplo clásico de información recibida en forma de categorías son
los datos de población con los que se elaboran las pirámides de edades.
Vamos a usar unos datos agrupados para calcular algunos estadísticos de
la distribución de la población española por edades. El fichero original
contiene dos columnas: una con los grupos de edad y otra con el volumen
de la población. Se importará como un data frame con la función
read.csv
(también se podría con la función
read.table
con header=TRUE
y
sep=","
).
<- read.csv("https://raw.githubusercontent.com/AprendeR-UIB/AprendeR1/master/datos/cens81.csv",
datos stringsAsFactors=FALSE, # Son simplemente etiquetas, por lo que las importamos como caracteres, no como factor.
encoding="UTF-8") # Garantiza que las "ñ" de las etiquetas ("años") se importan de manera correcta .
str(datos)
datos
Siguiendo el esquema visto anteriormente, cada grupo de edades debe tener asignado un valor numérico como marca de clase.Por ejemplo, la clase “De 0 a 4 años” representa el intervalo de edades [0,5), la clase “De 5 a 9 años” representa el intervalo de edades [5,10), y así sucesivamente; esta amplitud de 5 años se rompe a partir de la clase 85 y más. Por eso, para los grupos de edad inferiores a 84 años, tomaremos como marca de clase el punto medio de sus límites, mientras que para el último, de amplitud indeterminada, tomaremos 90 como marca. Estas marcas de clase se añadirán al data frame como una nueva variable.
$marcas <- c(2.5+5*(0:16),90)
datoshead(datos)
Una vez realizado esto, podemos calcular diferents estadísticos:
<- sum(datos$Población) # Población total
Total
Total
<- sum(datos$Población*datos$marcas)/Total # Edad media
Edad.media
Edad.media
<- sum(datos$Población*datos$marcas^2)/Total-Edad.media^2 # Varianza
Edad.varianza
Edad.varianza
<- sqrt(Edad.varianza) # Desviación típica
Edad.desv.tip Edad.desv.tip
Desafío. El fichero piramide_edades.csv
recoge el número
de habitantes de una serie de países del mundo con diferentes
estructuras de edades. Importa dicho fichero, elige un país y contesta a
las siguientes preguntas
¿cuál es la edad media de la población de ese país?
Qué grupo de población era el más numeroso?
Recodifica los grupos de edad en 3 categorías (jóvenes, hasta los 14 años, adultos desde 15 a 64, y ancianos desde 64) y calcula los porcentajes que representan cada uno respecto del total.
Si las aproximaciones a la mayoría de los estadísticos de tendencia central son relativamente fáciles de calcular, la mediana y los de posición son algo más complicados. Se han planteado diferentes métodos. Uno de los más sencillos es el siguiente, que requiere inicialmente calcular las frecuencias absolutas acumuladas, relativas y relativas acumuladas, añadiéndolas al dataframe original.
<- datos$Edades[which(datos$Población==max(datos$Población))] # Intervalo modal
Int.modal Int.modal
$FA.acum <- cumsum(datos$Población)
datos$FR <- round(datos$Población/Total, 3)
datos$FR.acum <- round(datos$FA.acum/Total, 3)
datos datos
La fórmula para obtener una aproximación \(M\) para la mediana de los datos “reales” a partir de los datos agrupados es la siguiente: \[ M=L_{i}+A_i\cdot \frac{\frac{N}{2}- N_{i-1}}{n_i}. \] En la que
En nuestro ejemplo, \(N=37683361\), \(L_i=30\), \(A_i=5\), \(N_{i-1}=18428647\) y \(n_i=2455314\), por lo que \[ M=30+5\cdot\frac{0.5\cdot 37683361-18428647}{2455314}= 30.8411. \]
Este método también permite aproximar el cuantil \(Q_p\) de los datos “reales” a partir de los datos agrupados con la fórmula siguiente: \[ C_k=L_i+A_i\cdot \frac{\frac{k\cdot N}{4}- N_{i-1}}{n_i}. \]
donde ahora el intervalo crítico es ahora el primer intervalo con frecuencia relativa acumulada mayor o igual que \(p\) y el resto de valores se definen relativos a este intervalo crítico.
De este modo, en nuestro ejemplo, el intervalo crítico para \(Q_{0.25}\) es “De 10 a 14 años”, y en este caso \(L_i}=10\), \(A_i=5\), \(N_{i-1}=6383401\) y \(n_i=3302328\), por lo que \[ Q_{0.25}=10+5\cdot\frac{0.25\cdot 37683361-6383401}{3302328}= 14.6. \] En cuanto al tercer cuantil, \(Q_{0.75}\), el intervalo crítico es “De 50 a 54 años”, por lo que \(L_i=50\), \(A_i=5\), \(N_{i-1}=27547001\) y \(n_i=2265091\), y, por consiguiente, \[ Q_{0.75}=50+5\cdot\frac{0.75\cdot 37683361-27547001}{2265091}=51.58. \]