# Tema: Estadística Descriptiva
# Autor: Camila Zambrano
# Fecha: 30/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("city_day.csv",
header = TRUE,
sep = ",", dec = "." )
2.- Selección de la variable
habitantes <- unique(na.omit(datos$Número.de.habitantes))
3.- Conteo frecuencias
# Definición de 10 intervalos
min_h <- min(habitantes)
max_h <- max(habitantes)
breaks <- seq(min_h, max_h, length.out = 11)
# Usamos cut pero especificamos que NO queremos las etiquetas por defecto
habitantes_cut <- cut(datos$Número.de.habitantes, breaks = breaks, include.lowest = TRUE)
# CREACIÓN MANUAL DE ETIQUETAS ENTERAS
# Extraemos los puntos de corte y los formateamos como texto simple
breaks_round <- round(breaks)
etiquetas <- paste0(format(breaks_round[-length(breaks_round)], scientific = FALSE),
" - ",
format(breaks_round[-1], scientific = FALSE))
TDF <- as.data.frame(table(habitantes_cut))
TDF$Intervalo <- etiquetas
ni <- TDF$Freq
sum(ni)
## [1] 29531
hi <- ni / sum(ni)
sum(hi)
## [1] 1
Ni_asc <- cumsum(ni)
Ni_dsc <- rev(cumsum(rev(ni)))
Hi_asc <- round(cumsum(hi) * 100, 2)
Hi_dsc <- round(rev(cumsum(rev(hi))) * 100, 2)
4.- Tabla de distribución de frecuencia
# Crear data frame para la tabla
TDF_final <- data.frame(
"Intervalos" = TDF$Intervalo,
"ni" = ni,
"hi(%)" = round(hi * 100, 2),
"Ni asc" = Ni_asc,
"Ni dsc" = Ni_dsc,
"Hi asc(%)" = Hi_asc,
"Hi dsc(%)" = Hi_dsc
)
colnames(TDF_final) <- c("Intervalos de número de habitantes","ni","hi(%)",
"Ni asc","Ni dsc","Hi asc","Hi dsc")
totales <- data.frame( TDF_final =" TOTAL ",
ni= sum(ni),
hi= sum(hi*100),
Ni_asc= "-",
Ni_dsc= "-",
Hi_asc= "-",
Hi_dsc= "-")
colnames(totales) <- c("Intervalos de número de habitantes","ni","hi(%)",
"Ni asc","Hi asc","Ni dsc","Hi dsc")
TDF_numerohabitantes <- rbind(TDF_final,totales)
# Generar tabla con gt
tabla_final <- TDF_numerohabitantes %>%
gt() %>%
tab_header(
title = md("*Tabla N°1*"),
subtitle = md("**Distribución de frecuencia del número de habitantes
en el estudio de la calidad del aire en India 2015-2020**")
) %>%
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_final
| Tabla N°1 |
| Distribución de frecuencia del número de habitantes
en el estudio de la calidad del aire en India 2015-2020 |
| Intervalos de número de habitantes |
ni |
hi(%) |
Ni asc |
Ni dsc |
Hi asc |
Hi dsc |
| 8000 - 3387200 |
13543 |
45.86 |
13543 |
29531 |
45.86 |
100 |
| 3387200 - 6766400 |
3123 |
10.58 |
16666 |
15988 |
56.44 |
54.14 |
| 6766400 - 10145600 |
2009 |
6.80 |
18675 |
12865 |
63.24 |
43.56 |
| 10145600 - 13524800 |
4015 |
13.60 |
22690 |
10856 |
76.83 |
36.76 |
| 13524800 - 16904000 |
2823 |
9.56 |
25513 |
6841 |
86.39 |
23.17 |
| 16904000 - 20283200 |
0 |
0.00 |
25513 |
4018 |
86.39 |
13.61 |
| 20283200 - 23662400 |
2009 |
6.80 |
27522 |
4018 |
93.2 |
13.61 |
| 23662400 - 27041600 |
0 |
0.00 |
27522 |
2009 |
93.2 |
6.8 |
| 27041600 - 30420800 |
0 |
0.00 |
27522 |
2009 |
93.2 |
6.8 |
| 30420800 - 33800000 |
2009 |
6.80 |
29531 |
2009 |
100 |
6.8 |
| TOTAL |
29531 |
100.00 |
- |
- |
- |
- |
| Autor: Grupo 1 |
5.- Gráficas de distribución de frecuencia
5.1.- Diagrama de barras
Diagrama general
barplot(ni,
main="Gráfica N°1: Distribución de habitantes por intervalos
en el estudio de la calidad del aire en India 2015-2020",
xlab = "Número de habitantes",
ylab = "Cantidad",
col = "blue",
ylim = c(0,max(ni)),
names.arg=TDF_final$`Intervalos de número de habitantes`,
las=2,
cex.names=0.4,
cex.axis = 0.7,
cex.main = 0.9,
mgp = c(5, 1 , 0))

Diagrama con relación al todo
barplot(ni,
main="Gráfica N°2: Distribución de habitantes por intervalos
en el estudio de la calidad del aire en India 2015-2020",
xlab = "Número de habitantes",
ylab = "Cantidad",
col = "lightgreen",
ylim = c(0,30000),
names.arg=TDF_final$`Intervalos de número de habitantes`,
las=2,
cex.names=0.4,
cex.axis = 0.9,
cex.main = 0.9,
mgp = c(5, 1, 0))

5.2.- Diagrama porcentual
Diagrama porcentual general
barplot(TDF_final$`hi(%)`,
main="Gráfica N°3: Distribución de habitantes por intervalos
en el estudio de la calidad del aire en India 2015-2020",
xlab = "Número de habitantes",
ylab = "Porcentaje",
col = "lightblue",
names.arg=TDF_final$`Intervalos de número de habitantes`,
las=2,
cex.names=0.4,
cex.axis = 0.9,
cex.main = 0.9,
mgp = c(5, 1, 0))

Diagrama porcentual con relación al todo
barplot(TDF_final$`hi(%)`,
main="Gráfica N°4: Distribución de habitantes por intervalos
en el estudio de la calidad del aire en India 2015-2020",
xlab = "Número de habitantes",
ylab = "Porcentaje",
col = "green",
ylim = c(0,100),
names.arg=TDF_final$`Intervalos de número de habitantes`,
las=2,
cex.names=0.4,
cex.axis = 0.9,
cex.main = 0.9,
mgp = c(5, 1, 0))

6.- Diagrama de cajas
options(scipen = 999)
boxplot(habitantes,
horizontal = TRUE,
main = "Gráfica N°5: Distribución del número de habitantes en las
en el estudio de la calidad del aire en India 2015-2020",
xlab = " Número de habitantes",
col = "turquoise",
pch = 1)

summary(habitantes)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 8000 870000 2690000 5924240 9060000 33800000
7.- Ojivas
7.1 Ojivas Ascendentes y Descendentes (ni)
par(mar = c(11, 7, 4, 2) + 0.1)
x_pos <- 1:length(TDF_final$`Intervalos de número de habitantes`)
plot(
x_pos, Ni_dsc,
type = "b",
col = "orange",
pch = 19,
lwd = 3,
main = "Gráfica N°6: Distribución de número de habitantes en el estudio de la
calidad del aire en India 2015-2020",
xlab = "Número de habitantes",
ylab = "",
ylim = c(0, max(c(Ni_asc, Ni_dsc))),
xaxt = "n",
yaxt = "s",
las = 1,
mgp = c(7, 1, 0)
)
title(ylab = "Cantidad", mgp = c(4, 1, 0))
lines(
x_pos, Ni_asc,
col = "green",
type = "b",
pch = 19,
lwd = 3
)
axis(
side = 1,
at = x_pos,
labels = TDF_final$`Intervalos de número de habitantes`,
las = 2,
cex.axis = 0.7
)
grid(
nx = NA,
ny = NULL,
col = "gray85",
lty = 1
)
legend(
"topright",
legend = c(
"Ascendente",
"Descendente"
),
col = c("green", "orange"),
pch = 19,
lty = 1,
lwd = 3,
bty = "n",
cex = 0.8
)

7.2.- Ojivas Ascendentes y Descendentes (hi)
par(mar = c(11, 7, 4, 2) + 0.1)
x_pos <- 1:length(TDF_final$`Intervalos de número de habitantes`)
plot(
x_pos, Hi_dsc,
type = "b",
col = "red",
pch = 19,
lwd = 2,
main = "Gráfica N°7: Distribución de número de habitantes en el estudio
de la calidad del aire en India 2015-2020",
xlab = "Número de habitantes",
ylab = "",
ylim = c(0, 100),
xaxt = "n",
yaxt = "s",
las = 1,
mgp = c(7, 1, 0)
)
title(ylab = "Porcentaje", mgp = c(4, 1, 0))
lines(
x_pos, Hi_asc,
col = "blue",
type = "b",
pch = 19,
lwd = 3
)
axis(
side = 1,
at = x_pos,
labels = TDF_final$`Intervalos de número de habitantes`,
las = 2,
cex.axis = 0.7
)
grid(
nx = NA,
ny = NULL,
col = "gray85",
lty = 1
)
legend(
"topright",
legend = c(
"Ascendente",
"Descendente"
),
col = c("blue", "red"),
pch = 19,
lty = 1,
lwd = 3,
bty = "n",
cex = 0.8
)

8.- Indicadores Estadísticos
8.1.- Indicadores de Tendencia Central
# Media aritmética
media <- mean(habitantes)
media
## [1] 5924240
# Mediana
mediana <- median(habitantes)
mediana
## [1] 2690000
# Moda
Mo <- "[0 - 8,000,000]"
8.2.- Inidicadores de Dispersión
# Varianza
varianza <- var(habitantes)
varianza
## [1] 68712236023333
# Desviación estándar
sd <- sd(habitantes)
sd
## [1] 8289284
# Coeficiente de variación
cv <- round((sd / media)*100, 2)
cv
## [1] 139.92
9.- Conclusiones
La variable número de habitantes fluctúa entre 8000 y 33800000, y sus
valores giran entorno a 2690000 con una desviación estándar de 8289284,
siendo un conjunto de datos muy heterogéneo. El conjunto de valores se
concentra fuertemente en la parte baja de la variable. Con la presencia
de valores atípicos del intervalo 8000 a 33800000.