# Tema: Estadística Descriptiva
# Autor: Camila Zambrano
# Fecha: 28/05/2026

0. Carga de librerías

library(knitr)
library(kableExtra)
library(readr)
library(gt)
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following object is masked from 'package:kableExtra':
## 
##     group_rows
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union

1. Leer datos

setwd("~/CAMILA")
datos <- read.csv("Datos cambiados..csv",
                  header = TRUE, 
                  sep = ",", dec = "." )

2. Selección de la variable

estado <- datos$State

3. Conteo (frecuencia)

TDF_estado <- data.frame(table(estado))
# Frecuencia absoluta
ni <- TDF_estado$Freq
# Frecuencia relativa
hi <- round((ni / sum(ni)) * 100, 2)

4. Tabla de distribución de frecuencia

estado <- TDF_estado$estado
TDF_estado <- data.frame(estado, ni, hi)

# Agregra fila total
sumatoria <- data.frame(
  estado = "TOTAL",
  ni = sum(ni),
  hi = 100
)

TDF_estado_suma <- rbind(TDF_estado,
                         sumatoria)

colnames(TDF_estado_suma) <- c("estado",
                               "ni", "hi")

View(TDF_estado_suma)

TDF_estado_suma %>%
  gt() %>%
  
    tab_header(
    title = md("*Tabla N°1*"),
    subtitle = md("**Distribución de
    frecuencias de registros de calidad de
    aire en India por Estado**")
  ) %>%

    tab_source_note(
    md("Autor: Grupo 1")
  ) %>%

    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 N°1
Distribución de frecuencias de registros de calidad de aire en India por Estado
estado 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
Autor: Grupo 1

Agrupación por zonas

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.

tabla <- data.frame(
  estado = 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$estado %in% c("Uttar Pradesh", "Haryana", "Delhi"),
                     "Norte",
                     ifelse(tabla$estado %in% c("Gujarat", "Rajasthan", "Maharashtra", "Goa", 
                                                "Chandigarh", "Punjab"),
                            "Oeste",
                            ifelse(tabla$estado %in% c("Tamil Nadu", "Kerala"),
                                   "Sur",
                                   ifelse(tabla$estado %in% c("Bihar", "Odisha", "Assam", 
                                                              "WestBengal", "Jharkhand", 
                                                              "Meghalaya", "Mizoram", "Tripura"),
                                          "Este", 
                                          ifelse(tabla$estado %in% c("Madhya Pradesh",
                                                                     "Telangana", "Karnataka", 
                                                                     "Andhra Pradesh"),
                                                                     "Centro", NA)))))

# Verificar la asignación correcta de zonas
table(tabla$estado, 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    0     0     0   0
# Contar las frecuencias de cada zona en la columna "Zona"
datos_zona <- datos %>%
  left_join(tabla, by = c("State" = "estado")) %>%
  rename(Zona = Zona.y) %>%     
  select(-Zona.x)

TDF_zona_final <- datos_zona %>%
  filter(!is.na(Zona)) %>%
  count(Zona, name = "ni") %>%
  mutate(hi = round(ni / sum(ni) * 100, 2))

TDF_zona_final <- TDF_zona_final %>% 
  filter(Zona != "TOTAL")

TDF_zona_final <- bind_rows(
  TDF_zona_final,
  data.frame(
    Zona = "TOTAL",
    ni = 29531,
    hi = 100
  )
)


TDF_zona_final$hi[TDF_zona_final$Zona == "TOTAL"] <- 100
TDF_zona_final <- TDF_zona_final %>% dplyr::select(Zona, ni, hi)

TDF_zona_final %>%
  gt() %>%
  tab_header(
    title = md("*Tabla N°2*"),
    subtitle = md("**Distribución de frecuencias de las Zonas agrupadas en el 
                  estudio de la calidad de aire en India**")
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo 1")
  ) %>%
  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 N°2
Distribución de frecuencias de las Zonas agrupadas en el estudio de la calidad de aire en India
Zona ni hi
Centro 6717 23.39
Este 5815 20.25
Norte 5697 19.84
Oeste 6657 23.18
Sur 3831 13.34
TOTAL 29531 100.00
Autor: Grupo 1

5. Gráficas de distribución de frecuencia

5.1 Histograma

Diagrama de barras general

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 del aire en India",
        xlab = "Zona",  
        ylab = "Cantidad",
        col = "skyblue",
        las = 1,  
        cex.names = 0.6,  
        names.arg = TDF_zonas_sintotal$Zona)  

Diagrama de barras con relación al todo

barplot(TDF_zonas_sintotal$ni, 
        main = "Gráfica N°2: Distribución de las zonas agrupadas en el
        estudio de la calidad del aire en India",
        xlab = "Zona",
        col = "pink",
        ylim = c(0 , 29531),
        las = 1,  
        cex.names = 0.6,  
        names.arg = TDF_zonas_sintotal$Zona)  

title(ylab = "Cantidad", mgp = c(3.5, 1, 0))

Diagrama de barras porcentual general

barplot(TDF_zonas_sintotal$hi, 
        main = "Gráfica N°3: Distribución porcentual de las zonas agrupadas
        en el estudio de la calidad del aire en India",
        xlab = "Zona",  
        ylab = "Porcentaje",
        col = "skyblue",
        las = 1,  
        cex.names = 0.6,  
        names.arg = TDF_zonas_sintotal$Zona)  

Diagrama de barras porcentual con relación al todo

barplot(TDF_zonas_sintotal$hi, 
        main = "Gráfica N°4: Distribución de las zonas agrupadas en el
        estudio de la calidad del aire en India",
        xlab = "Zona",  
        ylab = "Porcentaje",
        col = "pink",
        ylim = c(0 , 100),
        las = 1,  
        cex.names = 0.6,  
        names.arg = TDF_zonas_sintotal$Zona)  

5.2 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 zonas en el
    estudio de la calidad del aire en India",
    radius = 1.0,
    labels = labels_info,
    col = heat.colors(length(
      TDF_zonas_sintotal$hi)),
    cex = 0.9,
    cex.main = 1)

legend("topright",
       legend = TDF_zonas_sintotal$Zona,
       fill = 
         heat.colors(length(
           TDF_zonas_sintotal$hi)),
       cex = 0.8,
       title = "Leyenda")

6.Indicadores Estadísticos

6.1 Indocadores de tendencia central

frecuencia_max <- max(TDF_zonas_sintotal$ni)
modas <- TDF_zonas_sintotal$Zona[
  TDF_zonas_sintotal$ni == frecuencia_max]
Mo_zona <- paste(modas)
Mo_zona
## [1] "Centro"
tabla_indicadores <- data.frame(
  "Variable" = c("Zona"),
  "Rango" = "-",
  "X" = "-",
  "Me" = "-",
  "Mo" = c(Mo_zona),
  "V" = "-",
  "Sd" = "-",
  "Cv" = "-",
  "As" = "-",
  "K" = "-",
  "Valores Atipicos" = "-")

library(knitr)
kable(tabla_indicadores, align = 'c',
caption = "Conclusiones de la variable Estado")
Conclusiones de la variable Estado
Variable Rango X Me Mo V Sd Cv As K Valores.Atipicos
Zona - - - Centro - - - - - -

7. Conclusiones

El valor más frecuente de la variable Estado se encuentra en la Zona Centro.