UNIVESIDAD CENTRAL DEL ECUADOR, FIGEMPA-INGENIERÍA AMBIENTAL
# Lista de paquetes necesarios
required_packages <- c("dplyr", "ggplot2", "kableExtra", "gt", "magrittr", "tidyr")
# Instalar los paquetes que faltan
new_packages <- required_packages[!(required_packages %in% installed.packages()[,"Package"])]
if(length(new_packages)) install.packages(new_packages)
# Cargar todos los paquetes necesarios
lapply(required_packages, library, character.only = TRUE)
## [[1]]
## [1] "dplyr" "stats" "graphics" "grDevices" "utils" "datasets"
## [7] "methods" "base"
##
## [[2]]
## [1] "ggplot2" "dplyr" "stats" "graphics" "grDevices" "utils"
## [7] "datasets" "methods" "base"
##
## [[3]]
## [1] "kableExtra" "ggplot2" "dplyr" "stats" "graphics"
## [6] "grDevices" "utils" "datasets" "methods" "base"
##
## [[4]]
## [1] "gt" "kableExtra" "ggplot2" "dplyr" "stats"
## [6] "graphics" "grDevices" "utils" "datasets" "methods"
## [11] "base"
##
## [[5]]
## [1] "magrittr" "gt" "kableExtra" "ggplot2" "dplyr"
## [6] "stats" "graphics" "grDevices" "utils" "datasets"
## [11] "methods" "base"
##
## [[6]]
## [1] "tidyr" "magrittr" "gt" "kableExtra" "ggplot2"
## [6] "dplyr" "stats" "graphics" "grDevices" "utils"
## [11] "datasets" "methods" "base"
# Estadística Descriptiva
# Llumitasig Daniela
# 19/11/2025
# Cargar las librerías necesarias
library(gt)
library(dplyr)
# Cargar los datos
datos <- read.csv("city_day.csv", header = TRUE, dec = ".", sep = ",")
# Tablas Cualitativas Nominales
# Estado
State <- datos$State
# Tabla de distribución de frecuencia
TDF_State <- data.frame(table(State))
ni <- TDF_State$Freq
hi <- round((ni / sum(ni)) * 100, 2)
hip<-round((ni / sum(ni)) * 100, 2)
# Crear la tabla con las frecuencias y los porcentajes
State <- TDF_State$State
TDF_State <- data.frame(State, ni, hi,hip)
# Agregar fila total
Summary <- data.frame(State = "TOTAL", ni = sum(ni), hi = 100,hip=100)
TDF_State_suma <- rbind(TDF_State, Summary)
# Cambiar nombres de las columnas
colnames(TDF_State_suma) <- c("State", "ni", "hi(%)", "P")
View(TDF_State_suma)
TDF_State_suma %>%
gt() %>%
# Agregar el título y subtítulo a la tabla
tab_header(
title = md("*Tabla Nro. 1*"),
subtitle = md("Distribución de frecuencias de registros de calidad de aire por Estado")
) %>%
# Agregar la fuente
tab_source_note(
md("**Fuente:** Datos procesados por el autor a partir del archivo *city_day.csv*")
) %>%
# Estilo para los bordes de las celdas
tab_style(
style = cell_borders(
sides = c("top", "bottom"),
color = "black",
weight = px(2),
style = "solid"
),
locations = cells_column_labels()
) %>%
tab_options(
table.border.top.color = "black",
table.border.bottom.color = "black",
table.border.top.style = "solid",
table.border.bottom.style = "solid",
column_labels.border.top.color = "black",
column_labels.border.bottom.color = "black",
column_labels.border.bottom.width = px(2),
row.striping.include_table_body = TRUE,
heading.border.bottom.color = "black",
heading.border.bottom.width = px(2),
table_body.hlines.color = "gray",
table_body.border.bottom.color = "black"
)
| Tabla Nro. 1 |
| Distribución de frecuencias de registros de calidad de aire por Estado |
| State |
ni |
hi(%) |
P |
| Andhra Pradesh |
2413 |
8.17 |
8.17 |
| Assam |
502 |
1.70 |
1.70 |
| Bihar |
1858 |
6.29 |
6.29 |
| Chandigarh |
304 |
1.03 |
1.03 |
| Delhi |
2009 |
6.80 |
6.80 |
| Gujarat |
2009 |
6.80 |
6.80 |
| Haryana |
1679 |
5.69 |
5.69 |
| Jharkhand |
1169 |
3.96 |
3.96 |
| Karnataka |
2009 |
6.80 |
6.80 |
| Kerala |
1436 |
4.86 |
4.86 |
| Madhya Pradesh |
289 |
0.98 |
0.98 |
| Maharashtra |
2009 |
6.80 |
6.80 |
| Meghalaya |
310 |
1.05 |
1.05 |
| Mizoram |
113 |
0.38 |
0.38 |
| Odisha |
1863 |
6.31 |
6.31 |
| Punjab |
1221 |
4.13 |
4.13 |
| Rajasthan |
1114 |
3.77 |
3.77 |
| Tamil Nadu |
2395 |
8.11 |
8.11 |
| Telangana |
2006 |
6.79 |
6.79 |
| Uttar Pradesh |
2009 |
6.80 |
6.80 |
| West Bengal |
814 |
2.76 |
2.76 |
| TOTAL |
29531 |
100.00 |
100.00 |
| Fuente: Datos procesados por el autor a partir del archivo city_day.csv |
# Se agruparon los estados en diferentes zonas para simplificar y organizar los datos, ya que el número de valores que puede tomar la variable 'State' excedió el límite de representaciones posibles en un diagrama de barras.
# Crear columna Zona usando ifelse
# Crear el data frame con los 21 estados
tabla <- data.frame(
State = c(
"Andhra Pradesh", "Assam", "Bihar", "Chandigarh", "Delhi", "Gujarat",
"Haryana", "Jharkhand", "Karnataka", "Kerala", "Madhya Pradesh", "Maharashtra",
"Meghalaya", "Mizoram", "Odisha", "Punjab", "Rajasthan", "Tamil Nadu",
"Telangana", "Uttar Pradesh", "West Bengal"
)
)
# Asignar las zonas correspondientes a cada estado usando ifelse
tabla$Zona <- ifelse(tabla$State %in% c("Uttar Pradesh", "Haryana", "Delhi"),
"Norte",
ifelse(tabla$State %in% c("Gujarat", "Rajasthan", "Maharashtra", "Goa", "Chandigarh", "Punjab"),
"Oeste",
ifelse(tabla$State %in% c("Tamil Nadu", "Kerala"),
"Sur",
ifelse(tabla$State %in% c("Bihar", "Odisha", "Assam", "West Bengal", "Jharkhand", "Meghalaya", "Mizoram", "Tripura"),
"Este",
ifelse(tabla$State %in% c("Madhya Pradesh", "Telangana", "Karnataka", "Andhra Pradesh"),
"Centro", NA)))))
# Verificar la asignación correcta de zonas
table(tabla$State, tabla$Zona)
##
## Centro Este Norte Oeste Sur
## Andhra Pradesh 1 0 0 0 0
## Assam 0 1 0 0 0
## Bihar 0 1 0 0 0
## Chandigarh 0 0 0 1 0
## Delhi 0 0 1 0 0
## Gujarat 0 0 0 1 0
## Haryana 0 0 1 0 0
## Jharkhand 0 1 0 0 0
## Karnataka 1 0 0 0 0
## Kerala 0 0 0 0 1
## Madhya Pradesh 1 0 0 0 0
## Maharashtra 0 0 0 1 0
## Meghalaya 0 1 0 0 0
## Mizoram 0 1 0 0 0
## Odisha 0 1 0 0 0
## Punjab 0 0 0 1 0
## Rajasthan 0 0 0 1 0
## Tamil Nadu 0 0 0 0 1
## Telangana 1 0 0 0 0
## Uttar Pradesh 0 0 1 0 0
## West Bengal 0 1 0 0 0
# Contamos las frecuencias de cada zona en la columna "Zona"
library(dplyr)
library(knitr)
library(kableExtra)
# 1) Une la zona a cada registro real del dataset (usa la Zona del diccionario)
datos_zona <- datos %>%
left_join(tabla, by = "State") %>%
rename(Zona = Zona.y) %>% # esta es la zona que tú creaste
select(-Zona.x) # elimina la zona vieja del dataset
# 2) Tabla de frecuencias por Zona (tamaño muestral real)
TDF_zona_final <- datos_zona %>%
filter(!is.na(Zona)) %>%
count(Zona, name = "ni") %>%
mutate(`hi (%)` = round(ni / sum(ni) * 100, 2),
P = `hi (%)`)
# 3) Asegurar que no exista un TOTAL previo (evita duplicados)
TDF_zona_final <- TDF_zona_final %>%
filter(Zona != "TOTAL")
# Agregar UNA sola fila TOTAL
TDF_zona_final <- bind_rows(
TDF_zona_final,
data.frame(
Zona = "TOTAL",
ni = sum(TDF_zona_final$ni),
`hi (%)` = 100,
`P`=100
)
)
TDF_zona_final$`hi (%)`[TDF_zona_final$Zona == "TOTAL"] <- 100
TDF_zona_final <- TDF_zona_final %>% dplyr::select(Zona, ni, `hi (%)`,`P`)
TDF_zona_final %>%
gt() %>%
tab_header(
title = md("*Tabla Nro. 2*"),
subtitle = md("** Distribución de Frecuencias de las Zonas agrupadas en el estudio de la Calidad de Aire en la India**")
) %>%
tab_source_note(
source_note = md("Datos procesados por el autor a partir del archivo *city_day.csv*")
) %>%
tab_options(
table.border.top.color = "black",
table.border.bottom.color = "black",
table.border.top.style = "solid",
table.border.bottom.style = "solid",
column_labels.border.top.color = "black",
column_labels.border.bottom.color = "black",
column_labels.border.bottom.width = px(2),
row.striping.include_table_body = TRUE,
heading.border.bottom.color = "black",
heading.border.bottom.width = px(2),
table_body.hlines.color = "gray",
table_body.border.bottom.color = "black"
)
| Tabla Nro. 2 |
| ** Distribución de Frecuencias de las Zonas agrupadas en el estudio de la Calidad de Aire en la India** |
| Zona |
ni |
hi (%) |
P |
| Centro |
6717 |
22.75 |
22.75 |
| Este |
6629 |
22.45 |
22.45 |
| Norte |
5697 |
19.29 |
19.29 |
| Oeste |
6657 |
22.54 |
22.54 |
| Sur |
3831 |
12.97 |
12.97 |
| TOTAL |
29531 |
100.00 |
100.00 |
| Datos procesados por el autor a partir del archivo city_day.csv |
# Diagrama de barras locales
# Eliminar la fila "TOTAL" de la tabla
TDF_zonas_sintotal <- TDF_zona_final[TDF_zona_final$Zona != "TOTAL", ]
par(mar = c(5, 5, 6, 2))
barplot(TDF_zonas_sintotal$ni,
main = "Gráfica N°1: Distribución de las zonas agrupadas
en el Estudio de la Calidad de Aire en la India",
xlab = "Zona",
ylab = "Cantidad",
col = "skyblue",
ylim = c(0, 6000),
las = 2,
cex.names = 0.6,
names.arg = TDF_zonas_sintotal$Zona)

# Diagrama de barras con los porcentajes
barplot(TDF_zonas_sintotal$hi,
main = "Gráfica N°2: Distribución de las zonas agrupadas
en el Estudio de la Calidad de Aire en la India",
xlab = "Zona",
ylab = "Porcentaje (%)",
col = "skyblue",
ylim = c(0,30),
las = 2,
cex.names = 0.6,
names.arg = TDF_zonas_sintotal$Zona)

#GDF probabilidad
barplot(TDF_zonas_sintotal$`hi (%)`,
main = "Gráfica N°4: Distribución de probabilidad estados agrupados
por zona en el Estudio de la Calidad de Aire en la India",
xlab = "Zona",
ylab = "Probabilidad(%)",
col = "blue",
ylim = c(0,100),
las = 3,
cex.names = 0.6,
names.arg = TDF_zonas_sintotal$Zona)

#La zona centro constituye la categoría más probable, al presentar la mayor frecuencia relativa dentro de la variable nominal Zona.
x <- round((TDF_zona_final$ni[TDF_zona_final$`Zona` == "Centro"] / 29531) * 100, 2)
print(paste("La probabilidad es de:", x, "%"))
## [1] "La probabilidad es de: 22.75 %"