#Estadística descriptiva 
#Variable cualitativa nominal:Zona
#Autor: Llumitasig Daniela 
#Fecha: 30/05/2026

0.- Carga de librerías

library(gt)
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(RColorBrewer) 

1.- Carga de datos

datos <- read.csv("~/Estadistica/Proyecto 2026/Datos utilizados/city_day (1).csv",
                  header = TRUE,
                  dec = ".",
                  sep = ",")

2.- Selección de la variable

Zona <- datos$Zona

3.- Frecuencia

# Tabla de distribución de frecuencia (TDF)
TDF_Zona <- data.frame(table(Zona))

# Cálculo de frecuencias
ni <- TDF_Zona$Freq
hi <- round((ni / sum(ni)) * 100, 2)
Zona <- TDF_Zona$Zona

TDF_Zona <- data.frame(Zona, ni, hi)

# Fila de resumen (TOTAL)
Summary <- data.frame(Zona = "TOTAL", ni = sum(ni), hi = 100)
TDF_Zona_suma <- rbind(TDF_Zona, Summary)

colnames(TDF_Zona_suma) <- c("Zona", "ni", "hi(%)")

4.- Tabla de distribución de frecuencias

TDF_Zona_suma %>%
  gt() %>%
  tab_header(
    title = md("Tabla Nro. 1"),
    subtitle = md("Distribución de frecuencias de la variable Zona para el análisis
                  estadístico de la calidad del aire en la India.")
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo 1
                     \n Fuente:https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india ")
  ) %>%
  # --- Estilos de Borde ---
  tab_style(
    style = cell_borders(sides = "left", color = "black", weight = px(2), style = "solid"),
    locations = cells_body()
  ) %>%
  tab_style(
    style = cell_borders(sides = "right", color = "black", weight = px(2), style = "solid"),
    locations = cells_body()
  ) %>%
  tab_style(
    style = cell_borders(sides = "left", color = "black", weight = px(2), style = "solid"),
    locations = cells_column_labels()
  ) %>%
  tab_style(
    style = cell_borders(sides = "right", color = "black", weight = px(2), style = "solid"),
    locations = cells_column_labels()
  ) %>%
  # --- Opciones Generales de la Tabla ---
  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 la variable Zona para el análisis estadístico de la calidad del aire en la India.
Zona ni hi(%)
Centro 289 0.98
Este 7873 26.66
Oeste 21369 72.36
TOTAL 29531 100.00
Autor: Grupo 1

Fuente:https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india

5.- Gráficos de distribución de frecuencia

Diagrama de barras local

#Diagrama de barras local


library(RColorBrewer)

# Colores suaves
n <- length(TDF_Zona$Zona)
colores <- brewer.pal(min(max(n,3), 8), "Set2")

par(mar = c(5,5, 5, 2))
# Crear gráfico
barplot(
  height = TDF_Zona$ni,
  names.arg = TDF_Zona$Zona,
  
  # Títulos
  main = "Gráfica Nro. 1\nDistribución de la variable Zona\npara el análisis estadístico de la calidad del aire en la India (2015-2020)",
  
  
  # Diseño
  col = colores,
  border = "white",
  
  # Texto
  las = 2,
  cex.names = 0.9,
  cex.main = 1,
  cex.lab = 1,
  
  # Tamaño barras
  width = 0.7,
  
  # Espaciado
  space = 0.3
)
title(xlab = "Zona", line = 4)
mtext(
  "Frecuencia",
  side = 2,
  line = 4
)

# Líneas de fondo
grid(
  nx = NA,
  ny = NULL,
  col = "gray80",
  lty = 1
  
)

Diagrama de barras global

library(RColorBrewer)
# Colores suaves
n <- length(TDF_Zona$Zona)
colores <- brewer.pal(min(max(n,3), 8), "Set2")

# Valor máximo
max_y_global <- max(TDF_Zona$ni) + 500
 
par(mar = c(5,5, 5, 2))
# Crear gráfico
barplot(
  height = TDF_Zona$ni,
  
  # Etiquetas
  names.arg = TDF_Zona$Zona,
  
  # Títulos
  main = "Gráfica Nro. 2\nDistribución de la variable Zona\npara el análisis estadístico de la calidad del aire en la India (2015-2020)",
  
  # Diseño
  col = colores,
  border = "white",
  
  # Escala
  ylim = c(0,30000),
  
  # Texto
  las = 2,
  cex.names = 0.9,
  cex.main = 1,
  cex.lab = 1,
  
  # Barras
  width = 0.7,
  space = 0.3
)


title(xlab = "Zona", line = 4)
mtext(
  "Frecuencia",
  side = 2,
  line = 4
)
# Líneas de fondo
grid(
  nx = NA,
  ny = NULL,
  col = "gray80",
  lty = 1
)

Diagrama local procentual

#Grafica porcentaje

library(RColorBrewer)

# Colores suaves
n <- length(TDF_Zona$Zona)
colores <- brewer.pal(min(max(n,3), 8), "Set2")
 
par(mar = c(5,5, 5, 2))
# Crear gráfico
barplot(
  TDF_Zona$hi,
  
  # Etiquetas
  names.arg = TDF_Zona$Zona,
  
  # Títulos
  main = "Gráfica Nro. 3\nDistribución de la variable Zona\npara el análisis estadístico de la calidad del aire en la India (2015-2020)",

  
  # Diseño
  col = colores,
  border = "white",
  
  # Escala
  ylim = c(0, max(TDF_Zona$hi) + 5),
  
  # Texto
  las = 2,
  cex.names = 0.9,
  cex.main = 1,
  cex.lab = 1,
  
  # Barras
  width = 0.7,
  space = 0.3
)

title(xlab = "Zona", line = 4)
mtext(
  "Frecuencia",
  side = 2,
  line = 4
)

# Líneas de fondo
grid(
  nx = NA,
  ny = NULL,
  col = "gray80",
  lty = 1
)

Digarama global porcentual

# Diagrama de barras con relación a la totalidad porcentualmente

library(RColorBrewer)

# Colores suaves
n <- length(TDF_Zona$Zona)
colores <- brewer.pal(min(max(n,3), 8), "Set2")

par(mar = c(5,5, 5, 2))
# Crear gráfico
barplot(
  TDF_Zona$hi,
  
  # Etiquetas
  names.arg = TDF_Zona$Zona,
  
  # Títulos
  main = "Gráfica Nro. 4\nDistribución de la variable Zona\npara el análisis estadístico de la calidad del aire en la India (2015-2020)",
  
  
  # Diseño
  col = colores,
  border = "white",
  
  # Escala
  ylim = c(0, 100),
  
  # Texto
  las = 2,
  cex.names = 0.9,
  cex.main = 1,
  cex.lab = 1,
  
  # Barras
  width = 0.7,
  space = 0.3
)

title(xlab = "Zona", line = 4)
mtext(
  "Frecuencia (%)",
  side = 2,
  line = 4
)

Diagrama circular

library(RColorBrewer)

# Colores pastel suaves
colores <- c(
  "#FBB4AE",  # rosado pastel
  "#FFF2AE",  # amarillo pastel
  "#CDEAC0"   # verde pastel
)

color <- adjustcolor(colores, alpha.f = 0.95)

# Etiquetas: SOLO porcentajes
etiqueta <- paste0(round(TDF_Zona$hi, 2), " %")

# Más espacio a la derecha para la leyenda
par(mar = c(2,3, 5, 5))

# Crear gráfico circular
pie(
  TDF_Zona$hi,
  
  labels = etiqueta,
  
  # Distancia de las etiquetas respecto al círculo
  labeldist = 1.5,
  
  radius = 0.85,
  
  col = color,
  
  border = "black",
  lwd = 2,
  
  clockwise = TRUE,
  
  main = "Gráfica Nro. 5\nDistribución de la variable Zona\npara el análisis estadístico de la calidad del aire en la India (2015-2020)",
  
  cex.main = 1,
  cex = 0.9
)
## Warning in text.default(1.1 * P$x, 1.1 * P$y, labels[i], xpd = TRUE, adj =
## ifelse(P$x < : "labeldist" es un parámetro gráfico inválido
## Warning in text.default(1.1 * P$x, 1.1 * P$y, labels[i], xpd = TRUE, adj =
## ifelse(P$x < : "labeldist" es un parámetro gráfico inválido
## Warning in text.default(1.1 * P$x, 1.1 * P$y, labels[i], xpd = TRUE, adj =
## ifelse(P$x < : "labeldist" es un parámetro gráfico inválido
## Warning in title(main = main, ...): "labeldist" es un parámetro gráfico
## inválido
# Leyenda más alejada
legend(
  x = 1.5,
  y = 1,
  
  legend = TDF_Zona$Zona,
  
  title = "Leyenda",
  
  fill = color,
  
  border = "black",
  
  box.lwd = 1,
  box.col = "black",
  
  cex = 0.8,
  
  bty = "o",
  
  xpd = TRUE
)

6.- Indicadores estadísticos

# 1. CÁLCULO DE LA MODA (Mo)
# Es el nivel con la mayor frecuencia (ni)
Moda_row <- TDF_Zona[which.max(TDF_Zona$ni), ]
Mo_calc <- as.character(Moda_row$Zona[1])

# 2. CÁLCULO DE LA MEDIANA (Me)
# Frecuencias Acumuladas
Ni_calc <- cumsum(TDF_Zona$ni)
N_total <- sum(TDF_Zona$ni)
Posicion_Me <- N_total / 2
# Categoría que contiene la posición N/2
Mediana_row_index <- which(Ni_calc >= Posicion_Me)[1]
Me_calc <- as.character(TDF_Zona$Zona[Mediana_row_index])

# 3. RANGO
# Usamos los niveles extremos de la variable ordinal
Rango_calc <- paste0(
  as.character(TDF_Zona$Zona[1]), 
  " a ", 
  as.character(TDF_Zona$Zona[length(TDF_Zona$Zona)-1])
)

Variable <- "Zona"
Rango <- Rango_calc # Rango calculado

# Mediana
Me <- Me_calc # Mediana calculada
# Media
X <- "-"
# Moda
Mo <- Mo_calc # Moda calculada

# Indicadores de Dispersión
# Desviación estandar
desv<-"-"
# Coeficiente de variación 
CV <- "-"

# Indicadores de Forma
# Coeficiente de Asimetría
As <-"-"
# Curtosis
K <- "-"

Tabla de indicadores estadísticos

# Crear el Data Frame

Tabla_indicadores <- data.frame(Variable, Rango, X, Me, Mo, desv, CV, As, K)
colnames(Tabla_indicadores) <- c("Variable","Rango","X", "Me", "Mo",
                                 "sd","CV","As","K")

library(gt)
library(dplyr)
# Generar la Tabla GT
Tabla_indicadores %>%
  gt() %>%
  
  tab_header(
    title = md("Tabla Nro. 2"),
    subtitle = md("Indicadores estadísticos de la Zona en el análisis de la calidad de aire 
              en la India (2015-2020)")
  ) %>%
  
  tab_source_note(
    source_note = md("Grupo: 1 <br> Fuente: https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india ")
  ) %>%
  
  # Líneas verticales en TODA la tabla
  tab_style(
    style = cell_borders(
      sides = "left",
      color = "black",
      weight = px(2)
    ),
    locations = list(
      cells_body(),
      cells_column_labels()
    )
  ) %>%
  
  tab_style(
    style = cell_borders(
      sides = "right",
      color = "black",
      weight = px(2)
    ),
    locations = list(
      cells_body(),
      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
Indicadores estadísticos de la Zona en el análisis de la calidad de aire en la India (2015-2020)
Variable Rango X Me Mo sd CV As K
Zona Centro a Este - Oeste Oeste - - - -
Grupo: 1
Fuente: https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india

7.- Conclusiones

En conclusión:

El valor más frecuente de la variable Zona es oeste