El conjunto de datos California Housing contiene información demográfica y económica de distritos censales de California. El objetivo del análisis es estudiar los factores asociados al valor medio de las viviendas (MedHouseVal), identificando relaciones entre variables y construyendo modelos de regresión que permitan explicar y predecir dicho valor. La base contiene 20640 observaciones y 10 variables, incluyendo variables de naturaleza cuantitativa relacionadas con ingresos, antigüedad de las viviendas, ocupación y número promedio de habitaciones.
library(readr)
housing <- read_csv("C:/Users/aidas/Downloads/housing.csv/housing.csv")
## Rows: 20640 Columns: 10
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): ocean_proximity
## dbl (9): longitude, latitude, housing_median_age, total_rooms, total_bedroom...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
datos<- housing
dim(datos)
## [1] 20640 10
datos
## # A tibble: 20,640 × 10
## longitude latitude housing_median_age total_rooms total_bedrooms population
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 -122. 37.9 41 880 129 322
## 2 -122. 37.9 21 7099 1106 2401
## 3 -122. 37.8 52 1467 190 496
## 4 -122. 37.8 52 1274 235 558
## 5 -122. 37.8 52 1627 280 565
## 6 -122. 37.8 52 919 213 413
## 7 -122. 37.8 52 2535 489 1094
## 8 -122. 37.8 52 3104 687 1157
## 9 -122. 37.8 42 2555 665 1206
## 10 -122. 37.8 52 3549 707 1551
## # ℹ 20,630 more rows
## # ℹ 4 more variables: households <dbl>, median_income <dbl>,
## # median_house_value <dbl>, ocean_proximity <chr>
El conjunto de datos California Housing está conformado por 10 variables, de las cuales 9 son cuantitativas y 1 cualitativa. Las variables cuantitativas incluyen información geográfica, demográfica, económica y características de las viviendas, mientras que la variable cualitativa describe la proximidad de cada distrito al océano. En general, la base de datos proporciona información relevante para analizar los factores asociados al valor medio de las viviendas, variable que constituye el principal objeto de estudio en este análisis.
caracterizacion <- data.frame(
Variable = c(
"longitude",
"latitude",
"housing_median_age",
"total_rooms",
"total_bedrooms",
"population",
"households",
"median_income",
"median_house_value",
"ocean_proximity"
),
Tipo = c(
"Cuantitativa",
"Cuantitativa",
"Cuantitativa",
"Cuantitativa",
"Cuantitativa",
"Cuantitativa",
"Cuantitativa",
"Cuantitativa",
"Cuantitativa",
"Cualitativa"
),
Clasificacion = c(
"Continua",
"Continua",
"Continua",
"Discreta",
"Discreta",
"Discreta",
"Discreta",
"Continua",
"Continua",
"Nominal"
),
Descripcion = c(
"Longitud geografica",
"Latitud geografica",
"Edad mediana de viviendas",
"Total de habitaciones",
"Total de dormitorios",
"Poblacion",
"Numero de hogares",
"Ingreso medio",
"Valor medio de viviendas",
"Proximidad al oceano"
)
)
library(knitr)
kable(
caracterizacion,
caption = "Caracterización de variables"
)
| Variable | Tipo | Clasificacion | Descripcion |
|---|---|---|---|
| longitude | Cuantitativa | Continua | Longitud geografica |
| latitude | Cuantitativa | Continua | Latitud geografica |
| housing_median_age | Cuantitativa | Continua | Edad mediana de viviendas |
| total_rooms | Cuantitativa | Discreta | Total de habitaciones |
| total_bedrooms | Cuantitativa | Discreta | Total de dormitorios |
| population | Cuantitativa | Discreta | Poblacion |
| households | Cuantitativa | Discreta | Numero de hogares |
| median_income | Cuantitativa | Continua | Ingreso medio |
| median_house_value | Cuantitativa | Continua | Valor medio de viviendas |
| ocean_proximity | Cualitativa | Nominal | Proximidad al oceano |
Como parte del proceso de depuración y validación de la calidad de los datos, se realizó una revisión de los valores faltantes presentes en la base de datos. Este análisis permite identificar posibles registros incompletos que puedan afectar los resultados estadísticos y la construcción de los modelos de regresión. En la siguiente tabla se presenta la cantidad y el porcentaje de valores faltantes encontrados en cada variable.
sum(is.na(housing))
## [1] 207
colSums(is.na(housing))
## longitude latitude housing_median_age total_rooms
## 0 0 0 0
## total_bedrooms population households median_income
## 207 0 0 0
## median_house_value ocean_proximity
## 0 0
round(
colSums(is.na(housing))/nrow(housing)*100,
2
)
## longitude latitude housing_median_age total_rooms
## 0 0 0 0
## total_bedrooms population households median_income
## 1 0 0 0
## median_house_value ocean_proximity
## 0 0
faltantes <- data.frame(
Variable = names(housing),
Valores_Faltantes = colSums(is.na(housing)),
Porcentaje = round(
colSums(is.na(housing))/nrow(housing)*100,
2
)
)
faltantes
## Variable Valores_Faltantes Porcentaje
## longitude longitude 0 0
## latitude latitude 0 0
## housing_median_age housing_median_age 0 0
## total_rooms total_rooms 0 0
## total_bedrooms total_bedrooms 207 1
## population population 0 0
## households households 0 0
## median_income median_income 0 0
## median_house_value median_house_value 0 0
## ocean_proximity ocean_proximity 0 0
Se identificó que únicamente la variable total_bedrooms presenta valores faltantes, con 207 observaciones ausentes. Las demás variables no registran datos faltantes, lo que evidencia una adecuada calidad general de la información.
Una vez identificados los valores faltantes, se procedió a depurar la base de datos mediante la eliminación de los registros incompletos utilizando la función na.omit(). Posteriormente, se verificó nuevamente la presencia de datos ausentes con el fin de garantizar que todas las variables estuvieran completas para los análisis estadísticos posteriores.
housing_limpio <- na.omit(housing)
housing$total_bedrooms[
is.na(housing$total_bedrooms)
] <- median(
housing$total_bedrooms,
na.rm = TRUE
)
housing_limpio <- na.omit(housing)
colSums(is.na(housing_limpio))
## longitude latitude housing_median_age total_rooms
## 0 0 0 0
## total_bedrooms population households median_income
## 0 0 0 0
## median_house_value ocean_proximity
## 0 0
Los resultados evidencian que, después del proceso de depuración, ninguna de las variables presenta valores faltantes. Esto indica que la base de datos quedó completamente limpia y apta para la aplicación de técnicas de análisis exploratorio, correlación y regresión, sin riesgo de sesgos asociados a datos ausentes.
nrow(housing)
## [1] 20640
nrow(housing_limpio)
## [1] 20640
nrow(housing) - nrow(housing_limpio)
## [1] 0
Se eliminaron 207 observaciones incompletas, conservándose más del 99% de la información original.
Se calcularon estadísticas descriptivas para obtener una visión general del comportamiento de las variables, identificando su tendencia central, dispersión y rango de variación antes de realizar los análisis posteriores.
summary(housing_limpio)
## longitude latitude housing_median_age total_rooms
## Min. :-124.3 Min. :32.54 Min. : 1.00 Min. : 2
## 1st Qu.:-121.8 1st Qu.:33.93 1st Qu.:18.00 1st Qu.: 1448
## Median :-118.5 Median :34.26 Median :29.00 Median : 2127
## Mean :-119.6 Mean :35.63 Mean :28.64 Mean : 2636
## 3rd Qu.:-118.0 3rd Qu.:37.71 3rd Qu.:37.00 3rd Qu.: 3148
## Max. :-114.3 Max. :41.95 Max. :52.00 Max. :39320
## total_bedrooms population households median_income
## Min. : 1.0 Min. : 3 Min. : 1.0 Min. : 0.4999
## 1st Qu.: 297.0 1st Qu.: 787 1st Qu.: 280.0 1st Qu.: 2.5634
## Median : 435.0 Median : 1166 Median : 409.0 Median : 3.5348
## Mean : 536.8 Mean : 1425 Mean : 499.5 Mean : 3.8707
## 3rd Qu.: 643.2 3rd Qu.: 1725 3rd Qu.: 605.0 3rd Qu.: 4.7432
## Max. :6445.0 Max. :35682 Max. :6082.0 Max. :15.0001
## median_house_value ocean_proximity
## Min. : 14999 Length:20640
## 1st Qu.:119600 Class :character
## Median :179700 Mode :character
## Mean :206856
## 3rd Qu.:264725
## Max. :500001
Los resultados evidencian diferencias importantes en la dispersión de las variables, así como posibles valores extremos en aquellas relacionadas con habitaciones, población y hogares, aspectos que serán considerados en los análisis posteriores.
Con el fin de analizar la distribución del valor medio de las viviendas (median_house_value), se construyeron un histograma y un diagrama de caja. Estas representaciones gráficas permiten identificar la forma de la distribución, la presencia de asimetrías y posibles valores atípicos.
housing_limpio <- housing
library(summarytools)
## Warning: package 'summarytools' was built under R version 4.5.3
view(dfSummary(housing_limpio))
## Switching method to 'browser'
## Output file written: C:\Users\aidas\AppData\Local\Temp\RtmpAB6Dgd\file592440fe1839.html
par(mfrow= c (1,2))
hist(housing_limpio$median_house_value, col = "blue")
boxplot(housing_limpio$median_house_value, col = "blue", horizontal = T)
El histograma muestra que la distribución del valor medio de las
viviendas presenta una asimetría positiva, ya que la mayor concentración
de observaciones se encuentra en valores bajos y medios, mientras que
existe una cola hacia valores más altos. Por su parte, el diagrama de
caja evidencia la presencia de valores extremos en la parte superior de
la distribución, lo que sugiere la existencia de viviendas con precios
considerablemente superiores al comportamiento general de los datos. En
conjunto, ambas gráficas indican que la variable no presenta una
distribución perfectamente simétrica y que podrían existir observaciones
influyentes que deben considerarse en los análisis posteriores.
Con el propósito de identificar la intensidad y dirección de las relaciones entre las variables cuantitativas, se construyó una matriz de correlación. Este análisis permite detectar asociaciones lineales que pueden resultar relevantes para la construcción de modelos de regresión.
library(PerformanceAnalytics)
## Warning: package 'PerformanceAnalytics' was built under R version 4.5.3
## Cargando paquete requerido: xts
## Warning: package 'xts' was built under R version 4.5.3
## Cargando paquete requerido: zoo
## Warning: package 'zoo' was built under R version 4.5.3
##
## Adjuntando el paquete: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
##
## Adjuntando el paquete: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
##
## legend
chart.Correlation(
housing_limpio[,sapply(housing_limpio,is.numeric)],
histogram = TRUE,
pch = 19
)
La matriz de correlación general permitió identificar relaciones
lineales entre las variables del conjunto de datos, evidenciando
asociaciones fuertes entre algunas características demográficas y
estructurales de los distritos. No obstante, dado que el objetivo del
estudio se centra en analizar el comportamiento del valor medio de las
viviendas y las variables seleccionadas en la guía, a continuación se
realizará un análisis específico utilizando únicamente las variables
MedHouseVal, MedInc, HouseAge, AveRooms y AveOccup. Esto permitirá
responder de manera precisa las preguntas planteadas y evaluar las
relaciones más relevantes para la construcción de los modelos de
regresión.
datos_modelo <- housing_limpio[,c(
"median_house_value",
"median_income",
"housing_median_age",
"total_rooms",
"population"
)]
A continuación, se presentan las medidas descriptivas y la distribución de las variables seleccionadas, con el fin de identificar patrones generales, niveles de dispersión y posibles asimetrías en los datos.
summary(datos_modelo)
## median_house_value median_income housing_median_age total_rooms
## Min. : 14999 Min. : 0.4999 Min. : 1.00 Min. : 2
## 1st Qu.:119600 1st Qu.: 2.5634 1st Qu.:18.00 1st Qu.: 1448
## Median :179700 Median : 3.5348 Median :29.00 Median : 2127
## Mean :206856 Mean : 3.8707 Mean :28.64 Mean : 2636
## 3rd Qu.:264725 3rd Qu.: 4.7432 3rd Qu.:37.00 3rd Qu.: 3148
## Max. :500001 Max. :15.0001 Max. :52.00 Max. :39320
## population
## Min. : 3
## 1st Qu.: 787
## Median : 1166
## Mean : 1425
## 3rd Qu.: 1725
## Max. :35682
hist(datos_modelo$median_house_value, col = "blue")
boxplot(datos_modelo$median_house_value, col = "blue", horizontal = T)
Las variables seleccionadas presentan una variabilidad considerable,
especialmente en el valor medio de las viviendas, cuyos valores oscilan
entre 14.999 y 500.001. La media (206.856) es superior a la mediana
(179.700), lo que sugiere una distribución asimétrica positiva. Esta
característica se confirma en el diagrama de caja, donde se observan
valores atípicos en el extremo superior de la distribución. En general,
los resultados evidencian una importante heterogeneidad entre los
distritos analizados, particularmente en los precios de las
viviendas.
Una vez descrito el comportamiento general de las variables seleccionadas, se procede a analizar las relaciones existentes entre ellas mediante las matrices de covarianza y correlación, con el fin de identificar posibles asociaciones relevantes para la construcción de modelos de regresión.
library(PerformanceAnalytics)
chart.Correlation(datos_modelo)
La matriz de correlación evidencia relaciones de diferente intensidad
entre las variables seleccionadas. Se destaca una correlación positiva
moderadamente fuerte entre el ingreso medio (median_income) y el valor
medio de las viviendas (median_house_value) (r = 0.69), lo que sugiere
que los distritos con mayores ingresos tienden a presentar viviendas de
mayor valor. Por otra parte, la antigüedad de las viviendas
(housing_median_age) muestra una relación positiva débil con el valor de
las viviendas (r = 0.11), mientras que las variables total_rooms y
population presentan asociaciones positivas muy bajas (r = 0.13 y r =
-0.03, respectivamente). Asimismo, se observa una correlación alta entre
total_rooms y population (r = 0.86), indicando una fuerte relación entre
el tamaño de las viviendas y la cantidad de habitantes de los
distritos.
#Análisis preliminar para la construcción del modelo de regresión lineal simple
Con el propósito de analizar la relación entre el valor medio de las viviendas (median_house_value) y el ingreso medio de los hogares (median_income), se realizó una exploración inicial de las variables seleccionadas. En primer lugar, se verificó el tamaño del conjunto de datos y posteriormente se evaluó el supuesto de normalidad mediante pruebas estadísticas, con el fin de conocer el comportamiento de las variables y seleccionar las técnicas de análisis más adecuadas para la construcción del modelo de regresión.
dim(datos_modelo)
## [1] 20640 5
Dado que el tamaño de la muestra es superior a 50 observaciones, se empleó la prueba de Kolmogorov-Smirnov para evaluar el supuesto de normalidad.
#Hipótesis nula (H0):
# Los datos de la variable median_house_value se ajustan a una distribución normal.
# Hipótesis alternativa (H1):
# Los datos de la variable median_house_value no se ajustan a una distribución normal.
ks.test(
datos_modelo$median_house_value,
"pnorm",
mean(datos_modelo$median_house_value),
sd(datos_modelo$median_house_value)
)
## Warning in ks.test.default(datos_modelo$median_house_value, "pnorm",
## mean(datos_modelo$median_house_value), : ties should not be present for the
## one-sample Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: datos_modelo$median_house_value
## D = 0.10299, p-value < 2.2e-16
## alternative hypothesis: two-sided
# Hipótesis nula (H0):
# Los datos de la variable median_income se ajustan a una distribución normal.
# Hipótesis alternativa (H1):
# Los datos de la variable median_income no se ajustan a una distribución normal.
ks.test(
datos_modelo$median_income,
"pnorm",
mean(datos_modelo$median_income),
sd(datos_modelo$median_income)
)
## Warning in ks.test.default(datos_modelo$median_income, "pnorm",
## mean(datos_modelo$median_income), : ties should not be present for the
## one-sample Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: datos_modelo$median_income
## D = 0.089427, p-value < 2.2e-16
## alternative hypothesis: two-sided
En ambos casos se obtuvo un valor p inferior al nivel de significancia de 0.05, por lo que se rechazó la hipótesis nula de normalidad. En consecuencia, se concluye que ninguna de las dos variables presenta una distribución normal, resultado que coincide con la asimetría observada previamente en los análisis gráficos y descriptivos.