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.
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
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.
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.
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:
median_income (equivalente a 10.000 dólares) aumenta el
valor medio de la vivienda en aproximadamente 41.837 dólares.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:
El criterio de mínimos cuadrados busca encontrar los valores de los parámetros que hagan mínima esta cantidad.
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.
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.
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.
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}) \]
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.
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.
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.
A continuación se presenta una comparación de ambos modelos:
| Modelo | Variables explicativas | R² | 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.
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.
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)
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:
median_incomehousing_median_agetotal_roomspopulationmodelo_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
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).
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.
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.
La variable con mayor efecto sobre el valor de las viviendas será aquella que presente:
Generalmente, en este conjunto de datos, median_income
suele ser la variable con mayor capacidad explicativa.
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.
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.
Supóngase un distrito con:
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.
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.
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.