#UNIVERSIDAD CENTRAL DEL ECUADOR #ANALISIS ESTADISTICO DE LA CALIDAD DE AIRE EN LA INDIA

# 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 (2).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)

# Crear la tabla con las frecuencias y los porcentajes
State <- TDF_State$State
TDF_State <- data.frame(State, ni, hi)

# Agregar fila total
Summary <- data.frame(State = "TOTAL", ni = sum(ni), hi = 100)
TDF_State_suma <- rbind(TDF_State, Summary)

# Cambiar nombres de las columnas
colnames(TDF_State_suma) <- c("State", "ni", "hi(%)")


View(TDF_State_suma)


TDF_State_suma %>%
  gt() %>%
  # Agregar el título y subtítulo a la tabla
  tab_header(
    title = md("*Tabla Nro. 2*"),
    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. 2
Distribución de frecuencias de registros de calidad de aire por Estado
State ni hi(%)
Andhra Pradesh 2413 8.17
Assam 502 1.70
Bihar 1858 6.29
Chandigarh 304 1.03
Delhi 2009 6.80
Gujarat 2009 6.80
Haryana 1679 5.69
Jharkhand 1169 3.96
Karnataka 2009 6.80
Kerala 1436 4.86
Madhya Pradesh 289 0.98
Maharashtra 2009 6.80
Meghalaya 310 1.05
Mizoram 113 0.38
Odisha 1863 6.31
Punjab 1221 4.13
Rajasthan 1114 3.77
Tamil Nadu 2395 8.11
Telangana 2006 6.79
Uttar Pradesh 2009 6.80
West Bengal 814 2.76
TOTAL 29531 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"

TDF_zona <- data.frame(table(tabla$Zona))

colnames(TDF_zona) <- c("Zona", "ni")

# Calculamos el porcentaje de cada zona con respecto al total

TDF_zona$hi <- round((TDF_zona$ni / sum(TDF_zona$ni)) * 100, 2)

print(TDF_zona)
##     Zona ni    hi
## 1 Centro  4 19.05
## 2   Este  7 33.33
## 3  Norte  3 14.29
## 4  Oeste  5 23.81
## 5    Sur  2  9.52
install.packages("kableExtra")
library(kableExtra)

# Crear la tabla con las frecuencias y porcentajes

TDF_zona <- data.frame(table(tabla$Zona))

colnames(TDF_zona) <- c("Zona", "ni")

# Calculamos el porcentaje de cada zona con respecto al total

TDF_zona$hi <- round((TDF_zona$ni / sum(TDF_zona$ni)) * 100, 2)

# Crear la fila de total

Sumatoria <- data.frame(Zona = "TOTAL", ni = sum(TDF_zona$ni), hi = 100)

# Combinar la fila total con el resto de la tabla

TDF_zona_final <- rbind(TDF_zona, Sumatoria)

# Nombrar columnas
colnames(TDF_zona_final) <- c("Zona", "ni", "hi (%)")

# Mostrar la tabla con formato y título

library(knitr)
library(kableExtra)

kable(TDF_zona_final, align = 'c', 
      caption = "Tabla N°3: Distribución de Frecuencias de las Zonas
      agrupadas en el estudio de la Calidad de Aire en la India") %>%
  kable_styling(full_width = FALSE, position = "center", 
                bootstrap_options = c("striped", "hover", "condensed"))
Tabla N°3: Distribución de Frecuencias de las Zonas agrupadas en el estudio de la Calidad de Aire en la India
Zona ni hi (%)
Centro 4 19.05
Este 7 33.33
Norte 3 14.29
Oeste 5 23.81
Sur 2 9.52
TOTAL 21 100.00
# Diagrama de barras locales

# Eliminar la fila "TOTAL" de la tabla

TDF_zonas_sintotal <- TDF_zona_final[TDF_zona_final$Zona != "TOTAL", ]

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 = "green",
        ylim = c(0, 10),  
        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 = "orange",
        ylim = c(0,40),  
        las = 2,  
        cex.names = 0.6,  
        names.arg = TDF_zonas_sintotal$Zona)  

# Diagrama de barras global

barplot(TDF_zonas_sintotal$ni, 
main = "Gráfica N°3: Distribución de los estados 
        agrupados por zona en el Estudio de la Calidad de Aire en la India",
        xlab = "Región",
        ylab = "Cantidad",
        col = "yellow",
        ylim = c(0,4000),
        las=2,
        cex.names = 0.6,
        names.arg = TDF_zonas_sintotal$Zona)

#Diagrama de barras con los procentajes (Global)

barplot(TDF_zonas_sintotal$hi,
main = "Gráfica N°4: Distribución de los estados  
agrupados por ona en el Estudio de la Calidad de Aire en la India",
        xlab = "Región",
        ylab = "Porcentaje (%)",
        col = "red",
        ylim = c(0,100),
        las = 3,
        cex.names = 0.6,
        names.arg = TDF_zonas_sintotal$Zona)

# Diagrama circular
labels_info <- sprintf("%.2f%%", TDF_zonas_sintotal$hi)

pie(TDF_zonas_sintotal$hi, 
    main = "Gráfica N°5: Distribución de los estados agrupados
    por zona en el Estudio de la Calidad de Aire en la India",
    radius = 1.0,
    labels = labels_info, 
    col = heat.colors(length(TDF_zonas_sintotal$hi)), 
    cex = 0.9,
    cex.main = 1)

# Añadir la leyenda
legend("topright",
       legend = TDF_zonas_sintotal$Zona,  
       fill = heat.colors(length(TDF_zonas_sintotal$hi)), 
       cex = 0.8,
       title = "Leyenda")