title: “Análisis Exploratorio del Dataset Boston” author: “Jesús” date: “2026-03-06” output: html_document ———————
El presente documento muestra un análisis exploratorio del dataset Boston incluido en la librería MASS de R. Este conjunto de datos contiene información socioeconómica y características de viviendas en distintos barrios de Boston. El objetivo del análisis exploratorio es comprender la estructura de los datos, observar la distribución de las variables y detectar posibles relaciones entre ellas.
# 1. Instalar pacman automáticamente si no lo tienes
if (!requireNamespace("pacman", quietly = TRUE)) {
install.packages("pacman")
}
# 2. Cargar librerías necesarias
library(pacman)
## Warning: package 'pacman' was built under R version 4.5.2
p_load(MASS, tidyverse, GGally, skimr)
# 3. Configuración para evitar notación científica
options(scipen = 999)
# 4. Cargar la base de datos
data("Boston")
En esta sección se revisa la estructura general del conjunto de datos, incluyendo número de observaciones, tipo de variables y primeras filas del dataset.
skim(Boston)
| Name | Boston |
| Number of rows | 506 |
| Number of columns | 14 |
| _______________________ | |
| Column type frequency: | |
| numeric | 14 |
| ________________________ | |
| Group variables | None |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| crim | 0 | 1 | 3.61 | 8.60 | 0.01 | 0.08 | 0.26 | 3.68 | 88.98 | ▇▁▁▁▁ |
| zn | 0 | 1 | 11.36 | 23.32 | 0.00 | 0.00 | 0.00 | 12.50 | 100.00 | ▇▁▁▁▁ |
| indus | 0 | 1 | 11.14 | 6.86 | 0.46 | 5.19 | 9.69 | 18.10 | 27.74 | ▇▆▁▇▁ |
| chas | 0 | 1 | 0.07 | 0.25 | 0.00 | 0.00 | 0.00 | 0.00 | 1.00 | ▇▁▁▁▁ |
| nox | 0 | 1 | 0.55 | 0.12 | 0.38 | 0.45 | 0.54 | 0.62 | 0.87 | ▇▇▆▅▁ |
| rm | 0 | 1 | 6.28 | 0.70 | 3.56 | 5.89 | 6.21 | 6.62 | 8.78 | ▁▂▇▂▁ |
| age | 0 | 1 | 68.57 | 28.15 | 2.90 | 45.02 | 77.50 | 94.07 | 100.00 | ▂▂▂▃▇ |
| dis | 0 | 1 | 3.80 | 2.11 | 1.13 | 2.10 | 3.21 | 5.19 | 12.13 | ▇▅▂▁▁ |
| rad | 0 | 1 | 9.55 | 8.71 | 1.00 | 4.00 | 5.00 | 24.00 | 24.00 | ▇▂▁▁▃ |
| tax | 0 | 1 | 408.24 | 168.54 | 187.00 | 279.00 | 330.00 | 666.00 | 711.00 | ▇▇▃▁▇ |
| ptratio | 0 | 1 | 18.46 | 2.16 | 12.60 | 17.40 | 19.05 | 20.20 | 22.00 | ▁▃▅▅▇ |
| black | 0 | 1 | 356.67 | 91.29 | 0.32 | 375.38 | 391.44 | 396.22 | 396.90 | ▁▁▁▁▇ |
| lstat | 0 | 1 | 12.65 | 7.14 | 1.73 | 6.95 | 11.36 | 16.96 | 37.97 | ▇▇▅▂▁ |
| medv | 0 | 1 | 22.53 | 9.20 | 5.00 | 17.02 | 21.20 | 25.00 | 50.00 | ▂▇▅▁▁ |
head(Boston)
## crim zn indus chas nox rm age dis rad tax ptratio black lstat
## 1 0.00632 18 2.31 0 0.538 6.575 65.2 4.0900 1 296 15.3 396.90 4.98
## 2 0.02731 0 7.07 0 0.469 6.421 78.9 4.9671 2 242 17.8 396.90 9.14
## 3 0.02729 0 7.07 0 0.469 7.185 61.1 4.9671 2 242 17.8 392.83 4.03
## 4 0.03237 0 2.18 0 0.458 6.998 45.8 6.0622 3 222 18.7 394.63 2.94
## 5 0.06905 0 2.18 0 0.458 7.147 54.2 6.0622 3 222 18.7 396.90 5.33
## 6 0.02985 0 2.18 0 0.458 6.430 58.7 6.0622 3 222 18.7 394.12 5.21
## medv
## 1 24.0
## 2 21.6
## 3 34.7
## 4 33.4
## 5 36.2
## 6 28.7
dim(Boston)
## [1] 506 14
str(Boston)
## 'data.frame': 506 obs. of 14 variables:
## $ crim : num 0.00632 0.02731 0.02729 0.03237 0.06905 ...
## $ zn : num 18 0 0 0 0 0 12.5 12.5 12.5 12.5 ...
## $ indus : num 2.31 7.07 7.07 2.18 2.18 2.18 7.87 7.87 7.87 7.87 ...
## $ chas : int 0 0 0 0 0 0 0 0 0 0 ...
## $ nox : num 0.538 0.469 0.469 0.458 0.458 0.458 0.524 0.524 0.524 0.524 ...
## $ rm : num 6.58 6.42 7.18 7 7.15 ...
## $ age : num 65.2 78.9 61.1 45.8 54.2 58.7 66.6 96.1 100 85.9 ...
## $ dis : num 4.09 4.97 4.97 6.06 6.06 ...
## $ rad : int 1 2 2 3 3 3 5 5 5 5 ...
## $ tax : num 296 242 242 222 222 222 311 311 311 311 ...
## $ ptratio: num 15.3 17.8 17.8 18.7 18.7 18.7 15.2 15.2 15.2 15.2 ...
## $ black : num 397 397 393 395 397 ...
## $ lstat : num 4.98 9.14 4.03 2.94 5.33 ...
## $ medv : num 24 21.6 34.7 33.4 36.2 28.7 22.9 27.1 16.5 18.9 ...
El dataset Boston contiene información socioeconómica y características de viviendas en diferentes zonas. La exploración inicial permite conocer el número de observaciones, el tipo de variables y la estructura general de los datos antes de realizar análisis más profundos.
Se seleccionan algunas variables relevantes para el análisis y se calculan medidas descriptivas como la media y la desviación estándar.
# Variables continuas clave
variables_g1 <- c("medv", "rm", "lstat", "crim", "tax")
Boston_g1 <- Boston %>% select(all_of(variables_g1))
cat("\n--- Medias ---\n")
##
## --- Medias ---
sapply(Boston_g1, mean)
## medv rm lstat crim tax
## 22.532806 6.284634 12.653063 3.613524 408.237154
cat("\n--- Desviaciones Estándar ---\n")
##
## --- Desviaciones Estándar ---
sapply(Boston_g1, sd)
## medv rm lstat crim tax
## 9.1971041 0.7026171 7.1410615 8.6015451 168.5371161
Las estadísticas descriptivas permiten identificar el comportamiento promedio de las variables y su nivel de dispersión. Variables como medv representan el valor mediano de las viviendas, rm indica el número promedio de habitaciones y lstat el porcentaje de población de bajo estatus socioeconómico.
Los histogramas permiten analizar la forma de la distribución de cada variable y detectar posibles asimetrías o concentraciones de valores.
Boston %>%
select(medv, rm, lstat) %>%
pivot_longer(cols = everything(),
names_to = "variable",
values_to = "valor") %>%
ggplot(aes(x = valor, fill = variable)) +
geom_histogram(color = "white", bins = 15) +
facet_wrap(~variable, scales = "free_x") +
scale_fill_manual(values = c("medv" = "skyblue", "rm" = "salmon", "lstat" = "green")) +
theme_minimal() +
labs(title = "Histogramas de variables medv, rm y lstat",
x = "Valor",
y = "Frecuencia")
Se puede observar que cada variable presenta distribuciones diferentes. Algunas variables muestran mayor concentración de valores en ciertos rangos, lo cual es común en datos socioeconómicos.
La matriz de correlación permite identificar relaciones entre variables numéricas y detectar posibles asociaciones entre ellas.
ggpairs(Boston_g1, title = "Matriz de Correlación (Variables Clave)")
La matriz de correlación facilita visualizar posibles relaciones lineales entre variables. Esto es útil para identificar variables que podrían explicar el comportamiento del valor de las viviendas.
ggplot(Boston, aes(x=medv)) +
geom_histogram(fill="skyblue", color="white", bins = 10) +
ggtitle("Histograma medv") +
theme_minimal()
ggplot(Boston, aes(x=rm)) +
geom_histogram(fill="black", color="orange", bins = 23) +
ggtitle("Histograma rm") +
theme_minimal()
ggplot(Boston, aes(x=lstat)) +
geom_histogram(fill="black", color="orange", bins = 23) +
ggtitle("Histograma lstat") +
theme_minimal()
Estos histogramas permiten observar con mayor detalle la distribución de cada variable de forma individual.
Los boxplots permiten identificar la dispersión de los datos y detectar valores atípicos dentro de cada variable.
Boston %>%
select(medv, rm, lstat, crim, tax) %>%
pivot_longer(cols = everything(),
names_to = "variable",
values_to = "valor") %>%
ggplot(aes(x = variable, y = valor, fill = variable)) +
geom_boxplot() +
scale_fill_brewer(palette = "Set2") +
theme_minimal() +
labs(title = "Distribución de variables clave", subtitle = "Boxplots por variable")
Los boxplots muestran la mediana, los cuartiles y posibles valores extremos. Algunas variables como la tasa de criminalidad pueden presentar mayor dispersión.
Se analiza la relación entre la tasa de criminalidad y el valor de las viviendas.
ggplot(Boston, aes(x = crim, y = medv)) +
geom_point(color = "purple", alpha = 0.5) +
scale_x_log10() +
theme_minimal() +
labs(title = "Relación de MEDV vs CRIM",
subtitle = "Escala logarítmica en el eje X",
x = "Tasa de Crimen (log10)",
y = "Valor Mediano de Vivienda")
El gráfico sugiere una relación negativa entre la tasa de criminalidad y el valor de las viviendas. Las zonas con mayor criminalidad tienden a presentar precios de vivienda más bajos.
A partir del análisis exploratorio del dataset Boston se pueden destacar varios puntos importantes: