# 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 (frecuencia)
# 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
por ciudad en el análisis sobre la calidad del 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_final
| Tabla N°1 |
| Distribución de frecuencia del número de habitantes
por ciudad en el análisis sobre la calidad del aire en India |
| 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 Histograma
Diagrama de barras general
barplot(ni,
main="Gráfica N°1: Distribución de habitantes por intervalos
en las ciudades sobre el análisis sobre la calidad del aire en India",
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 de barras con relación al todo
barplot(ni,
main="Gráfica N°2: Distribución de habitantes por intervalos
en las ciudades sobre el análisis de la calidad del aire en India",
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 Histograma porcentual
Histograma porcentual general
barplot(TDF_final$`hi(%)`,
main="Gráfica N°3: Distribución de habitantes por intervalos
en las ciudades sobre el análisis de la calidad del aire en India",
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))

Histograma porcentual con relación al todo
barplot(TDF_final$`hi(%)`,
main="Gráfica N°4: Distribución de habitantes por intervalos
en las ciudades sobre el análisis de la calidad del aire en India",
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
ciudades sobre el análisis de la calidad del aire en India",
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(9, 6, 4, 2))
x_pos <- 1:length(TDF_final$`Intervalos de número de habitantes`)
plot(x_pos ,Ni_dsc,
main = "Gráfica N°6: Distribución de Número de habitantes por ciudades
sobre el análisis de la calidad del aire en India",
xlab = " Número de habitantes",
ylab = "Cantidad",
col = "orange",
type = "o",
lwd = 3,
xaxt="n",
mgp = c(5, 1, 0),
ylim = c(0, max(c(Ni_asc, Ni_dsc))))
lines(x_pos,Ni_asc,
col = "green",
type = "o",
lwd = 3)
axis(side = 1, at = x_pos, labels = TDF_final$`Intervalos de número de
habitantes`,
las = 2, cex.axis = 0.4)

7.2 Ojivas Ascendentes y Descendentes (hi)
par(mar = c(9, 6, 4, 2))
x_pos <- 1:length(TDF_final$`Intervalos de número de habitantes`)
plot(x_pos, Hi_dsc,
main = "Gráfica N°7: Distribución de Número de havitantes por ciudad sobre
el análisis de la calidad del aire en India",
xlab = " Número de habitantes",
ylab = "Porcentaje",
col = "red",
type = "o",
ylim = c(0, 100),
mgp = c(5, 1, 0),
lwd = 2,
xaxt="n")
lines(x_pos, Hi_asc,
col = "blue",
type = "o",
lwd = 3)
axis(side = 1, at = x_pos, labels = TDF_final$`Intervalos de número de
habitantes`,
las = 2, cex.axis = 0.4)

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.