Este trabajo contiene el reporte descriptivo del dataset “S5_ASA_estadisticasPasajeros.csv” que contiene información sobre el número de pasajeros en vuelos internacionales y nacionales de vuelos registrados en distintos aeropuertos de México.
Comenzaremos este reporte describiendo el dataset para su posterior análisis
datos <- read.csv("S5_ASA_estadisticasPasajeros.csv")
head(datos)
## Anio.mes Codigo.IATA Descripcion Estado Pasajeros.nacionales
## 1 201501 CEN Ciudad Obregon Sonora 17149
## 2 201501 CLQ Colima Colima 8486
## 3 201501 CME Ciudad del Carmen Campeche 56079
## 4 201501 CPE Campeche Campeche 13264
## 5 201501 CTM Chetumal Quintana Roo 13153
## 6 201501 CVM Ciudad Victoria Tamaulipas 4695
## Pasajeros.internacionales
## 1 721
## 2 124
## 3 3126
## 4 215
## 5 0
## 6 139
En las primeras 5 filas podemos visualizar que contamos con 5 variables las cuales son:
Anio.mes: Año y mes del vuelo Descripcion: el municipio donde se registró el vuelo Estado: Estado donde se registraron los pasajeros Pasajeros.nacionales: Número de pasajeros en vuelos nacionales Pasajeros.internacionales: Número de pasajeros en vuelos internacionales
Es decir que el primer registro puede leerse como: En enero de 2015 se registraron 17,149 pasajeros en vuelos nacionales y 721 en vuelos internaciones en el aeropuerto de Ciudad Obregón Sonora.
Para su correcto análisis estadístico necesitaremos verificar la estructura del dataset y, en caso necesario, limpiar el mismo.
str(datos)
## 'data.frame': 216 obs. of 6 variables:
## $ Anio.mes : int 201501 201501 201501 201501 201501 201501 201501 201501 201501 201501 ...
## $ Codigo.IATA : chr "CEN" "CLQ" "CME" "CPE" ...
## $ Descripcion : chr "Ciudad Obregon" "Colima" "Ciudad del Carmen" "Campeche" ...
## $ Estado : chr "Sonora" "Colima" "Campeche" "Campeche" ...
## $ Pasajeros.nacionales : int 17149 8486 56079 13264 13153 4695 1315 1050 6684 5609 ...
## $ Pasajeros.internacionales: int 721 124 3126 215 0 139 386 2684 61 10 ...
Observamos que las variables “Codigo.IATA”, “Descripcion” y “Estado” que son en principio variables categóricas están guardadas como texto. Adicionalemente la variable Anio.mes esta guardada como entero pero debe ser un registro categórico ordinal. Realizaremos los cambios pertinentes:
datos1 <- datos %>% mutate(
Anio.mes = as.yearmon(as.character(Anio.mes), "%Y%m"),
Codigo.IATA = as.factor(Codigo.IATA),
Descripcion = as.factor(Descripcion),
Estado = as.factor(Estado)
)
str(datos1)
## 'data.frame': 216 obs. of 6 variables:
## $ Anio.mes : 'yearmon' num ene. 2015 ene. 2015 ene. 2015 ene. 2015 ...
## $ Codigo.IATA : Factor w/ 18 levels "CEN","CLQ","CME",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ Descripcion : Factor w/ 18 levels "Campeche","Chetumal",..: 4 6 3 1 2 5 7 8 9 11 ...
## $ Estado : Factor w/ 12 levels "Baja California Sur",..: 10 3 2 2 8 11 10 1 11 11 ...
## $ Pasajeros.nacionales : int 17149 8486 56079 13264 13153 4695 1315 1050 6684 5609 ...
## $ Pasajeros.internacionales: int 721 124 3126 215 0 139 386 2684 61 10 ...
Ahora veremos un resumen estadístico rápido de los datos
summary(datos1["Pasajeros.nacionales"])
## Pasajeros.nacionales
## Min. : 63
## 1st Qu.: 1198
## Median : 7947
## Mean :10608
## 3rd Qu.:14884
## Max. :56418
summary(datos1["Pasajeros.internacionales"])
## Pasajeros.internacionales
## Min. : 0.0
## 1st Qu.: 7.0
## Median : 107.0
## Mean : 818.2
## 3rd Qu.: 584.0
## Max. :7042.0
Se observa que únicamente los pasajeros internacionales han registrado en algún caso cero pasajeros internacionales. Observamos que el primer cuartil para pasajeros nacionales es mucho más corto que el segundo cuartil y el tercer cuartil lo cual indica una mayor proporción de vuelos con cantidades altas de pasajeros. Este comportamiento se ve replicado, aunque en mayor medida para vuelos internacionales. Esto podría tener sentido dado que las aerolíneas prefieren vuelos con mayores cupos, posiblemente se pueda explicar con las temporadas vacacionales entre algunos otros factores correspondientes a las fechas.
Adicionalmente se puede afirmar que es mayor el flujo de pasajeros nacionales que internacionales. Ahora haremos tablas de frecuencias para comenzar a profundizar el análisis
table(datos1$Estado)
##
## Baja California Sur Campeche Colima
## 12 24 12
## Michoacan Nayarit Oaxaca
## 12 12 12
## Puebla Quintana Roo San Luis Potosi
## 24 12 12
## Sonora Tamaulipas Veracruz
## 36 36 12
table(datos1$Descripcion)
##
## Campeche Chetumal Ciudad del Carmen Ciudad Obregon
## 12 12 12 12
## Ciudad Victoria Colima Guaymas Loreto
## 12 12 12 12
## Matamoros Nogales Nuevo Laredo Poza Rica
## 12 12 12 12
## Puebla Puerto Escondido Tamuin Tehuacan
## 12 12 12 12
## Tepic Uruapan
## 12 12
table(datos1$Codigo.IATA)
##
## CEN CLQ CME CPE CTM CVM GYM LTO MAM NLD NOG PAZ PBC PXM TCN TPQ TSL UPN
## 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12
table(datos1$Anio.mes)
##
## ene. 2015 feb. 2015 mar. 2015 abr. 2015 may. 2015 jun. 2015 jul. 2015 ago. 2015
## 18 18 18 18 18 18 18 18
## sep. 2015 oct. 2015 nov. 2015 dic. 2015
## 18 18 18 18
Notamos que la variable “Estado” no cuenta con datos uniformes lo cual confirma que los registros son por cada aeropuerto en un mes. Esto se ve reforzado con el Código IATA (de la International Air Transport Association) confirma que tenemos 12 registros por cada aeropuerto, dicho de otra forma, la variable “descripcion” es una “replica” de la variable “Codigo.IATA”.
La variable “Anio.mes” nos confirma que contamos con un total de 18 aeropuertos diferentes.
Veamos algunas estadísticas importantes
totales <- datos1 %>%
group_by(Estado) %>%
summarise(
Total.nacionales = sum(Pasajeros.nacionales),
Total.internacionales = sum(Pasajeros.internacionales),
Total.general = Total.nacionales + Total.internacionales
) %>%
arrange(desc(Total.general))
promedios <- datos1 %>%
group_by(Descripcion) %>%
summarise(
Prom.nacionales = round(mean(Pasajeros.nacionales), 1),
Prom.internacionales = round(mean(Pasajeros.internacionales), 1)
) %>%
arrange(desc(Prom.nacionales))
mensuales <- datos1 %>%
group_by(Anio.mes, Estado) %>%
summarise(
Total.mensual = sum(Pasajeros.nacionales + Pasajeros.internacionales),
.groups = "drop"
) %>%
arrange(Estado)
AeropuertoVSSumatotal <- datos1 %>%
group_by(Descripcion) %>%
summarise(
Total.nacionales = sum(Pasajeros.nacionales),
Total.internacionales = sum(Pasajeros.internacionales)
)
Ahora visualizaremos los resultados:
totales %>%
kable(caption = "Totales de pasajeros por estado") %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
| Estado | Total.nacionales | Total.internacionales | Total.general |
|---|---|---|---|
| Campeche | 769864 | 35041 | 804905 |
| Puebla | 267567 | 63056 | 330623 |
| Sonora | 253788 | 11576 | 265364 |
| Tamaulipas | 243126 | 2662 | 245788 |
| Oaxaca | 181706 | 3624 | 185330 |
| Quintana Roo | 179259 | 118 | 179377 |
| Colima | 112656 | 927 | 113583 |
| Nayarit | 113043 | 0 | 113043 |
| Michoacan | 95635 | 14432 | 110067 |
| Veracruz | 60575 | 0 | 60575 |
| Baja California Sur | 12602 | 45305 | 57907 |
| San Luis Potosi | 1598 | 0 | 1598 |
promedios %>%
kable(caption = "Promedio mensual de pasajeros por aeropuerto (Código IATA)") %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
| Descripcion | Prom.nacionales | Prom.internacionales |
|---|---|---|
| Ciudad del Carmen | 49262.8 | 2666.7 |
| Puebla | 22062.9 | 5254.7 |
| Ciudad Obregon | 19867.4 | 590.2 |
| Puerto Escondido | 15142.2 | 302.0 |
| Chetumal | 14938.2 | 9.8 |
| Campeche | 14892.5 | 253.4 |
| Tepic | 9420.2 | 0.0 |
| Colima | 9388.0 | 77.2 |
| Matamoros | 8078.9 | 58.9 |
| Uruapan | 7969.6 | 1202.7 |
| Ciudad Victoria | 6124.2 | 138.8 |
| Nuevo Laredo | 6057.3 | 24.2 |
| Poza Rica | 5047.9 | 0.0 |
| Guaymas | 1063.1 | 344.8 |
| Loreto | 1050.2 | 3775.4 |
| Tehuacan | 234.3 | 0.0 |
| Nogales | 218.5 | 29.6 |
| Tamuin | 133.2 | 0.0 |
mensuales %>%
kable(caption = "Evolución mensual de pasajeros por estado") %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
| Anio.mes | Estado | Total.mensual |
|---|---|---|
| ene. 2015 | Baja California Sur | 3734 |
| feb. 2015 | Baja California Sur | 5162 |
| mar. 2015 | Baja California Sur | 6211 |
| abr. 2015 | Baja California Sur | 7084 |
| may. 2015 | Baja California Sur | 5628 |
| jun. 2015 | Baja California Sur | 4677 |
| jul. 2015 | Baja California Sur | 4382 |
| ago. 2015 | Baja California Sur | 3860 |
| sep. 2015 | Baja California Sur | 2372 |
| oct. 2015 | Baja California Sur | 4241 |
| nov. 2015 | Baja California Sur | 5107 |
| dic. 2015 | Baja California Sur | 5449 |
| ene. 2015 | Campeche | 72684 |
| feb. 2015 | Campeche | 63890 |
| mar. 2015 | Campeche | 69178 |
| abr. 2015 | Campeche | 63837 |
| may. 2015 | Campeche | 68300 |
| jun. 2015 | Campeche | 64826 |
| jul. 2015 | Campeche | 69743 |
| ago. 2015 | Campeche | 63043 |
| sep. 2015 | Campeche | 60924 |
| oct. 2015 | Campeche | 67777 |
| nov. 2015 | Campeche | 65289 |
| dic. 2015 | Campeche | 75414 |
| ene. 2015 | Colima | 8610 |
| feb. 2015 | Colima | 9274 |
| mar. 2015 | Colima | 8991 |
| abr. 2015 | Colima | 8768 |
| may. 2015 | Colima | 8907 |
| jun. 2015 | Colima | 9138 |
| jul. 2015 | Colima | 10139 |
| ago. 2015 | Colima | 9618 |
| sep. 2015 | Colima | 7327 |
| oct. 2015 | Colima | 8476 |
| nov. 2015 | Colima | 11974 |
| dic. 2015 | Colima | 12361 |
| ene. 2015 | Michoacan | 9435 |
| feb. 2015 | Michoacan | 6501 |
| mar. 2015 | Michoacan | 7625 |
| abr. 2015 | Michoacan | 8341 |
| may. 2015 | Michoacan | 8726 |
| jun. 2015 | Michoacan | 9761 |
| jul. 2015 | Michoacan | 10750 |
| ago. 2015 | Michoacan | 10927 |
| sep. 2015 | Michoacan | 7620 |
| oct. 2015 | Michoacan | 8827 |
| nov. 2015 | Michoacan | 9739 |
| dic. 2015 | Michoacan | 11815 |
| ene. 2015 | Nayarit | 8116 |
| feb. 2015 | Nayarit | 7062 |
| mar. 2015 | Nayarit | 8953 |
| abr. 2015 | Nayarit | 8664 |
| may. 2015 | Nayarit | 9437 |
| jun. 2015 | Nayarit | 9027 |
| jul. 2015 | Nayarit | 10253 |
| ago. 2015 | Nayarit | 9767 |
| sep. 2015 | Nayarit | 7739 |
| oct. 2015 | Nayarit | 8466 |
| nov. 2015 | Nayarit | 11416 |
| dic. 2015 | Nayarit | 14143 |
| ene. 2015 | Oaxaca | 17334 |
| feb. 2015 | Oaxaca | 11577 |
| mar. 2015 | Oaxaca | 15884 |
| abr. 2015 | Oaxaca | 15894 |
| may. 2015 | Oaxaca | 11757 |
| jun. 2015 | Oaxaca | 11203 |
| jul. 2015 | Oaxaca | 18877 |
| ago. 2015 | Oaxaca | 18476 |
| sep. 2015 | Oaxaca | 12871 |
| oct. 2015 | Oaxaca | 13666 |
| nov. 2015 | Oaxaca | 15626 |
| dic. 2015 | Oaxaca | 22165 |
| ene. 2015 | Puebla | 25670 |
| feb. 2015 | Puebla | 20105 |
| mar. 2015 | Puebla | 26338 |
| abr. 2015 | Puebla | 26544 |
| may. 2015 | Puebla | 26526 |
| jun. 2015 | Puebla | 27048 |
| jul. 2015 | Puebla | 32163 |
| ago. 2015 | Puebla | 31991 |
| sep. 2015 | Puebla | 26671 |
| oct. 2015 | Puebla | 28926 |
| nov. 2015 | Puebla | 29251 |
| dic. 2015 | Puebla | 29390 |
| ene. 2015 | Quintana Roo | 13153 |
| feb. 2015 | Quintana Roo | 11116 |
| mar. 2015 | Quintana Roo | 13653 |
| abr. 2015 | Quintana Roo | 14293 |
| may. 2015 | Quintana Roo | 13771 |
| jun. 2015 | Quintana Roo | 14341 |
| jul. 2015 | Quintana Roo | 15968 |
| ago. 2015 | Quintana Roo | 16101 |
| sep. 2015 | Quintana Roo | 14640 |
| oct. 2015 | Quintana Roo | 15178 |
| nov. 2015 | Quintana Roo | 18323 |
| dic. 2015 | Quintana Roo | 18840 |
| ene. 2015 | San Luis Potosi | 108 |
| feb. 2015 | San Luis Potosi | 205 |
| mar. 2015 | San Luis Potosi | 172 |
| abr. 2015 | San Luis Potosi | 89 |
| may. 2015 | San Luis Potosi | 158 |
| jun. 2015 | San Luis Potosi | 89 |
| jul. 2015 | San Luis Potosi | 162 |
| ago. 2015 | San Luis Potosi | 187 |
| sep. 2015 | San Luis Potosi | 139 |
| oct. 2015 | San Luis Potosi | 63 |
| nov. 2015 | San Luis Potosi | 91 |
| dic. 2015 | San Luis Potosi | 135 |
| ene. 2015 | Sonora | 19865 |
| feb. 2015 | Sonora | 17708 |
| mar. 2015 | Sonora | 22979 |
| abr. 2015 | Sonora | 22122 |
| may. 2015 | Sonora | 22481 |
| jun. 2015 | Sonora | 21101 |
| jul. 2015 | Sonora | 23661 |
| ago. 2015 | Sonora | 21932 |
| sep. 2015 | Sonora | 19394 |
| oct. 2015 | Sonora | 22670 |
| nov. 2015 | Sonora | 24752 |
| dic. 2015 | Sonora | 26699 |
| ene. 2015 | Tamaulipas | 17198 |
| feb. 2015 | Tamaulipas | 17159 |
| mar. 2015 | Tamaulipas | 21741 |
| abr. 2015 | Tamaulipas | 19004 |
| may. 2015 | Tamaulipas | 19349 |
| jun. 2015 | Tamaulipas | 21592 |
| jul. 2015 | Tamaulipas | 21631 |
| ago. 2015 | Tamaulipas | 20169 |
| sep. 2015 | Tamaulipas | 21701 |
| oct. 2015 | Tamaulipas | 24095 |
| nov. 2015 | Tamaulipas | 21250 |
| dic. 2015 | Tamaulipas | 20899 |
| ene. 2015 | Veracruz | 4490 |
| feb. 2015 | Veracruz | 5368 |
| mar. 2015 | Veracruz | 5756 |
| abr. 2015 | Veracruz | 5410 |
| may. 2015 | Veracruz | 5130 |
| jun. 2015 | Veracruz | 5450 |
| jul. 2015 | Veracruz | 5501 |
| ago. 2015 | Veracruz | 5021 |
| sep. 2015 | Veracruz | 4276 |
| oct. 2015 | Veracruz | 4666 |
| nov. 2015 | Veracruz | 4928 |
| dic. 2015 | Veracruz | 4579 |
AeropuertoVSSumatotal %>%
kable(caption = "Totales de pasajeros por aeropuerto") %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
| Descripcion | Total.nacionales | Total.internacionales |
|---|---|---|
| Campeche | 178710 | 3041 |
| Chetumal | 179259 | 118 |
| Ciudad del Carmen | 591154 | 32000 |
| Ciudad Obregon | 238409 | 7083 |
| Ciudad Victoria | 73491 | 1665 |
| Colima | 112656 | 927 |
| Guaymas | 12757 | 4138 |
| Loreto | 12602 | 45305 |
| Matamoros | 96947 | 707 |
| Nogales | 2622 | 355 |
| Nuevo Laredo | 72688 | 290 |
| Poza Rica | 60575 | 0 |
| Puebla | 264755 | 63056 |
| Puerto Escondido | 181706 | 3624 |
| Tamuin | 1598 | 0 |
| Tehuacan | 2812 | 0 |
| Tepic | 113043 | 0 |
| Uruapan | 95635 | 14432 |
Tomando esto en cuenta comenzaremos un análisis visual de los datos.
ggplot(datos1, aes(x = Pasajeros.nacionales)) +
geom_histogram(binwidth = 5000, fill = "#4c78a8", color = "white") +
labs(title = "Distribución de pasajeros nacionales",
x = "Pasajeros nacionales", y = "Frecuencia") +
theme_minimal(base_size = 13)
La distribución de los pasajeros conforma nuestra sospecha de que hay
una mayor concentración de registros con cantidades pequeñas de
pasajeros mensuales registrados.
ggplot(totales, aes(x = reorder(Estado, Total.general))) +
geom_col(aes(y = Total.nacionales, fill = "Nacionales")) +
geom_col(aes(y = Total.internacionales, fill = "Internacionales")) +
scale_fill_manual(values = c("Nacionales" = "#1f77b4", "Internacionales" = "#ff7f0e")) +
coord_flip() +
labs(title = "Total de pasajeros por estado",
x = "Estado", y = "Pasajeros", fill = "Tipo") +
theme_minimal(base_size = 13)
El total de pasajeros por estado nos muestra que el estado con mayor
número de pasajeros registrados es campeche y que, como se especulaba al
inicio, es mucho mayor el número de vuelos nacionales que
internacionales.
ggplot(promedios, aes(x = reorder(Descripcion, Prom.nacionales))) +
geom_col(aes(y = Prom.nacionales, fill = "Nacionales")) +
geom_col(aes(y = Prom.internacionales, fill = "Internacionales")) +
scale_fill_manual(values = c("Nacionales" = "#1f77b4", "Internacionales" = "#ff7f0e")) +
coord_flip() +
labs(title = "Promedio mensual de pasajeros por aeropuerto",
x = "Código IATA", y = "Pasajeros promedio", fill = "Tipo") +
theme_minimal(base_size = 13)
Observamos que los aeropuertos aparentan mantener el orden que, en la
gráfica anterior, convendría revisar cual es el aporte de pasajeros que
dan a su estado correspondiente, para esto haremos un breve inciso:
# Evaluamos la aportación que tiene cada estado al número de pasajeros
aportacion_por_aeropuerto <- datos1 %>%
group_by(Estado, Descripcion) %>%
summarise(
Total.aeropuerto = sum(Pasajeros.nacionales + Pasajeros.internacionales),
.groups = "drop"
) %>%
left_join(
datos1 %>%
group_by(Estado) %>%
summarise(Total.estado = sum(Pasajeros.nacionales + Pasajeros.internacionales)),
by = "Estado"
) %>%
mutate(
Porcentaje = round(100 * Total.aeropuerto / Total.estado, 2)
) %>%
arrange(desc(Total.estado))
# graficamos:
ggplot(aportacion_por_aeropuerto, aes(x = Estado, y = Total.aeropuerto, fill = Descripcion)) +
geom_col() +
labs(title = "Aportación de cada aeropuerto al total de pasajeros por estado",
x = "Estado", y = "Pasajeros", fill = "Aeropuerto") +
theme_minimal(base_size = 13) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Ahora observamos como no todos los aeropuertos aportan la misma
cantidad, lo cual indica que según sea lo que se explore se debe tomar
en cuenta el estado o el aeropuerto.
ggplot(mensuales, aes(x = Anio.mes, y = Total.mensual, color = Estado)) +
geom_line(size = 1) +
scale_x_yearmon(n = 12, format = "%b %Y") +
labs(title = "Evolución mensual de pasajeros por estado",
x = "Mes", y = "Total mensual de pasajeros", color = "Estado") +
theme_minimal(base_size = 13) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
La evolución mensual por estado nos muestra como la cantidad de
pasajeros pareciera ser estable con leves picos en la temporada
vacacional de julio a agosto así como de noviembre a enero y un leve
decaimiento en febrero (posible efecto “cuesta de enero”).
ggplot(datos1, aes(x = as.factor(Anio.mes), y = Pasajeros.nacionales)) +
geom_boxplot(fill = "#4c78a8", alpha = 0.8) +
labs(title = "Dispersión mensual de pasajeros nacionales",
x = "Mes", y = "Pasajeros nacionales") +
theme_minimal(base_size = 13) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Los boxplots muestran cómo, ignorando los datos atípicos (posiblemente
campeche), se tienen comportamientos de pasajeros muy estables
ggplot(datos1, aes(x = Pasajeros.nacionales, y = Pasajeros.internacionales)) +
geom_point(alpha = 0.6, color = "#1f77b4") +
labs(title = "Relación entre pasajeros nacionales e internacionales",
x = "Pasajeros nacionales", y = "Pasajeros internacionales") +
theme_minimal(base_size = 13)
La grafica de puntos sugiere una leve correlación entre el número de
pasajeros, es decir que los aeropuertos suelen tener la misma proporción
de pasajeros internacionales que nacionales, evaluaremos esto rápido con
lo siguiente:
datos1 <- datos1 %>%
mutate(Proporcion = Pasajeros.nacionales / Pasajeros.internacionales) %>%
filter(is.finite(Proporcion)) # Elimina NA, Inf, -Inf
ggplot(datos1, aes(x = Anio.mes, y = Proporcion)) +
geom_point(alpha = 0.6, color = "#1f77b4") +
geom_smooth(method = "loess", se = FALSE, color = "gray40") +
labs(title = "Proporción internacional/nacional a lo largo del tiempo",
x = "Mes", y = "Proporción") +
theme_minimal(base_size = 13)
## Warning: The `trans` argument of `continuous_scale()` is deprecated as of ggplot2 3.5.0.
## ℹ Please use the `transform` argument instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `geom_smooth()` using formula = 'y ~ x'
si bien observamos datos atípicos aparentemente contamos con
proporciones constantes