FECHA: 27/11/2025
TDFAQI<-read.csv("C:/Users/JOSELYN/Desktop/kangle/Datos Cambiados.csv",header = TRUE)
# 1. Preparación de Datos: Convertir a numérico y limpiar NAs
# Usamos PM2.5 como la variable continua
AQI_limpio <- as.numeric(TDFAQI$AQI)
AQI_limpio <- AQI_limpio[!is.na(AQI_limpio)]
# 2. Agrupación: CREACIÓN DE LOS INTERVALOS DE CLASE
# Usamos la función cut() para dividir los datos en grupos.
numero_intervalos <- 6
grupos_AQI <- cut(AQI_limpio,
breaks = numero_intervalos,
include.lowest = TRUE,
right = FALSE)
# 3. Cálculo de Frecuencias (ni)
tabla_frecuencia <- as.data.frame(table(grupos_AQI))
# 4. Asignación de Variables
AQI <- tabla_frecuencia$grupos_AQI
ni <- tabla_frecuencia$Freq
# 5. Cálculos Derivados
# La suma de ni es el tamaño total de la muestra limpia
hi <- ni / sum(ni) * 100
Ni_asc <- cumsum(ni)
Ni_dsc <- rev(cumsum(rev(ni)))
Hi_asc <- round(cumsum(hi), 4)
Hi_dsc <- round(rev(cumsum(rev(hi))), 4)
# 6. Crear la Tabla de Distribución de Frecuencias Agrupadas
TDFAQIFin_Agrupada <- data.frame(AQI, ni, hi, Ni_asc, Ni_dsc, Hi_asc, Hi_dsc)
print(TDFAQIFin_Agrupada)
## AQI ni hi Ni_asc Ni_dsc Hi_asc Hi_dsc
## 1 [11,352) 22652 91.15492958 22652 24850 91.1549 100.0000
## 2 [352,692) 1975 7.94768612 24627 2198 99.1026 8.8451
## 3 [692,1.03e+03) 135 0.54325956 24762 223 99.6459 0.8974
## 4 [1.03e+03,1.37e+03) 61 0.24547284 24823 88 99.8913 0.3541
## 5 [1.37e+03,1.71e+03) 22 0.08853119 24845 27 99.9799 0.1087
## 6 [1.71e+03,2.05e+03] 5 0.02012072 24850 5 100.0000 0.0201
# 1. Calcular los totales (ni es la suma de frecuencias, hi es la suma de porcentajes)
total_ni <- sum(ni)
total_hi <- sum(hi)
# 2. Agregar la fila 'Total' a la tabla de frecuencias
# Usamos NA (Not Available) en las columnas acumuladas. R lo trata como un valor faltante numérico,
# y al imprimir la tabla lo muestra como espacio o se puede formatear así.
TDFAQICompleto <- rbind(TDFAQIFin_Agrupada,
data.frame(AQI = "Total",
ni = total_ni,
hi = total_hi,
Ni_asc = NA, # Dato Faltante
Ni_dsc = NA, # Dato Faltante
Hi_asc = NA, # Dato Faltante
Hi_dsc = NA))
# 3. Mostrar la tabla con el total
print(TDFAQICompleto)
## AQI ni hi Ni_asc Ni_dsc Hi_asc Hi_dsc
## 1 [11,352) 22652 91.15492958 22652 24850 91.1549 100.0000
## 2 [352,692) 1975 7.94768612 24627 2198 99.1026 8.8451
## 3 [692,1.03e+03) 135 0.54325956 24762 223 99.6459 0.8974
## 4 [1.03e+03,1.37e+03) 61 0.24547284 24823 88 99.8913 0.3541
## 5 [1.37e+03,1.71e+03) 22 0.08853119 24845 27 99.9799 0.1087
## 6 [1.71e+03,2.05e+03] 5 0.02012072 24850 5 100.0000 0.0201
## 7 Total 24850 100.00000000 NA NA NA NA
# 1. Calcular los totales (ni es la suma de frecuencias, hi es la suma de porcentajes)
total_ni <- sum(ni)
total_hi <- sum(hi)
# 2. Agregar la fila 'Total' a la tabla de frecuencias
# Usamos NA (Not Available) en las columnas acumuladas. R lo trata como un valor faltante numérico,
# y al imprimir la tabla lo muestra como espacio o se puede formatear así.
TDFAQICompleto <- rbind(TDFAQIFin_Agrupada,
data.frame(AQI = "Total",
ni = total_ni,
hi = total_hi,
Ni_asc = NA, # Dato Faltante
Ni_dsc = NA, # Dato Faltante
Hi_asc = NA, # Dato Faltante
Hi_dsc = NA))
# 3. Mostrar la tabla con el total
print(TDFAQICompleto)
## AQI ni hi Ni_asc Ni_dsc Hi_asc Hi_dsc
## 1 [11,352) 22652 91.15492958 22652 24850 91.1549 100.0000
## 2 [352,692) 1975 7.94768612 24627 2198 99.1026 8.8451
## 3 [692,1.03e+03) 135 0.54325956 24762 223 99.6459 0.8974
## 4 [1.03e+03,1.37e+03) 61 0.24547284 24823 88 99.8913 0.3541
## 5 [1.37e+03,1.71e+03) 22 0.08853119 24845 27 99.9799 0.1087
## 6 [1.71e+03,2.05e+03] 5 0.02012072 24850 5 100.0000 0.0201
## 7 Total 24850 100.00000000 NA NA NA NA
# Asegúrate de que la librería gt esté cargada
library(gt)
# Usaremos TDFMagnitudCompleto (la versión con la fila Total) como nuestra tabla de origen
TDFAQICompleto %>%
gt() %>%
# 1. Título y Subtítulo adaptados a tu variable PM2.5
tab_header(
title = md("**Tabla Nro. 2**"),
subtitle = md("Tabla de distribución de frecuencias de los niveles de **AQI**")
) %>%
# 2. Nota de Fuente
tab_source_note(
source_note = md("Fuente: Datos procesados por el autor a partir de archivo city.day.csv")
) %>%
# 3. Estilos de Bordes (Laterales)
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()
)%>%
# 4. Opciones de Estilos (Bordes Superiores e Inferiores, Rayado de Filas)
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 |
| Tabla de distribución de frecuencias de los niveles de AQI |
| AQI |
ni |
hi |
Ni_asc |
Ni_dsc |
Hi_asc |
Hi_dsc |
| [11,352) |
22652 |
91.15492958 |
22652 |
24850 |
91.1549 |
100.0000 |
| [352,692) |
1975 |
7.94768612 |
24627 |
2198 |
99.1026 |
8.8451 |
| [692,1.03e+03) |
135 |
0.54325956 |
24762 |
223 |
99.6459 |
0.8974 |
| [1.03e+03,1.37e+03) |
61 |
0.24547284 |
24823 |
88 |
99.8913 |
0.3541 |
| [1.37e+03,1.71e+03) |
22 |
0.08853119 |
24845 |
27 |
99.9799 |
0.1087 |
| [1.71e+03,2.05e+03] |
5 |
0.02012072 |
24850 |
5 |
100.0000 |
0.0201 |
| Total |
24850 |
100.00000000 |
NA |
NA |
NA |
NA |
| Fuente: Datos procesados por el autor a partir de archivo city.day.csv |
# DIAGRAMA DE BARRAS DE FRECUENCIA ABSOLUTA (ni)
barplot(TDFAQIFin_Agrupada$ni,
main = "Gráfico de barras de Frecuencia Absoluta (ni) \n de los niveles de AQI",
xlab = "Intervalos de AQI",
ylab = "Frecuencia Absoluta (Cantidad de días)",
names.arg = TDFAQIFin_Agrupada$AQI, # Usa los intervalos de clase como etiquetas
las = 2, # Permite que las etiquetas del eje X se lean verticalmente
col = "skyblue" # Puedes cambiar el color que prefieras
)

#DIAGRAMA DE BARRAS LOCAL ni
barplot(TDFAQIFin_Agrupada$ni, main = "Gráfica Nº1.1: Frecuencia de los niveles de AQI en el aire de la india (Local)",
xlab="AQI", ylab="Cantidad", names.arg = TDFAQIFin_Agrupada$AQI,
las=2, col="grey")

# 1. Calculamos el límite superior (suma total de ni)
limite_y <- sum(TDFAQIFin_Agrupada$ni)
# 2. DIAGRAMA DE BARRAS DE FRECUENCIA ABSOLUTA (Global)
barplot(TDFAQIFin_Agrupada$ni,
main = "Gráfico Global: Frecuencia de los niveles de AQI en el aire de la India",
xlab = "Intervalos de AQI",
ylab = "Frecuencia Absoluta ",
names.arg = TDFAQIFin_Agrupada$AQI, # Usa los intervalos de clase (ej: [0, 50))
las = 2, # Gira las etiquetas del eje X a 90 grados
col = "darkblue", # Cambiamos el color para distinguirlo
ylim = c(0, limite_y)) # Establece el eje Y desde 0 hasta el total

# DIAGRAMA DE BARRAS DE FRECUENCIA RELATIVA (hi) - LOCAL
barplot(TDFAQICompleto$hi,
main = "Gráfica : Porcentaje de los niveles de AQI en el aire (Local)",
xlab = "Intervalos de AQI",
ylab = "Porcentaje (%)",
names.arg = TDFAQICompleto$AQI, # Usa los intervalos de clase (ej: [0, 50))
las = 2, # Gira las etiquetas del eje X a 90 grados
col = "darkgreen", # Puedes cambiar el color
ylim = c(0, 100)) # Aseguramos que el eje Y vaya de 0 a 100%

# DIAGRAMA DE BARRAS DE FRECUENCIA RELATIVA (hi) - GLOBAL
barplot(TDFAQIFin_Agrupada$hi,
main = "Gráfica : Porcentaje de los niveles de AQI en el aire (Global)",
xlab = "Intervalos de AQI",
ylab = "Porcentaje (%)",
names.arg = TDFAQIFin_Agrupada$AQI, # Intervalos de clase
las = 2, # Etiquetas verticales
col = "red", # Cambiamos el color
ylim = c(0, 100)) # Mantiene el eje Y hasta el 100% (Global)

# 1. Graficar la ojiva Niasc
plot(x = 1:length(TDFAQIFin_Agrupada$AQI),
y = TDFAQIFin_Agrupada$Ni_asc,
type = "o", # Usamos 'o' para puntos y líneas (Ojiva)
col = "red",
xlab = "Intervalos de AQI",
ylab = "Frecuencia Absoluta Acumulada (Ni)",
main = "Gráfico de Ojivas Combinadas de los niveles de AQI",
xaxt = "n", # Oculta las etiquetas del eje X por defecto
ylim = c(0, max(TDFAQIFin_Agrupada$Ni_asc))) # Ajusta el límite Y al total de la muestra
# 2. Agregar las etiquetas del eje X usando los intervalos de clase
axis(side = 1,
at = 1:length(TDFAQIFin_Agrupada$AQI),
labels = TDFAQIFin_Agrupada$AQI,
las = 2) # Etiquetas verticales
# 3. Agregar la ojiva descendente (Ni_dsc)
lines(x = 1:length(TDFAQIFin_Agrupada$AQI),
y = TDFAQIFin_Agrupada$Ni_dsc,
type = "o",
col = "blue")
# 4. Agregar la Leyenda
legend("topright",
legend = c("Ojiva Ascendente (Ni_asc)", "Ojiva Descendente (Ni_dsc)"),
cex = 0.8,
col = c("red", "blue"),
pch = 1)

# 1. Aseguramos que la variable AQI_limpio esté definida
# Si no has corrido el código anterior, define AQI_limpio así:
AQI_limpio <- as.numeric(TDFAQI$AQI)
AQI_limpio <- AQI_limpio[!is.na(AQI_limpio)]
# 2. Generamos el Diagrama de Caja y Bigotes
Bigotes <- boxplot(AQI_limpio,
horizontal = TRUE, # Gráfico horizontal para mejor lectura
col = "lightblue", # Color que prefieras
main = "Gráfica de Caja y Bigotes: Distribución de los niveles de AQI",
xlab = "Niveles de AQI",
names.arg = "AQI")
