El objetivo de este análisis es explorar el conjunto de datos Boston Housing, el cual contiene información sobre diferentes características socioeconómicas y estructurales de barrios en Boston, así como el valor medio de las viviendas.

1. Carga de paquetes y datos

# Cargar paquetes
install.packages("pacman", repos = "https://cloud.r-project.org")
## package 'pacman' successfully unpacked and MD5 sums checked
## 
## The downloaded binary packages are in
##  C:\Users\mayte\AppData\Local\Temp\RtmpEJLMR8\downloaded_packages
library(pacman)
p_load(MASS, tidyverse, GGally, skimr)
options(scipen = 999)

2. Exploración inicial del dataset

# Cargar dataset
data("Boston")

# Primeras filas
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
# Dimensión del dataset
dim(Boston)
## [1] 506  14
# Estructura de los datos
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 ...
# Resumen estadístico
summary(Boston)
##       crim                zn             indus            chas        
##  Min.   : 0.00632   Min.   :  0.00   Min.   : 0.46   Min.   :0.00000  
##  1st Qu.: 0.08205   1st Qu.:  0.00   1st Qu.: 5.19   1st Qu.:0.00000  
##  Median : 0.25651   Median :  0.00   Median : 9.69   Median :0.00000  
##  Mean   : 3.61352   Mean   : 11.36   Mean   :11.14   Mean   :0.06917  
##  3rd Qu.: 3.67708   3rd Qu.: 12.50   3rd Qu.:18.10   3rd Qu.:0.00000  
##  Max.   :88.97620   Max.   :100.00   Max.   :27.74   Max.   :1.00000  
##       nox               rm             age              dis        
##  Min.   :0.3850   Min.   :3.561   Min.   :  2.90   Min.   : 1.130  
##  1st Qu.:0.4490   1st Qu.:5.886   1st Qu.: 45.02   1st Qu.: 2.100  
##  Median :0.5380   Median :6.208   Median : 77.50   Median : 3.207  
##  Mean   :0.5547   Mean   :6.285   Mean   : 68.57   Mean   : 3.795  
##  3rd Qu.:0.6240   3rd Qu.:6.623   3rd Qu.: 94.08   3rd Qu.: 5.188  
##  Max.   :0.8710   Max.   :8.780   Max.   :100.00   Max.   :12.127  
##       rad              tax           ptratio          black       
##  Min.   : 1.000   Min.   :187.0   Min.   :12.60   Min.   :  0.32  
##  1st Qu.: 4.000   1st Qu.:279.0   1st Qu.:17.40   1st Qu.:375.38  
##  Median : 5.000   Median :330.0   Median :19.05   Median :391.44  
##  Mean   : 9.549   Mean   :408.2   Mean   :18.46   Mean   :356.67  
##  3rd Qu.:24.000   3rd Qu.:666.0   3rd Qu.:20.20   3rd Qu.:396.23  
##  Max.   :24.000   Max.   :711.0   Max.   :22.00   Max.   :396.90  
##      lstat            medv      
##  Min.   : 1.73   Min.   : 5.00  
##  1st Qu.: 6.95   1st Qu.:17.02  
##  Median :11.36   Median :21.20  
##  Mean   :12.65   Mean   :22.53  
##  3rd Qu.:16.95   3rd Qu.:25.00  
##  Max.   :37.97   Max.   :50.00
# Exploración detallada
skim(Boston)
Data summary
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 ▂▇▅▁▁

Observaciones:

El dataset contiene 506 observaciones y 14 variables. Las variables incluyen indicadores económicos, demográficos y estructurales de las viviendas.

Las variables relevantes incluyen:

3. Medidas descriptivas

En esta sección se calculan medidas estadísticas básicas para algunas variables clave.

variables_g1 <- c("medv", "rm", "lstat", "crim", "tax")

Boston_g1 <- Boston %>% 
  select(all_of(variables_g1))

# Media
sapply(Boston[variables_g1], mean)
##       medv         rm      lstat       crim        tax 
##  22.532806   6.284634  12.653063   3.613524 408.237154
# Desviación estándar
sapply(Boston[variables_g1], sd)
##        medv          rm       lstat        crim         tax 
##   9.1971041   0.7026171   7.1410615   8.6015451 168.5371161

Observaciones:

Las estadísticas descriptivas permiten identificar la tendencia central y la dispersión de las variables.

Por ejemplo:

4. Histogramas

Los histogramas permiten visualizar la distribución de las variables.

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_brewer(palette = "Set2") +
  labs(title = "Histogramas de medv, rm y lstat") +
  theme_minimal()

Histogramas individuales

ggplot(Boston, aes(x = medv)) +
  geom_histogram(fill = "skyblue", color = "white", bins = 10) +
  ggtitle("Histograma de medv") +
  theme_minimal()

ggplot(Boston, aes(x = rm)) +
  geom_histogram(fill = "salmon", color = "white", bins = 15) +
  ggtitle("Histograma de rm") +
  theme_minimal()

ggplot(Boston, aes(x = lstat)) +
  geom_histogram(fill = "lightgreen", color = "white", bins = 15) +
  ggtitle("Histograma de lstat") +
  theme_minimal()

Observaciones:

Los histogramas muestran que:

  • medv presenta una distribución ligeramente sesgada.

  • rm tiene una distribución relativamente simétrica.

  • lstat presenta una clara asimetría positiva.

Esto indica que algunas zonas tienen porcentajes significativamente mayores de población de bajo estatus socioeconómico.

5. Boxplots

Los boxplots permiten identificar valores atípicos y comparar la dispersión de las variables.

Boston %>% 
  select(medv, lstat) %>% 
  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") +
  ggtitle("Boxplot de medv y lstat") +
  theme_minimal()

Boxplots individuales

ggplot(Boston, aes(y = medv)) +
  geom_boxplot(fill = "lightblue") +
  ggtitle("Boxplot de medv") +
  theme_minimal()

ggplot(Boston, aes(y = lstat)) +
  geom_boxplot(fill = "lightgray") +
  ggtitle("Boxplot de lstat") +
  theme_minimal()

Observaciones:

Los boxplots muestran la presencia de valores atípicos, especialmente en la variable lstat, lo cual sugiere que existen barrios con porcentajes extremadamente altos de población de bajo estatus.

6. Gráficos de dispersión (Scatter Plots)

Estos gráficos permiten analizar la relación entre el valor de las viviendas (medv) y otras variables.

Boston %>% 
  select(medv, rm, lstat, crim, tax) %>% 
  pivot_longer(cols = -medv,
               names_to = "variable",
               values_to = "valor") %>% 
  ggplot(aes(x = valor, y = medv, color = variable)) +
  geom_point() +
  facet_wrap(~variable, scales = "free_x") +
  labs(title = "Relación de medv con otras variables",
       subtitle = "Gráficos por faceta") +
  theme_minimal()

Scatter plots individuales

ggplot(Boston, aes(x = rm, y = medv)) +
  geom_point(color = "red") +
  ggtitle("Relación entre número de habitaciones y valor de vivienda") +
  theme_minimal()

ggplot(Boston, aes(x = crim, y = medv)) +
  geom_point(color = "purple") +
  scale_x_log10() +
  ggtitle("Relación entre criminalidad y valor de vivienda") +
  theme_minimal()

ggplot(Boston, aes(x = tax, y = medv)) +
  geom_point(color = "orange") +
  ggtitle("Relación entre impuestos y valor de vivienda") +
  theme_minimal()

Observaciones:

Los gráficos muestran algunas relaciones claras:

  • rm y medv tienen una relación positiva: a mayor número de habitaciones, mayor valor de vivienda.

  • lstat y medv presentan una relación negativa: un mayor porcentaje de población de bajo estatus está asociado con menor valor de vivienda.

  • crim y medv también muestran una relación negativa, indicando que la criminalidad podría afectar el valor de las propiedades.

7. Matriz de correlación

ggpairs(Boston[, c("medv","rm","lstat")])

Observaciones: La matriz de correlación confirma lo observado anteriormente:

Esto sugiere que estas variables podrían ser buenos predictores en modelos de regresión.

Conclusiones

En este análisis exploratorio del dataset Boston se pudo comprender mejor cómo se comportan las variables relacionadas con el valor de las viviendas. A través de los histogramas, boxplots y gráficos de dispersión se observó la distribución de los datos, la presencia de algunos valores atípicos y la relación entre distintas variables.

Los resultados muestran que el número de habitaciones de una vivienda (rm) tiene una relación positiva con su valor, lo que significa que las casas con más habitaciones tienden a tener precios más altos. Por otro lado, variables como el porcentaje de población de bajo estatus socioeconómico (lstat) y la tasa de criminalidad (crim) presentan una relación negativa con el valor de las viviendas, indicando que en zonas con mayores niveles de estas variables el precio de las casas suele ser menor.

En general, este análisis permitió identificar patrones importantes dentro del dataset y entender qué factores pueden influir en el valor de las viviendas. Además, estos resultados pueden servir como base para realizar análisis más avanzados o modelos que ayuden a predecir el precio de las viviendas a partir de sus características.