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.
# 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)
# 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)
| 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:
medv: valor medio de las viviendas (en miles de dólares)
rm: número promedio de habitaciones por vivienda
lstat: porcentaje de población de bajo estatus socioeconómico
crim: tasa de criminalidad
tax: tasa de impuesto a la propiedad
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:
medv presenta una media alrededor de 22.5 (miles de dólares).
rm indica que en promedio las viviendas tienen alrededor de 6 habitaciones.
lstat muestra una dispersión considerable, indicando diferencias socioeconómicas entre barrios.
crim presenta valores muy dispersos, lo que sugiere la presencia de barrios con niveles de criminalidad muy altos.
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()
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.
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()
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.
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()
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.
ggpairs(Boston[, c("medv","rm","lstat")])
Observaciones: La matriz de correlación confirma lo observado anteriormente:
rm presenta correlación positiva con medv.
lstat presenta correlación negativa fuerte con medv.
Esto sugiere que estas variables podrían ser buenos predictores en modelos de regresión.
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.