##Estadística Descriptiva
#Variable Continua Benceno
#Llumitasig Daniela
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(e1071)
## Warning: package 'e1071' was built under R version 4.5.3
datos <- read.csv("~/Estadistica/Proyecto 2026/Datos utilizados/city_day (1).csv")
benceno <- datos$Benzene
#Extraccion de los "-" de la variable Benzene debido a que son valores inexistentes,
# para un mejor analisis, cambia tamaño muestral de 29531 a 23908
datos$Benzene[datos$Benzene == "-"] <- NA
datos$Benzene <- as.numeric(datos$Benzene)
benceno <- na.omit(datos$Benzene)
#Filtrar benceno
benceno <- subset(datos$Benzene, datos$Benzene >= 0)
# Calcular el mínimo y máximo de NH3
min_benceno <- min(benceno)
max_benceno <- max(benceno)
#Calcular rango
R <- max_benceno - min_benceno
#Calcular intervalos
K <- floor(1 + 3.33 * log10(length(benceno)))
#Calcular amplitud
A <-R/K
#Limite inferior
Li <-round(seq(from=min_benceno,to=max_benceno-A,by=A),2)
#Limite superior
Ls <-round(seq(from=min_benceno+A,to=max_benceno,by=A),2)
#Marca de clase
Mc <- (Li+Ls)/2
# Vector vacío para guardar las frecuencias de cada clase
ni <- c()
for (i in 1:K) {
if (i < K) {
# Para las primeras clases: [Li , Ls)
ni[i] <- length(subset(benceno, benceno >= Li[i] & benceno < Ls[i]))
} else {
# Para la última clase: [Li , Ls]
ni[i] <- length(subset(benceno, benceno >= Li[i] & benceno <= Ls[i]))
}
}
N <- sum(ni)
hi <- (ni / N) * 100
Ni_asc <- cumsum(ni)
Ni_desc <- rev(cumsum(rev(ni)))
Hi_asc <- cumsum(hi)
Hi_desc <- rev(cumsum(rev(hi)))
Intervalo <- paste0("[", round(Li,2), " - ", round(Ls,2), ")")
Intervalo[length(Intervalo)] <- paste0("[", round(Li[length(Li)],2), " - ",
round(Ls[length(Ls)],2), "]")
TDF_benceno <- data.frame(
Intervalo = Intervalo,
Mc = round(Mc, 2),
ni = ni,
hi = round(hi, 2),
Ni_asc = Ni_asc,
Ni_desc = Ni_desc,
Hi_asc = round(Hi_asc, 2),
Hi_desc = round(Hi_desc, 2)
)
# Crear fila de totales para Benceno
totales <- data.frame(
Intervalo = "Totales",
Mc = "-",
ni = sum(ni),
hi = round(sum(hi), 2),
Ni_asc = "-",
Ni_desc = "-",
Hi_asc= "-",
Hi_desc = "-"
)
TDF_benceno <- rbind(TDF_benceno, totales)
length(Li)
## [1] 15
library(gt)
library(dplyr)
TDF_benceno %>%
gt() %>%
tab_header(
title = md("*Tabla Nro. 1*"),
subtitle = md("**Distribución de frecuencias de la concentración de Benceno en el estudio de 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")
) %>%
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 concentración de Benceno en el estudio de calidad del aire en la India | |||||||
| Intervalo | Mc | ni | hi | Ni_asc | Ni_desc | Hi_asc | Hi_desc |
|---|---|---|---|---|---|---|---|
| [0 - 30.34) | 15.17 | 23698 | 99.12 | 23698 | 23908 | 99.12 | 100 |
| [30.34 - 60.67) | 45.51 | 121 | 0.51 | 23819 | 210 | 99.63 | 0.88 |
| [60.67 - 91.01) | 75.84 | 31 | 0.13 | 23850 | 89 | 99.76 | 0.37 |
| [91.01 - 121.34) | 106.18 | 8 | 0.03 | 23858 | 58 | 99.79 | 0.24 |
| [121.34 - 151.68) | 136.51 | 4 | 0.02 | 23862 | 50 | 99.81 | 0.21 |
| [151.68 - 182.01) | 166.84 | 8 | 0.03 | 23870 | 46 | 99.84 | 0.19 |
| [182.01 - 212.35) | 197.18 | 4 | 0.02 | 23874 | 38 | 99.86 | 0.16 |
| [212.35 - 242.68) | 227.51 | 3 | 0.01 | 23877 | 34 | 99.87 | 0.14 |
| [242.68 - 273.02) | 257.85 | 2 | 0.01 | 23879 | 31 | 99.88 | 0.13 |
| [273.02 - 303.35) | 288.18 | 7 | 0.03 | 23886 | 29 | 99.91 | 0.12 |
| [303.35 - 333.69) | 318.52 | 1 | 0.00 | 23887 | 22 | 99.91 | 0.09 |
| [333.69 - 364.02) | 348.86 | 0 | 0.00 | 23887 | 21 | 99.91 | 0.09 |
| [364.02 - 394.36) | 379.19 | 1 | 0.00 | 23888 | 21 | 99.92 | 0.09 |
| [394.36 - 424.69) | 409.52 | 4 | 0.02 | 23892 | 20 | 99.93 | 0.08 |
| [424.69 - 455.03] | 439.86 | 16 | 0.07 | 23908 | 16 | 100 | 0.07 |
| Totales | - | 23908 | 100.00 | - | - | - | - |
| Autor: Grupo 1
Fuente:https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india |
|||||||
#Histograma benceno
histo_benceno <-hist(benceno,plot = FALSE)
Lis<-histo_benceno$breaks [1:10]
Lss<-histo_benceno$breaks [2:11]
MCs<-(Lis+Lss)/2
nis<-histo_benceno$counts
his <- (nis / N) * 100
Nis_asc <- cumsum(nis)
His_asc <- cumsum(his)
Nis_desc <- rev(cumsum(rev(nis)))
His_desc <- rev(cumsum(rev(his)))
Intervalos <- paste0("[", round(Lis,2), " - ", round(Lss,2), ")")
Intervalos[length(Intervalos)] <- paste0("[", round(Lis[length(Lis)],2),
" - ", round(Lss[length(Lss)],2), "]")
TDF_bencenosimplificado <- data.frame(
Intervalo = Intervalos,
MC = round(MCs, 2),
ni = nis,
hi= round(his, 2),
Ni_ascendente = Nis_asc,
Hi_ascendente = round(His_asc, 2),
Ni_descendente = Nis_desc,
Hi_descendente = round(His_desc, 2)
)
colnames(TDF_bencenosimplificado) <- c(
"Intervalo",
"MC",
"ni",
"hi(%)",
"Ni_asc",
"Hi_asc (%)",
"Ni_desc",
"Hi_desc (%)"
)
totaless <- data.frame(
Intervalo = "Totales",
MC = "-",
ni = sum(nis), # suma total de ni
hi = sum(his), # suma total de hi (%)
Ni_ascendente = "-",
Ni_descendente = "-",
Hi_ascendente = "-",
Hi_descendente = "-"
)
colnames(totaless) <- c(
"Intervalo",
"MC",
"ni",
"hi(%)",
"Ni_asc",
"Hi_asc (%)",
"Ni_desc",
"Hi_desc (%)"
)
# Agregar al final de la tabla
TDF_bencenosimplificado <- rbind(TDF_bencenosimplificado, totaless)
TDF_bencenosimplificado %>%
gt() %>%
tab_header(
title = md("*Tabla Nro. 2*"),
subtitle = md("*Distribución de frecuencia simplificada de concentración de Benceno, estudio calidad del aire en India*")
) %>%
tab_source_note(
source_note = md("Autor: Grupo 1
\n Fuente:https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india")
) %>%
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 frecuencia simplificada de concentración de Benceno, estudio calidad del aire en India | |||||||
| Intervalo | MC | ni | hi(%) | Ni_asc | Hi_asc (%) | Ni_desc | Hi_desc (%) |
|---|---|---|---|---|---|---|---|
| [0 - 50) | 25 | 23809 | 99.59 | 23809 | 99.59 | 23908 | 100 |
| [50 - 100) | 75 | 45 | 0.19 | 23854 | 99.77 | 99 | 0.41 |
| [100 - 150) | 125 | 8 | 0.03 | 23862 | 99.81 | 54 | 0.23 |
| [150 - 200) | 175 | 11 | 0.05 | 23873 | 99.85 | 46 | 0.19 |
| [200 - 250) | 225 | 5 | 0.02 | 23878 | 99.87 | 35 | 0.15 |
| [250 - 300) | 275 | 8 | 0.03 | 23886 | 99.91 | 30 | 0.13 |
| [300 - 350) | 325 | 1 | 0.00 | 23887 | 99.91 | 22 | 0.09 |
| [350 - 400) | 375 | 1 | 0.00 | 23888 | 99.92 | 21 | 0.09 |
| [400 - 450) | 425 | 18 | 0.08 | 23906 | 99.99 | 20 | 0.08 |
| [450 - 500] | 475 | 2 | 0.01 | 23908 | 100 | 2 | 0.01 |
| Totales | - | 23908 | 100.00 | - | - | - | - |
| Autor: Grupo 1
Fuente:https://www.kaggle.com/datasets/rohanrao/air-quality-data-in-india |
|||||||
hist(benceno, breaks = 11,
main = "Gráfica N°1: Distribución de la Concentración de Benceno
presente en el estudio sobre calidad del aire en Inia ",
xlab = " benceno (µg/m3)",
ylab = "Cantidad",
ylim = c(0, max(nis)),
col = "pink",
cex.main = 0.9,
cex.lab = 1,
cex.axis = 0.9,
xaxt = "n")
axis(1, at = histo_benceno$breaks,
labels = histo_benceno$breaks, las = 1,
cex.axis = 0.9)
hist(benceno, breaks = 11,
main = "Gráfica N°2:Distribución de la Concentración de Benceno
presente en el estudio sobre calidad del aire en India",
xlab = "Benzene (µg/m3)",
ylab = "Cantidad",
ylim = c(0, length(benceno)),
col = "pink",
cex.main = 1,
cex.lab = 1,
cex.axis = 0.9,
xaxt = "n")
axis(1, at = histo_benceno$breaks,
labels = histo_benceno$breaks, las = 1,
cex.axis = 0.9)
n <- as.numeric(nrow(TDF_bencenosimplificado))
pos<-barplot(
TDF_bencenosimplificado$`hi(%)`[1:(n-1)],
space = 0,
main = "Gráfica No. 4:Distribución concentración de Benceno en el estudio
calidad del aire en India",
ylab = "Porcentaje (%)",
xlab = "Benzene (µg/m3)",
names.arg = TDF_bencenosimplificado$MC[1:(n-1)],
col = "pink"
)
axis(side = 1,
at = pos,
labels = TDF_bencenosimplificado$MC[1:(nrow(TDF_bencenosimplificado)-1)],
tck = -0.04,
las = 1)
TDF_bencenosimplificado$`hi (%)` <- as.numeric(TDF_bencenosimplificado$`hi(%)`)
post<-barplot(TDF_bencenosimplificado$`hi(%)`[1:(nrow(TDF_bencenosimplificado)-1)],
space = 0,
col = "pink",
main = "Gráfica N°3:Distribución de la Concentración de Benceno, estudio
calidad del aire en India",
xlab = "Benzene (µg/m3)",
ylab = "Porcentaje (%)",
names.arg = TDF_bencenosimplificado$MC[1:(nrow(TDF_bencenosimplificado)-1)],
ylim = c(0,100),
xaxt = "n")
axis(side = 1,
at = post,
labels = TDF_bencenosimplificado$MC[1:(nrow(TDF_bencenosimplificado)-1)],
tck = -0.02)
Cajabenceno<-boxplot(benceno, horizontal = T,col = "orange", border = "black",
main= "Gráfica No. 5: Distribución de la concentración de Benceno,
estudio calidad del aire en India",
xlab="Benzene (µg/m3)")
# Ojiva ascendente
plot(Lss, Nis_asc, type = "b", main = "Gráfica N°7:Distribución de Frecuencias Ascendente y Descendente
de la Concentración de Benceno",
xlab = "Benzene (µg/m3)",
ylab = "Cantidad", pch = 19,col="red")
# Ojiva descendente
lines(Lis, Nis_desc, type = "b", col = "blue", pch = 19)
# Ojiva ascendente
plot(Lss, His_asc,
type = "b",
main = " Gráfica N°8:Distribución Porcentual Ascendente y Descendente
de la Concentración de Benceno",
xlab = "Benzene (µg/m3)",
ylab = "Porcentaje %",
col = "blue",
pch = 19,
yaxt = "n",
ylim = c(99, 100)
)
axis(2, at = c(99, 100), labels = c("99", "100"))
# Ojiva descendente
lines(Lis, His_desc,
type = "b",
col = "red",
pch = 19)
# MEDIA ARITMÉTICA
X <- sum(benceno) / length(benceno)
X
## [1] 3.28084
#MEDIANA
Me <- median(benceno)
Me
## [1] 1.07
#MODA
Mo <- max(TDF_benceno$ni)
moda <- TDF_benceno$Mc[TDF_benceno$ni == max_benceno]
Mo
## [1] 23908
#Porque la tabla simplificada, la clase número 1 en el intervalo [0,50] tiene la frecuencia más alta.
#La mayor frecuencia es 23809,que está en la posición 1 del vector
#VARIANZA
var<- var(benceno)
var
## [1] 249.992
#DESVIACION ESTANDAR
sd <- sd(benceno)
sd
## [1] 15.81114
# COEFICIENTE DE VARIACIÓN (%)
CV <- (sd / X) * 100
CV
## [1] 481.9234
#La dispersión de benceno es muy alta respecto al promedio
#COEFICIENTE DE ASIMETRIA
install.packages("e1071")
## Warning: package 'e1071' is in use and will not be installed
library(e1071)
As <- skewness(benceno)
As
## [1] 21.30155
#CUORTOSIS
library(e1071)
Cu <- kurtosis(benceno)
Cu
## [1] 530.0158
#CUORTOSIS
library(e1071)
Cu <- kurtosis(benceno)
Cu
## [1] 530.0158
#outliers
cajaBigotes <- boxplot(benceno,plot = FALSE)
outliers <- cajaBigotes$out
min(outliers)
## [1] 7.54
max(outliers)
## [1] 455.03
length(outliers)
## [1] 1668
tabla_indicadores <- data.frame(
Variable = c("Benceno"),
Rango = paste0("[", min(benceno), "; ", max(benceno), "]"),
X = X,
Me = round(Me, 2),
Mo = Mo,
V = round(var, 2),
Sd = round(sd, 2),
Cv = CV,
As = round(As, 2),
K = round(K, 2),
`Valores Atípicos` = "[7.54 ; 455.03]"
)
library(knitr)
kable(
tabla_indicadores,
align = "c",
caption = "Conclusiones de la variable benceno"
)
| Variable | Rango | X | Me | Mo | V | Sd | Cv | As | K | Valores.Atípicos |
|---|---|---|---|---|---|---|---|---|---|---|
| Benceno | [0; 455.03] | 3.28084 | 1.07 | 23908 | 249.99 | 15.81 | 481.9234 | 21.3 | 15 | [7.54 ; 455.03] |
En conclusión:
La variable Benceno dado en (µg/m3)
fluctúa entre 0 y 455.03 (µg/m3), y sus valores giran entorno a 1.07 con
una desviación estándar de 21.3 (µg/m3) siendo un conjunto de valores
heterogéneos. Con la presencia de valores atípicos del intervalo 7.54 a
455.03 (µg/m3).