El objetivo de este paso es obtener una visión general y estructurada del conjunto de datos, esto nos permitirá confirmar las dimensiones de la tabla, identificar los tipos de variables presentes (numéricas, categóricas, etc.), detectar rápidamente si existen valores faltantes (missing values) y observar la distribución estadística básica de cada variable a través de sus minigráficos.
| skim_type | skim_variable | n_missing | complete_rate | numeric.mean | numeric.sd | numeric.p0 | numeric.p25 | numeric.p50 | numeric.p75 | numeric.p100 | numeric.hist |
|---|---|---|---|---|---|---|---|---|---|---|---|
| numeric | crim | 0 | 1 | 3.6135236 | 8.6015451 | 0.00632 | 0.082045 | 0.25651 | 3.677083 | 88.9762 | ▇▁▁▁▁ |
| numeric | zn | 0 | 1 | 11.3636364 | 23.3224530 | 0.00000 | 0.000000 | 0.00000 | 12.500000 | 100.0000 | ▇▁▁▁▁ |
| numeric | indus | 0 | 1 | 11.1367787 | 6.8603529 | 0.46000 | 5.190000 | 9.69000 | 18.100000 | 27.7400 | ▇▆▁▇▁ |
| numeric | chas | 0 | 1 | 0.0691700 | 0.2539940 | 0.00000 | 0.000000 | 0.00000 | 0.000000 | 1.0000 | ▇▁▁▁▁ |
| numeric | nox | 0 | 1 | 0.5546951 | 0.1158777 | 0.38500 | 0.449000 | 0.53800 | 0.624000 | 0.8710 | ▇▇▆▅▁ |
| numeric | rm | 0 | 1 | 6.2846344 | 0.7026171 | 3.56100 | 5.885500 | 6.20850 | 6.623500 | 8.7800 | ▁▂▇▂▁ |
| numeric | age | 0 | 1 | 68.5749012 | 28.1488614 | 2.90000 | 45.025000 | 77.50000 | 94.075000 | 100.0000 | ▂▂▂▃▇ |
| numeric | dis | 0 | 1 | 3.7950427 | 2.1057101 | 1.12960 | 2.100175 | 3.20745 | 5.188425 | 12.1265 | ▇▅▂▁▁ |
| numeric | rad | 0 | 1 | 9.5494071 | 8.7072594 | 1.00000 | 4.000000 | 5.00000 | 24.000000 | 24.0000 | ▇▂▁▁▃ |
| numeric | tax | 0 | 1 | 408.2371542 | 168.5371161 | 187.00000 | 279.000000 | 330.00000 | 666.000000 | 711.0000 | ▇▇▃▁▇ |
| numeric | ptratio | 0 | 1 | 18.4555336 | 2.1649455 | 12.60000 | 17.400000 | 19.05000 | 20.200000 | 22.0000 | ▁▃▅▅▇ |
| numeric | black | 0 | 1 | 356.6740316 | 91.2948644 | 0.32000 | 375.377500 | 391.44000 | 396.225000 | 396.9000 | ▁▁▁▁▇ |
| numeric | lstat | 0 | 1 | 12.6530632 | 7.1410615 | 1.73000 | 6.950000 | 11.36000 | 16.955000 | 37.9700 | ▇▇▅▂▁ |
| numeric | medv | 0 | 1 | 22.5328063 | 9.1971041 | 5.00000 | 17.025000 | 21.20000 | 25.000000 | 50.0000 | ▂▇▅▁▁ |
El objetivo de esta instrucción es extraer e imprimir las primeras observaciones de la tabla.
| crim | zn | indus | chas | nox | rm | age | dis | rad | tax | ptratio | black | lstat | medv |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0.00632 | 18 | 2.31 | 0 | 0.538 | 6.575 | 65.2 | 4.0900 | 1 | 296 | 15.3 | 396.90 | 4.98 | 24.0 |
| 0.02731 | 0 | 7.07 | 0 | 0.469 | 6.421 | 78.9 | 4.9671 | 2 | 242 | 17.8 | 396.90 | 9.14 | 21.6 |
| 0.02729 | 0 | 7.07 | 0 | 0.469 | 7.185 | 61.1 | 4.9671 | 2 | 242 | 17.8 | 392.83 | 4.03 | 34.7 |
| 0.03237 | 0 | 2.18 | 0 | 0.458 | 6.998 | 45.8 | 6.0622 | 3 | 222 | 18.7 | 394.63 | 2.94 | 33.4 |
| 0.06905 | 0 | 2.18 | 0 | 0.458 | 7.147 | 54.2 | 6.0622 | 3 | 222 | 18.7 | 396.90 | 5.33 | 36.2 |
| 0.02985 | 0 | 2.18 | 0 | 0.458 | 6.430 | 58.7 | 6.0622 | 3 | 222 | 18.7 | 394.12 | 5.21 | 28.7 |
Se utiliza esta función para conocer el tamaño exacto y la escala de nuestra base de datos.
## [1] 506 14
Su propósito principal es listar todas las variables presentes, verificar los tipos de datos asignados a cada una de ellas
## '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 ...
Esta herramienta calcula las principales medidas descriptivas para cada variable del conjunto de datos. En el caso de las variables numéricas, nos proporciona un resumen de cinco números más la media: el valor mínimo, el primer cuartil (Q1), la mediana, la media aritmética, el tercer cuartil (Q3) y el valor máximo.
| crim | zn | indus | chas | nox | rm | age | dis | rad | tax | ptratio | black | lstat | medv | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Min. : 0.00632 | Min. : 0.00 | Min. : 0.46 | Min. :0.00000 | Min. :0.3850 | Min. :3.561 | Min. : 2.90 | Min. : 1.130 | Min. : 1.000 | Min. :187.0 | Min. :12.60 | Min. : 0.32 | Min. : 1.73 | Min. : 5.00 | |
| 1st Qu.: 0.08205 | 1st Qu.: 0.00 | 1st Qu.: 5.19 | 1st Qu.:0.00000 | 1st Qu.:0.4490 | 1st Qu.:5.886 | 1st Qu.: 45.02 | 1st Qu.: 2.100 | 1st Qu.: 4.000 | 1st Qu.:279.0 | 1st Qu.:17.40 | 1st Qu.:375.38 | 1st Qu.: 6.95 | 1st Qu.:17.02 | |
| Median : 0.25651 | Median : 0.00 | Median : 9.69 | Median :0.00000 | Median :0.5380 | Median :6.208 | Median : 77.50 | Median : 3.207 | Median : 5.000 | Median :330.0 | Median :19.05 | Median :391.44 | Median :11.36 | Median :21.20 | |
| Mean : 3.61352 | Mean : 11.36 | Mean :11.14 | Mean :0.06917 | Mean :0.5547 | Mean :6.285 | Mean : 68.57 | Mean : 3.795 | Mean : 9.549 | Mean :408.2 | Mean :18.46 | Mean :356.67 | Mean :12.65 | Mean :22.53 | |
| 3rd Qu.: 3.67708 | 3rd Qu.: 12.50 | 3rd Qu.:18.10 | 3rd Qu.:0.00000 | 3rd Qu.:0.6240 | 3rd Qu.:6.623 | 3rd Qu.: 94.08 | 3rd Qu.: 5.188 | 3rd Qu.:24.000 | 3rd Qu.:666.0 | 3rd Qu.:20.20 | 3rd Qu.:396.23 | 3rd Qu.:16.95 | 3rd Qu.:25.00 | |
| Max. :88.97620 | Max. :100.00 | Max. :27.74 | Max. :1.00000 | Max. :0.8710 | Max. :8.780 | Max. :100.00 | Max. :12.127 | Max. :24.000 | Max. :711.0 | Max. :22.00 | Max. :396.90 | Max. :37.97 | Max. :50.00 |
Se define un vector de caracteres, este objeto almacena los nombres de las cinco variables de interés
Se crea un nuevo subconjunto de datos este únicamente tiene las columnas especificadas en el paso anterior.
| medv | rm | lstat | crim | tax |
|---|---|---|---|---|
| 24.0 | 6.575 | 4.98 | 0.00632 | 296 |
| 21.6 | 6.421 | 9.14 | 0.02731 | 242 |
| 34.7 | 7.185 | 4.03 | 0.02729 | 242 |
| 33.4 | 6.998 | 2.94 | 0.03237 | 222 |
| 36.2 | 7.147 | 5.33 | 0.06905 | 222 |
| 28.7 | 6.430 | 5.21 | 0.02985 | 222 |
Se calcula el promedio aritmético de una variable individual.
## [1] 22.53281
Esta instrucción toma las cinco columnas de interés y les aplica la función mean (promedio) a todas simultáneamente.
| x | |
|---|---|
| medv | 22.532806 |
| rm | 6.284634 |
| lstat | 12.653063 |
| crim | 3.613524 |
| tax | 408.237154 |
En esta sección, el objetivo es visualizar el comportamiento individual de las tres variables más relevantes del estudio: medv, rm y lstat. Para lograr una comparación visual eficiente en un solo bloque, se reestructuran los datos al formato largo (long format) y se utiliza la gramática de gráficos de ggplot2. El uso de paneles múltiples (faceting) con escalas independientes en el eje horizontal nos permite observar la frecuencia y concentración de los datos de cada característica sin que pierdan la perspectiva de sus propias unidades de medida.
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 = "lightgreen")) +
theme_minimal()ggplot(Boston, aes(x = lstat)) +
geom_histogram(fill = "lightgreen", color = "white", bins = 15) +
theme_minimal()ggplot(Boston, aes(x = medv)) +
geom_histogram(fill = "skyblue", color = "white", bins = 23) +
theme_minimal()ggplot(Boston, aes(x = rm)) +
geom_histogram(fill = "salmon", color = "white", bins = 23) +
theme_minimal()Habitaciones (rm): El gráfico nos muestra una tendencia central muy clara. Esto indica que la oferta inmobiliaria es bastante estándar, con la gran mayoría de las viviendas ofreciendo entre 6 y 7 habitaciones en promedio.
Población vulnerable (lstat): La gráfica se concentra fuertemente a la izquierda. Esto refleja que la mayor parte de los vecindarios analizados tienen un bajo porcentaje de población con estatus socioeconómico menor.
Valor de la vivienda (medv): La distribución de los precios tiene su volumen principal en torno a los 20,000 y 25,000, sin embargo, el salto abrupto o ‘pico’ en el extremo derecho de la gráfica (exactamente en 50,000) sugiere que los precios fueron ‘topados’ artificialmente durante la recolección de los datos, registrando cualquier casa más cara que eso simplemente como $50,000.
Se procede a evaluar la dispersión y la presencia de valores atípicos (outliers) mediante diagramas de caja (boxplots).
Boston %>%
select(medv, lstat) %>%
pivot_longer(cols = everything(),
names_to = "variable",
values_to = "valor") %>%
ggplot(aes(x = valor, y = valor, fill = variable)) +
geom_boxplot() +
scale_fill_brewer(palette = "Set2") +
theme_minimal()Se procede a graficar múltiples diagramas de dispersión, utilizando la técnica de paneles cruzados (faceting), se evalúa simultáneamente la relación de nuestra variable dependiente (medv) frente a cuatro variables independientes
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_fill_brewer(palette = "Set2") +
scale_color_manual(values = c(rm = "blue", lstat = "red", crim = "purple", tax = "orange")) +
theme_minimal()ggplot(Boston, aes(x = crim, y = medv)) +
scale_x_log10() +
geom_point(color = "purple") +
theme_minimal()Habitaciones (rm): Muestra la relación lineal positiva, se observa una tendencia diagonal ascendente casi perfecta, confirmando que a mayor cantidad de cuartos, el valor de la vivienda aumenta de manera constante y proporcional.
Población vulnerable (lstat): Una fuerte correlación negativa, pero con una forma no lineal (ligeramente curva o exponencial), los precios caen drásticamente en los primeros niveles de vulnerabilidad, y luego la caída se suaviza conforme el porcentaje de pobreza es muy alto.
Criminalidad (crim): Presenta una distribución en forma de L, observamos que las propiedades de alto valor solo existen en zonas donde el crimen es prácticamente cero, a medida que el índice de criminalidad aumenta mínimamente, los precios se desploman y se mantienen en el rango más bajo.
Impuestos (tax): No muestra una tendencia lineal típica, sino más bien agrupaciones, destaca especialmente una línea vertical densa en el extremo derecho, todas las viviendas sujetas a este nivel de impuestos particular tienen precios sistemáticamente bajos, lo cual sugiere que pertenecen a un sector geográfico o industrial muy específico con características propias.
El siguiente paso es cuantificar su comportamiento general. Para ello, se calculan dos métricas estadísticas fundamentales: la media aritmética, para entender la tendencia central de cada característica, y la desviación estándar, para evaluar el grado de dispersión o variabilidad de los datos respecto a dicho promedio.
Las métricas calculadas revelan contrastes interesantes en la variabilidad de las distintas características:
Por un lado, la cantidad de habitaciones (rm) presenta un promedio de 6.28 y una desviación estándar muy baja (0.70); esto nos indica que el tamaño de las viviendas es sumamente uniforme en casi todos los vecindarios.
En contraste, la tasa de criminalidad (crim) muestra un comportamiento muy distinto: su desviación estándar (8.60) es más del doble de su propia media (3.61), esta altísima dispersión es un claro indicador de que la criminalidad no está distribuida de manera uniforme en la ciudad, sugiriendo la existencia de zonas específicas con índices de delincuencia extremadamente altos que sesgan el promedio general.