Los estadísticos de posición (cuantiles) son indicadores que permiten dividir un conjunto de datos en grupos (intervalos) del mismo tamaño.
Las medidas de posición más usuales son los cuartiles, los quintiles y los deciles.
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 \(C_1\), \(C_2\) y \(C_3\). El \(C_2\) coincide con la mediana.
Si consideramos los cuantiles 20, 40, 60 y 80, estos valores dividen a las observaciones en 5 partes iguales, y por eso se llaman quintiles. Suelen representarse por \(Q_1\), \(Q_2\), …, \(Q_9\).
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
En R podemos recurrir a su cálculo manual o utilizando varias funciones.
x <- runif(1000, # Número de observaciones a ser generadas
min = 17, # Límite inferior de la distribución
max = 89) # Límite superior de la distribución
✅ **EJEMPLO*:Cálculo del percentil 38:**
k <- 25 # Definimos el percentil
N <- length(x) # Número total de datos de la variable
round(k*N/100) # Posción que corresponde al percentil 38.
## [1] 250
sort(x)[round(k*N/100)] # Valor original que corresponde a esa posición
## [1] 35.58718
length(x)
## [1] 1000
nub.longitud.ordenada <- sort(x) # Ordenamos los datos
orden25 <- round(25*length(nub.longitud.ordenada)/100)
nub.longitud.ordenada[orden25] # Q25: elemento de una lista ordenada igual o mayor igual que el 25% de los datos
## [1] 35.58718
orden50 <- round(50*length(nub.longitud.ordenada)/100)
nub.longitud.ordenada[orden50]
## [1] 53.69472
orden75 <- round(75*length(nub.longitud.ordenada)/100)
nub.longitud.ordenada[orden75]
## [1] 71.5951
quantile(x, probs = 0.38) # Cálculo del percentil 38
## 38%
## 44.83636
quantile(x, probs = c(0.25,0.50,0.75)) # Cálculo de los percentiles 25, 50 y 75
## 25% 50% 75%
## 35.58744 53.73385 71.60758
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.
✅ EJEMPLO:
Creación de una función
percentile.ranked <- function(a.vector, value) {
numerator <- length(sort(a.vector)[a.vector < value])
denominator <- length(a.vector)
round(numerator/denominator,3)*100
}
Por ejemplo, calculamos el percentil de 63.5
value <- 63.5
percentile.ranked(x, value)
## [1] 64.5
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)
## [1] 36.02014
Valores | Quintil |
---|---|
Muy altos | Q5 |
Altos | Q4 |
Normales | Q3 |
Bajos | Q2 |
Muy bajos | Q1 |
✅ 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. Un período temporal se considera:
muy seco cuando el valor de precipitación total se sitúa entre el 20% de los valores más bajos (Q1),
seco cuando se encuentra en el tramo del siguiente 20% de valores (20-40%),
normal cuando se sitúa en el tramo del 20% de valores intermedios,
húmedo en el siguiente tramo del 20%,
muy húmedo en el intervalo del 20% de los valores más elevados de la serie.
De nuevo recurrimos a las precipitaciones anuales de Santiago de Compostela-Labacolla, Bilbao-Sondica y Murcia-Alcantarilla.
precipitaciones <- read.csv2("http://personales.unican.es/rasillad/docencia/G2040/TEMA_5/precipitaciones_mensuales.csv")
# Cambio en el nombre de la variable
names(precipitaciones)[1] <- "AÑOS"
A partir de las series, podemos calcular los quintiles correspondientes a la precipitación de Santiago-Labacolla
quantile(precipitaciones$SANTIAGO, probs = c(0.20,0.40,0.60,0.80))
## 20% 40% 60% 80%
## 15154.2 16890.4 18640.0 21343.2
min(precipitaciones$SANTIAGO)
## [1] 10205
max(precipitaciones$SANTIAGO)
## [1] 27613
Con la función cut()
se aplican esos quintiles a los
datos originales de precipitación para clasificar cada uno de los años
en una categoría.
clasificacion_años_SANTIAGO <- cut(precipitaciones$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
## [1] Muy lluvioso Normal Muy lluvioso Muy seco Normal
## [6] Muy lluvioso Seco Normal Muy lluvioso Normal
## [11] Seco Lluvioso Muy seco Muy lluvioso Seco
## [16] Lluvioso Muy lluvioso Muy lluvioso Muy lluvioso Seco
## [21] Normal Normal Lluvioso Normal Lluvioso
## [26] Normal Muy lluvioso Seco Seco Muy seco
## [31] Normal Muy seco Lluvioso Lluvioso Muy lluvioso
## [36] Normal Normal Seco Lluvioso Muy lluvioso
## [41] Muy lluvioso Lluvioso Normal Muy seco Seco
## [46] Lluvioso Muy seco Muy seco Lluvioso Seco
## [51] Muy seco Muy seco Lluvioso Lluvioso Muy seco
## [56] Seco Muy seco Muy seco Seco Seco
## Levels: Muy seco Seco Normal Lluvioso Muy lluvioso
santiago <- cbind(precipitaciones$SANTIAGO, precipitaciones$ZSANTIAGO, clasificacion_años_SANTIAGO)
santiago
## clasificacion_años_SANTIAGO
## [1,] 21888 5
## [2,] 17176 3
## [3,] 23104 5
## [4,] 14494 1
## [5,] 17422 3
## [6,] 26535 5
## [7,] 16417 2
## [8,] 18578 3
## [9,] 22273 5
## [10,] 16991 3
## [11,] 16846 2
## [12,] 20281 4
## [13,] 15087 1
## [14,] 21356 5
## [15,] 16278 2
## [16,] 19999 4
## [17,] 27613 5
## [18,] 23210 5
## [19,] 23952 5
## [20,] 16388 2
## [21,] 17496 3
## [22,] 16963 3
## [23,] 18873 4
## [24,] 17834 3
## [25,] 20236 4
## [26,] 17724 3
## [27,] 22713 5
## [28,] 16622 2
## [29,] 16677 2
## [30,] 13982 1
## [31,] 16920 3
## [32,] 14586 1
## [33,] 18691 4
## [34,] 20525 4
## [35,] 21862 5
## [36,] 18161 3
## [37,] 18606 3
## [38,] 15542 2
## [39,] 19135 4
## [40,] 23193 5
## [41,] 22085 5
## [42,] 19649 4
## [43,] 17923 3
## [44,] 13521 1
## [45,] 15171 2
## [46,] 21340 4
## [47,] 10927 1
## [48,] 14619 1
## [49,] 18728 4
## [50,] 15850 2
## [51,] 10205 1
## [52,] 11846 1
## [53,] 21037 4
## [54,] 19333 4
## [55,] 12148 1
## [56,] 15298 2
## [57,] 10519 1
## [58,] 13761 1
## [59,] 16225 2
## [60,] 15240 2
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
Q1_SANTIAGO <- quantile(precipitaciones$SANTIAGO, probs = 0.25)
Q3_SANTIAGO <- quantile(precipitaciones$SANTIAGO, probs = 0.75)
IQR_SANTIAGO <- IQR(precipitaciones$SANTIAGO)
atipico_superior_SANTIAGO <- Q3_SANTIAGO + IQR_SANTIAGO * 1.5
atipico_inferior_SANTIAGO <- Q1_SANTIAGO - 1.5 * IQR_SANTIAGO
Finalmente, sólo quedar recodificar los diferentes años
precipitaciones$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
📝 ACTIVIDAD DE EVALUACIÓN CONTINUA: :
ACTIVIDAD 1. A partir de los datos de precipitación de las estaciones de Bilbao-Sondica y Murcia-Alcantarilla.
quintiles_santiago <- quantile(precipitaciones$SANTIAGO, probs = c(0.20,0.40,0.60,0.80))
quintiles_bilbao <- quantile(precipitaciones$BILBAO, probs = c(0.20,0.40,0.60,0.80))
quintiles_murcia <- quantile(precipitaciones$MURCIA, probs = c(0.20,0.40,0.60,0.80))
tabla_quintiles <- cbind(quintiles_santiago, quintiles_bilbao, quintiles_murcia)
clasificacion_años_BILBAO <- cut(precipitaciones$BILBAO,
breaks = c(min(precipitaciones$BILBAO),
quantile(precipitaciones$BILBAO, 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_BILBAO
bilbao <- cbind(precipitaciones$BILBAO, precipitaciones$ZBILBAO, clasificacion_años_BILBAO)
bilbao
clasificacion_años_MURCIA <- cut(precipitaciones$MURCIA,
breaks = c(min(precipitaciones$MURCIA),
quantile(precipitaciones$MURCIA, 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_MURCIA
murcia <- cbind(precipitaciones$BILBAO, precipitaciones$ZMURCIA, clasificacion_años_MURCIA)
murcia
ACTIVIDAD 2. El fichero cuencas_precipitacion.csv
contiene los datos anuales de precipitación en cada una de las cuencias
hidrográficas de la Península Ibérica. A partir de esos datos:
quintiles_santiago <- quantile(precipitaciones$SANTIAGO, probs = c(0.20,0.40,0.60,0.80))
tabla_quintiles <- cbind(quintiles_santiago, quintiles_bilbao, quintiles_murcia)
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)
## [1] 17.02461 35.58735 53.73385 71.62005 88.94982
La función summary()
proporciona además la mediana.
summary(x)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 17.02 35.59 53.73 53.52 71.61 88.95
rm(list=ls())