Análisis de California Housing

Los datos provienen del censo de California de 1990, por lo que no reflejan el mercado inmobiliario actual. Sin embargo, constituyen una fuente adecuada para introducir conceptos fundamentales de análisis de datos, inferencia estadística y modelamiento mediante regresión lineal.

Contenido

El conjunto de datos contiene información geográfica, demográfica y económica de distintos distritos censales de California. Debido a que los datos no se encuentran completamente depurados, es necesario realizar una etapa inicial de exploración y limpieza antes de construir modelos estadísticos.

library(readr)

housing <- read_csv("C:/Users/Luis Cruz/Downloads/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

colnames(datos)
##  [1] "longitude"          "latitude"           "housing_median_age"
##  [4] "total_rooms"        "total_bedrooms"     "population"        
##  [7] "households"         "median_income"      "median_house_value"
## [10] "ocean_proximity"

Este conjunto de datos cuenta con 10 variables:

Variable Descripción Naturaleza Nivel de medición
longitude Longitud geográfica del distrito Cuantitativa continua Razón
latitude Latitud geográfica del distrito Cuantitativa continua Razón
housing_median_age Edad mediana de las viviendas (años) Cuantitativa discreta Razón
total_rooms Número total de habitaciones Cuantitativa discreta Razón
total_bedrooms Número total de dormitorios Cuantitativa discreta Razón
population Población total del distrito Cuantitativa discreta Razón
households Número total de hogares Cuantitativa discreta Razón
median_income Ingreso mediano de los hogares (expresado en decenas de miles de dólares) Cuantitativa continua Razón
median_house_value Valor mediano de las viviendas (USD) Cuantitativa continua Razón
ocean_proximity Cercanía del distrito al océano Cualitativa Nominal
dim(datos)
## [1] 20640    10

El conjunto de datos contiene 20.640 observaciones y 10 variables.

Característica Valor
Número de observaciones 20.640
Número de variables 10
Variables cuantitativas 9
Variables cualitativas 1
Valores faltantes 207 en total_bedrooms
Variable objetivo median_house_value

Las variables pueden agruparse en características geográficas, de vivienda, demográficas y económicas. La variable categórica ocean_proximity describe la ubicación relativa de cada distrito respecto al océano.

unique(datos$ocean_proximity)
## [1] "NEAR BAY"   "<1H OCEAN"  "INLAND"     "NEAR OCEAN" "ISLAND"
str(datos)
## spc_tbl_ [20,640 × 10] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ longitude         : num [1:20640] -122 -122 -122 -122 -122 ...
##  $ latitude          : num [1:20640] 37.9 37.9 37.9 37.9 37.9 ...
##  $ housing_median_age: num [1:20640] 41 21 52 52 52 52 52 52 42 52 ...
##  $ total_rooms       : num [1:20640] 880 7099 1467 1274 1627 ...
##  $ total_bedrooms    : num [1:20640] 129 1106 190 235 280 ...
##  $ population        : num [1:20640] 322 2401 496 558 565 ...
##  $ households        : num [1:20640] 126 1138 177 219 259 ...
##  $ median_income     : num [1:20640] 8.33 8.3 7.26 5.64 3.85 ...
##  $ median_house_value: num [1:20640] 452600 358500 352100 341300 342200 ...
##  $ ocean_proximity   : chr [1:20640] "NEAR BAY" "NEAR BAY" "NEAR BAY" "NEAR BAY" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   longitude = col_double(),
##   ..   latitude = col_double(),
##   ..   housing_median_age = col_double(),
##   ..   total_rooms = col_double(),
##   ..   total_bedrooms = col_double(),
##   ..   population = col_double(),
##   ..   households = col_double(),
##   ..   median_income = col_double(),
##   ..   median_house_value = col_double(),
##   ..   ocean_proximity = col_character()
##   .. )
##  - attr(*, "problems")=<externalptr>
summary(datos)
##    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.: 296.0   1st Qu.:  787   1st Qu.: 280.0   1st Qu.: 2.5634  
##  Median : 435.0   Median : 1166   Median : 409.0   Median : 3.5348  
##  Mean   : 537.9   Mean   : 1425   Mean   : 499.5   Mean   : 3.8707  
##  3rd Qu.: 647.0   3rd Qu.: 1725   3rd Qu.: 605.0   3rd Qu.: 4.7432  
##  Max.   :6445.0   Max.   :35682   Max.   :6082.0   Max.   :15.0001  
##  NA's   :207                                                        
##  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                       
## 

Del análisis descriptivo se observa la presencia de 207 valores faltantes en la variable total_bedrooms, equivalentes aproximadamente al 1 % del total de observaciones.

paste(207/length(datos$total_bedrooms)*100, "%")
## [1] "1.00290697674419 %"

Debido a que la proporción de datos faltantes es baja, dichas observaciones se eliminan para continuar el análisis.

datos <- datos[!is.na(datos$total_bedrooms), ]

dim(datos)
## [1] 20433    10

Análisis exploratorio

A continuación se presentan diagramas de caja para las variables numéricas. La línea roja punteada representa la media, mientras que la línea central de la caja corresponde a la mediana.

datos_num <- datos[, sapply(datos, is.numeric)]

for(col in names(datos_num)){

  boxplot(
    datos_num[[col]],
    main = paste("Boxplot de", col),
    horizontal = TRUE,
    col = "lightblue"
  )

  abline(
    v = mean(datos_num[[col]], na.rm = TRUE),
    lty = 2,
    lwd = 2,
    col = "red"
  )

  legend(
    "topright",
    legend = c("Media"),
    col = "red",
    lty = 2,
    lwd = 2,
    bty = "n"
  )
}

Los diagramas de caja evidencian la presencia de valores atípicos en la mayoría de las variables. Además, en varias de ellas la media se encuentra por encima de la mediana, lo que sugiere distribuciones con asimetría positiva.

Correlación entre variables

Dado el objetivo de estudiar factores asociados al valor de las viviendas, se seleccionan las variables median_house_value, median_income, housing_median_age, total_rooms y population.

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
datos_corr <- housing[, c(
  "median_house_value",
  "median_income",
  "housing_median_age",
  "total_rooms",
  "population"
)]

chart.Correlation(datos_corr)

Se observa que median_income presenta la relación positiva más importante con median_house_value. Asimismo, existe una asociación positiva considerable entre total_rooms y population, lo que sugiere posible redundancia de información si ambas variables se incluyen simultáneamente en un modelo de regresión.

Modelo de regresión lineal simple

Con base en el análisis de correlación, se propone un modelo de regresión lineal simple utilizando median_income como variable explicativa y median_house_value como variable respuesta.

# Variable respuesta
y <- datos$median_house_value

# Prueba de normalidad para la variable respuesta
ks.test(y, "pnorm", mean(y), sd(y))
## Warning in ks.test.default(y, "pnorm", mean(y), sd(y)): ties should not be
## present for the one-sample Kolmogorov-Smirnov test
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  y
## D = 0.10298, p-value < 2.2e-16
## alternative hypothesis: two-sided
# Variable explicativa
median_income <- datos$median_income

# Prueba de normalidad para median_income
ks.test(median_income, "pnorm", mean(median_income), sd(median_income))
## Warning in ks.test.default(median_income, "pnorm", mean(median_income), : ties
## should not be present for the one-sample Kolmogorov-Smirnov test
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  median_income
## D = 0.089281, p-value < 2.2e-16
## alternative hypothesis: two-sided
# Correlación de Spearman
cor.test(median_income, y, method = "spearman")
## Warning in cor.test.default(median_income, y, method = "spearman"): Cannot
## compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  median_income and y
## S = 4.591e+11, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##       rho 
## 0.6771076
# Modelo lineal simple
ml_income <- lm(y ~ median_income)

summary(ml_income)
## 
## Call:
## lm(formula = y ~ median_income)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -541167  -55858  -16955   36895  434180 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    44906.4     1330.0   33.77   <2e-16 ***
## median_income  41837.1      308.4  135.64   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 83740 on 20431 degrees of freedom
## Multiple R-squared:  0.4738, Adjusted R-squared:  0.4738 
## F-statistic: 1.84e+04 on 1 and 20431 DF,  p-value: < 2.2e-16

Las pruebas de Kolmogorov-Smirnov indican que tanto median_house_value como median_income presentan valores p inferiores a 0.05. Por lo tanto, se rechaza la hipótesis nula de normalidad en ambos casos.

Debido a que las variables no siguen una distribución normal, se emplea el coeficiente de correlación de Spearman. El resultado obtenido (\(\rho = 0.677\), p < 0.001) evidencia una asociación positiva moderadamente fuerte entre el ingreso medio y el valor medio de las viviendas.

La ecuación estimada del modelo es:

\[ \hat{y}=44906.4+41837.1 \times median\_income \]

La interpretación de los coeficientes es la siguiente:

  • El intercepto (\(\beta_0 = 44906.4\)) representa el valor esperado de una vivienda cuando el ingreso medio es igual a cero.
  • El coeficiente de pendiente (\(\beta_1 = 41837.1\)) indica que, en promedio, un incremento de una unidad en median_income (equivalente a 10.000 dólares) aumenta el valor medio de la vivienda en aproximadamente 41.837 dólares.

Estimación mediante mínimos cuadrados ordinarios

Los parámetros del modelo fueron estimados mediante el método de mínimos cuadrados ordinarios (MCO).

Este método selecciona los coeficientes del modelo de manera que se minimice la suma de los cuadrados de los residuos, es decir, las diferencias entre los valores observados y los valores estimados por el modelo.

La suma de cuadrados de los residuos se define como:

\[ SCR = \sum_{i=1}^{n}(Y_i - \hat{Y}_i)^2 \]

donde:

  • \(Y_i\) representa el valor observado.
  • \(\hat{Y}_i\) representa el valor predicho por el modelo.
  • \(n\) corresponde al número de observaciones.

El criterio de mínimos cuadrados busca encontrar los valores de los parámetros que hagan mínima esta cantidad.

Significancia del coeficiente de pendiente

Para evaluar si existe una relación lineal significativa entre el ingreso medio y el valor de las viviendas se plantean las siguientes hipótesis:

\[ H_0:\beta_1 = 0 \]

\[ H_1:\beta_1 \neq 0 \]

El valor p asociado al coeficiente de pendiente es inferior a \(2.2\times10^{-16}\), por lo que se rechaza la hipótesis nula.

Se concluye que existe evidencia estadísticamente significativa para afirmar que el ingreso medio está relacionado con el valor medio de las viviendas.

Coeficiente de determinación

El modelo presenta un coeficiente de determinación:

\[ R^2 = 0.4738 \]

Esto significa que aproximadamente el 47.38 % de la variabilidad observada en el valor de las viviendas es explicada por la variable median_income.

Aunque el ingreso medio constituye un predictor importante, aún existe una proporción considerable de variabilidad que no es explicada por el modelo y que probablemente depende de otras variables no incluidas en el análisis.

Análisis de residuos

La validación de los supuestos del modelo es un paso fundamental antes de utilizarlo para realizar inferencias o predicciones.

residuos <- ml_income$residuals

qqnorm(residuos)
qqline(residuos, col = "red")

ks.test(residuos, "pnorm", mean(residuos), sd(residuos))
## Warning in ks.test.default(residuos, "pnorm", mean(residuos), sd(residuos)):
## ties should not be present for the one-sample Kolmogorov-Smirnov test
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  residuos
## D = 0.099158, p-value < 2.2e-16
## alternative hypothesis: two-sided

El gráfico Q-Q permite comparar la distribución empírica de los residuos con una distribución normal teórica. Se observan desviaciones importantes respecto a la línea de referencia, especialmente en los extremos, lo que sugiere incumplimiento del supuesto de normalidad.

Adicionalmente, la prueba de Kolmogorov-Smirnov produce un valor p inferior a 0.05, reforzando la evidencia de que los residuos no siguen una distribución normal.

library(lmtest)
## Warning: package 'lmtest' was built under R version 4.5.3
bptest(ml_income)
## 
##  studentized Breusch-Pagan test
## 
## data:  ml_income
## BP = 135.83, df = 1, p-value < 2.2e-16
plot(ml_income)

dwtest(ml_income)
## 
##  Durbin-Watson test
## 
## data:  ml_income
## DW = 0.65614, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0

La prueba de Breusch-Pagan se utiliza para evaluar la homocedasticidad de los residuos.

Las hipótesis evaluadas son:

\[ H_0:\text{Var}(\varepsilon_i)=\sigma^2 \]

\[ H_1:\text{Var}(\varepsilon_i)\neq \sigma^2 \]

Dado que el valor p es inferior a 0.05, se rechaza la hipótesis nula y se concluye que existe evidencia de heterocedasticidad.

Por otra parte, la prueba de Durbin-Watson detecta autocorrelación positiva en los residuos.

En conjunto, los resultados sugieren que algunos de los supuestos clásicos del modelo lineal no se cumplen completamente, por lo que las inferencias deben interpretarse con precaución.

Modelo de regresión lineal múltiple

Con el fin de evaluar si la incorporación de variables adicionales mejora la capacidad explicativa del modelo, se ajustó un modelo de regresión lineal múltiple utilizando como variable respuesta median_house_value y como variables explicativas median_income y total_rooms.

modelo_multiple <- lm(y ~ datos$median_income + datos$total_rooms)

summary(modelo_multiple)
## 
## Call:
## lm(formula = y ~ datos$median_income + datos$total_rooms)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -541961  -55860  -16972   36927  433963 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         45188.0004  1413.9539  31.959   <2e-16 ***
## datos$median_income 41873.5994   314.6633 133.074   <2e-16 ***
## datos$total_rooms      -0.1605     0.2735  -0.587    0.557    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 83740 on 20430 degrees of freedom
## Multiple R-squared:  0.4738, Adjusted R-squared:  0.4738 
## F-statistic:  9199 on 2 and 20430 DF,  p-value: < 2.2e-16

Los resultados obtenidos muestran la siguiente ecuación estimada:

\[ \hat{y}=45188.00+41873.60(\text{median\_income})-0.1605(\text{total\_rooms}) \]

Interpretación de los coeficientes

Intercepto (\(\beta_0\))

El intercepto estimado es 45.188. Esto representa el valor medio esperado de la vivienda cuando tanto el ingreso medio como el número total de habitaciones son iguales a cero. Aunque esta situación carece de interpretación práctica, el intercepto permite ajustar adecuadamente la recta de regresión.

Ingreso medio (\(\beta_1\))

El coeficiente asociado a median_income es 41.873,60 y presenta un valor p inferior a 0.001.

Manteniendo constante el número total de habitaciones, un incremento de una unidad en median_income se asocia con un aumento promedio de aproximadamente 41.874 dólares en el valor medio de la vivienda.

Este resultado confirma que el ingreso medio continúa siendo la variable con mayor capacidad explicativa dentro del modelo.

Número total de habitaciones (\(\beta_2\))

El coeficiente estimado para total_rooms es -0.1605.

Sin embargo, el valor p asociado es 0.557, superior al nivel de significancia del 5 %, por lo que no existe evidencia estadística suficiente para afirmar que esta variable tiene un efecto significativo sobre el valor medio de las viviendas una vez controlado el ingreso medio.

Significancia global del modelo

La prueba F presenta un valor p inferior a \(2.2\times10^{-16}\), por lo que se rechaza la hipótesis nula de que todos los coeficientes de pendiente sean simultáneamente iguales a cero.

En consecuencia, se concluye que el modelo es globalmente significativo.

Coeficiente de determinación

El modelo múltiple presenta:

\[ R^2 = 0.4738 \]

y

\[ R^2_{ajustado}=0.4738 \]

Esto significa que aproximadamente el 47.38 % de la variabilidad observada en el valor de las viviendas es explicada por las variables incluidas en el modelo.

La igualdad práctica entre \(R^2\) y \(R^2\) ajustado indica que la incorporación de total_rooms no aporta capacidad explicativa adicional relevante.

Comparación entre el modelo simple y el modelo múltiple

A continuación se presenta una comparación de ambos modelos:

Modelo Variables explicativas R² ajustado
Regresión lineal simple median_income 0.4738 0.4738
Regresión lineal múltiple median_income + total_rooms 0.4738 0.4738

Los resultados muestran que la inclusión de total_rooms no mejora el ajuste del modelo.

Además, dicha variable no resulta estadísticamente significativa y su incorporación incrementa innecesariamente la complejidad del modelo.

Desde el principio de parsimonia, resulta más conveniente utilizar el modelo simple basado únicamente en median_income.

Capacidad explicativa de los modelos

Aunque el modelo explica cerca de la mitad de la variabilidad observada en el valor de las viviendas, aún existe un porcentaje importante que permanece sin explicar.

Esto sugiere que otros factores relacionados con la ubicación geográfica, características de la vivienda o condiciones socioeconómicas podrían contribuir significativamente a explicar el comportamiento de la variable respuesta.

Por esta razón, el modelo posee una capacidad explicativa moderada, pero no puede considerarse un modelo altamente predictivo.

Predicción e interpretación

Utilizando el modelo lineal simple:

\[ \hat{y}=44906.4+41837.1 \times median\_income \]

pueden obtenerse estimaciones del valor medio de las viviendas para distintos niveles de ingreso.

Por ejemplo, si el ingreso medio es igual a 5 (equivalente aproximadamente a 50.000 dólares), el valor estimado de la vivienda sería:

\[ \hat{y}=44906.4+41837.1(5) \]

\[ \hat{y}=254091.9 \]

Por lo tanto, el modelo estima que una vivienda ubicada en un distrito con un ingreso medio de aproximadamente 50.000 dólares tendría un valor medio cercano a 254.092 dólares.

plot(x = datos$median_income, y = y, xlab = "Ingreso medio en el hogar", ylab = "Precio medio de la vivienda")
abline(a = 44906.4, b = 41837.1,
       col = "red",
       lwd = 2)

Modelo múltiple propuesto según las variables del taller

Con base en el análisis de correlación y siguiendo las variables sugeridas en el taller, se ajustó un modelo de regresión lineal múltiple utilizando como variable respuesta el valor mediano de la vivienda (median_house_value) y como variables explicativas:

modelo_taller <- lm(
  median_house_value ~ median_income +
    housing_median_age +
    total_rooms +
    population,
  data = datos
)

summary(modelo_taller)
## 
## Call:
## lm(formula = median_house_value ~ median_income + housing_median_age + 
##     total_rooms + population, data = datos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -575297  -53503  -14476   37019  466255 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)        -1.748e+04  2.242e+03  -7.797 6.65e-15 ***
## median_income       4.131e+04  3.192e+02 129.438  < 2e-16 ***
## housing_median_age  1.980e+03  4.785e+01  41.391  < 2e-16 ***
## total_rooms         9.280e+00  5.479e-01  16.938  < 2e-16 ***
## population         -1.176e+01  1.018e+00 -11.560  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 80210 on 20428 degrees of freedom
## Multiple R-squared:  0.5172, Adjusted R-squared:  0.5171 
## F-statistic:  5471 on 4 and 20428 DF,  p-value: < 2.2e-16

Ecuación estimada

La ecuación estimada tiene la forma:

\[ \widehat{MedHouseVal} = \beta_0 + \beta_1(MedInc)+ \beta_2(HouseAge)+ \beta_3(TotalRooms)+ \beta_4(Population) \]

Los coeficientes exactos serán los obtenidos en la salida de summary(modelo_taller).

Interpretación de los coeficientes

Cada coeficiente debe interpretarse manteniendo constantes las demás variables del modelo.

  • Intercepto (\(\beta_0\)): valor esperado de la vivienda cuando todas las variables explicativas son iguales a cero.

  • Ingreso medio (\(\beta_1\)): representa el cambio promedio esperado en el valor de la vivienda por cada unidad adicional de ingreso medio, manteniendo constantes la edad de las viviendas, el número de habitaciones y la población.

  • Edad media de las viviendas (\(\beta_2\)): representa la variación promedio en el valor de la vivienda asociada a un incremento de un año en la edad media de las viviendas, manteniendo constantes las demás variables.

  • Número total de habitaciones (\(\beta_3\)): mide el cambio promedio en el valor de la vivienda asociado a una habitación adicional, manteniendo constantes las demás variables.

  • Población (\(\beta_4\)): representa el cambio promedio en el valor de la vivienda asociado a una unidad adicional de población, manteniendo constantes las demás variables.

Significancia de los coeficientes

Para cada coeficiente se evalúan las hipótesis:

\[ H_0:\beta_i=0 \]

\[ H_1:\beta_i\neq0 \]

Se consideran significativos aquellos coeficientes con:

\[ p\text{-value}<0.05 \]

Las variables significativas serán aquellas que aporten evidencia estadística para explicar el valor de las viviendas.

Variable con mayor efecto

La variable con mayor efecto sobre el valor de las viviendas será aquella que presente:

  • un coeficiente de mayor magnitud,
  • significancia estadística,
  • y coherencia con la escala de medición.

Generalmente, en este conjunto de datos, median_income suele ser la variable con mayor capacidad explicativa.

Coeficiente de determinación

Reportar:

\[ R^2 \]

y

\[ R^2_{ajustado} \]

obtenidos en la salida del modelo.

El coeficiente \(R^2\) indica la proporción de variabilidad del valor de las viviendas explicada por las variables incluidas.

El coeficiente ajustado penaliza la incorporación de variables que no aportan información relevante.

Comparación con el modelo simple

Los coeficientes de determinación del modelo simple y del modelo múltiple deben compararse para determinar si la inclusión de nuevas variables mejora la capacidad explicativa.

Si el incremento de \(R^2\) es pequeño o si las nuevas variables no resultan significativas, el modelo simple podría ser preferible por parsimonia.

Predicción

Supóngase un distrito con:

  • MedInc = 5
  • HouseAge = 20
  • TotalRooms = 6
  • Population = 3

La predicción puede calcularse mediante:

nuevo_distrito <- data.frame(
  median_income = 5,
  housing_median_age = 20,
  total_rooms = 6,
  population = 3
)

predict(modelo_taller, nuevo_distrito)
##        1 
## 228715.5

El resultado corresponde al valor medio estimado de las viviendas para un distrito con dichas características.

Intervalo de confianza para la predicción

predict(
  modelo_taller,
  nuevo_distrito,
  interval = "confidence"
)
##        fit      lwr    upr
## 1 228715.5 226373.1 231058

Este intervalo proporciona un rango plausible para el valor medio esperado de las viviendas bajo las condiciones especificadas.

Conclusiones

El conjunto de datos California Housing permitió estudiar la relación entre variables demográficas, económicas y características de vivienda mediante herramientas de análisis exploratorio y modelos de regresión lineal.

Durante la etapa de depuración se identificaron 207 valores faltantes en la variable total_bedrooms, equivalentes aproximadamente al 1 % de las observaciones. Debido a su baja proporción, estos registros fueron eliminados sin afectar de manera importante el tamaño de la muestra.

El análisis exploratorio evidenció la presencia de valores atípicos en la mayoría de las variables numéricas y distribuciones con cierto grado de asimetría. Asimismo, el análisis de correlación mostró que median_income es la variable que presenta la relación positiva más importante con median_house_value.

El modelo de regresión lineal simple confirmó que el ingreso medio constituye un predictor estadísticamente significativo del valor medio de las viviendas. El coeficiente de determinación obtenido (\(R^2=47.38\%\)) indica que esta variable explica una proporción importante, aunque no mayoritaria, de la variabilidad observada en los precios.

La evaluación de los supuestos mostró evidencia de incumplimiento de normalidad y homocedasticidad en los residuos, además de indicios de autocorrelación. Estos resultados sugieren que el modelo no captura completamente la estructura presente en los datos y que podrían considerarse enfoques alternativos o transformaciones para mejorar el ajuste.

Finalmente, la incorporación de total_rooms en un modelo de regresión múltiple no produjo mejoras en el coeficiente de determinación y tampoco resultó estadísticamente significativa. Por esta razón, el modelo simple basado únicamente en median_income constituye la alternativa más adecuada entre los modelos evaluados en este trabajo, al ofrecer una interpretación sencilla y un desempeño equivalente al modelo más complejo.