La base de datos de Boston contiene información sobre valores de viviendas en 506 secciones censales del área de Boston, recopilada por el Servicio de Censos de EE. UU. en 1970. Este conjunto de datos fue originalmente publicado por Harrison y Rubinfeld en 1978 en el artículo “Hedonic prices and the demand for clean air”, y se ha empleado como referencia para benchmarkear algoritmos de regresión.
El conjunto incluye 14 variables, siendo la variable objetivo medv (valor medio de las viviendas ocupadas por el propietario en miles de dólares). Las variables independientes son:
crim: tasa de criminalidad per cápita por ciudad.
zn: proporción de terrenos residenciales zonificados para lotes de más de 25,000 pies cuadrados (≈2,322.58 m²).
indus: proporción de acres de negocios no minoristas por ciudad.
chas: variable ficticia (1 si el tramo limita con el río Charles, 0 en caso contrario).
nox: concentración de óxidos de nitrógeno (partes por 10 millones).
rm: número promedio de habitaciones por vivienda.
age: proporción de unidades ocupadas por el propietario construidas antes de 1940.
dis: distancia ponderada a cinco centros de empleo de Boston.
rad: índice de accesibilidad a carreteras radiales.
tax: tasa de impuesto a la propiedad de valor total por $10,000.
ptratio: relación alumno-profesor por ciudad.
lstat: porcentaje de población de clase baja.
b: 1000(Bk – 0.63)², donde Bk es la proporción de personas de raza negra por ciudad.
A continuación se indicarán los paquetes a emplear para trabajar con la base:
tidyverse
MASS
GGally
skimr
Los resultados que obtuvimos del análisis general empleando la función \(\ skimr\) se pueden ver a continuación:
#------------------------------
#1. Cargar y exlplorar dataset
#------------------------------
data("Boston")
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 | ▂▇▅▁▁ |
Es importante destacar que la variable \(\text{tax}\) es la que posee mayor disperción. A su vez, se observa que las variables de \(\text{tax}\) y \(\text{rad}\) pueden tener observaciones que resulten ser atípicas.
Los primeros 5 registros se pueden observar a continuación:
head(Boston,5)
## 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
## medv
## 1 24.0
## 2 21.6
## 3 34.7
## 4 33.4
## 5 36.2
Los descriptivos del conjunto de datos son los siguientes:
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
A continuación seleccionamos las variables clave para interpretar la base de datos:
\(\text{medv: median value of owner-occupied homes}\)
\(\text{rm: average number of rooms per dwelling}\)
\(\text{stat: lower status of the population (percent)}\)
\(\text{crim: per capita crime rate by town}\)
\(\text{tax: ull-value property-tax rate per 10,000}\)
#------------------------------
#2.Medidas descriptivas
#------------------------------
#Variables continuas clave
variables_g1<-c("medv", "rm", "lstat", "crim", "tax")
Boston_g1<-Boston %>% select(all_of(variables_g1))
De estas variables nos interesa saber su media y su desviación estandar, estos valores se muestran a continuación
#Media y desviación estándar
sapply(Boston[variables_g1],mean) #media de varias columnas
## medv rm lstat crim tax
## 22.532806 6.284634 12.653063 3.613524 408.237154
sapply(Boston[variables_g1],sd)
## medv rm lstat crim tax
## 9.1971041 0.7026171 7.1410615 8.6015451 168.5371161
Realizamos además un gráfico de cajas con información de las variables
\(\text{medv}\)
\(\text{rm}\)
\(\text{stat}\)
Realizando un análisis univariado de la base obtenemos los siguientes gráficos:
sqrt(dim(Boston))
## [1] 22.494444 3.741657
ggplot(Boston, aes(x=medv))+
geom_histogram(fill="skyblue", color="white", bins=23)+
ggtitle("Histograma de medv")+
theme_minimal()
ggplot(Boston, aes(x=rm))+
geom_histogram(fill="salmon", color="white", bins=23)+
ggtitle("Histograma de rm")+
theme_minimal()
ggplot(Boston, aes(x=lstat))+
geom_histogram(fill="lightgreen", color="white", bins=23)+
ggtitle("Histograma de lstat")+
theme_minimal()
Boston %>%
select(medv,rm, 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")+
#scale_fill_manual(values=c(medv="lightblue"), lstat= "light)
ggtitle("Boxplot de medv, rm y lstat")+
theme_minimal()
Un scatter plot, también conocido como diagrama de dispersión, es una representación gráfica que muestra la relación entre dos variables numéricas. Se utiliza un sistema de coordenadas cartesianas donde cada punto representa un par de valores: uno en el eje horizontal (variable independiente) y otro en el eje vertical (variable dependiente).
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")+
scale_color_manual(values=c(rm="blue", lstat="red",
crim="purple", tax="orange"))+
ggtitle("Relación de medv", subtitle = "Gráficos por faceta")+
theme_minimal()
Mientras que con un análisis bivariado obtenemos lo siguiente:
ggplot(Boston, aes(x=lstat, y=medv))+
geom_point(color="red")+
ggtitle("medv vs lstat")+
theme_minimal()
ggplot(Boston, aes(x=crim, y=medv))+
geom_point(color="purple")+
scale_x_log10()+
ggtitle("medv vs crim (escala log)")+
theme_minimal()
ggplot(Boston, aes(x=tax, y=medv))+
geom_point(color="orange")+
ggtitle("medv vs tax")+
theme_minimal()
Matriz de correlación visual es una representación gráfica que muestra los coeficientes de correlación entre múltiples variables en un formato matricial, donde cada celda representa la relación entre dos variables.
#------------------------------
#Mariz de correlación visual
#------------------------------
ggpairs(Boston[, c("medv", "rm","lstat")])
En la representación gráfica (como una imagen de calor), los colores oscuros indican correlaciones fuertes (positivas o negativas), mientras que los colores claros o blancos representan correlaciones débiles o nulas.
\(\text{medv}\) (valor medio de viviendas) muestra una fuerte correlación positiva con \(\text{rm}\) (número de habitaciones), con un valor de aproximadamente 0.695, lo que indica que más habitaciones están asociadas a precios más altos.
\(\text{medv}\) también tiene una fuerte correlación negativa con \(\text{lstat}\) (porcentaje de población de baja renta), alrededor de -0.738, sugiriendo que áreas con mayor pobreza tienden a tener valores de vivienda más bajos.
\(\text{crim}\) (tasa de criminalidad) está positivamente correlacionada con \(\text{lstat}\) y negativamente con \(\text{rm}\), lo que refleja patrones de desigualdad socioeconómica.