# Instalar y cargar las librerías necesarias
if (!requireNamespace("readxl", quietly = TRUE)) install.packages("readxl")
if (!requireNamespace("dplyr", quietly = TRUE)) install.packages("dplyr")
if (!requireNamespace("ggplot2", quietly = TRUE)) install.packages("ggplot2")
library(readxl)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
# Leer los datos del archivo Excel
datos_vivienda <- read_excel("Copia de Datos_Vivienda(1).xlsx")
# Eliminar filas con valores faltantes
datos_sin_na <- na.omit(datos_vivienda)
# Convertir columnas categóricas a factores
datos_sin_na <- datos_sin_na %>%
mutate(
Zona = as.factor(Zona),
Tipo = as.factor(Tipo),
Barrio = as.factor(Barrio)
)
y <- datos_sin_na$precio_millon
x1 <- datos_sin_na$Area_contruida
plot(x1, y, main = "Relación entre Área Construida y Precio", xlab = "Área Construida", ylab = "Precio (millones)")
Interpretación: Se observa una relación positiva entre el área construida y el precio de la vivienda, lo que sugiere que, en general, un aumento en el área construida está asociado con un aumento en el precio de la vivienda. Esta relación indica que el área construida es un factor importante que influye en el valor de las propiedades. Sin embargo, es importante tener en cuenta que esta observación no considera otros factores que podrían influir en el precio, como la ubicación o el estado de la vivienda. Esto implica que el área construida es una buena variable para comenzar, pero no es suficiente por sí sola para explicar la variabilidad en los precios de manera exhaustiva.
mod_simple <- lm(y ~ x1)
summary(mod_simple)
##
## Call:
## lm(formula = y ~ x1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2659.88 -120.78 -47.55 67.27 1330.10
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 157.47636 4.13640 38.07 <2e-16 ***
## x1 1.58018 0.01831 86.30 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 238.7 on 8317 degrees of freedom
## Multiple R-squared: 0.4725, Adjusted R-squared: 0.4724
## F-statistic: 7448 on 1 and 8317 DF, p-value: < 2.2e-16
Coeficiente de Área Construida (1.58): Por cada metro cuadrado adicional en área, el precio de la vivienda aumenta en 1.58 millones de pesos.
R-cuadrado (47.25%): El modelo explica el 47.25% de la variabilidad en el precio de la vivienda, lo que indica una relación moderada.
Error Estándar Residual (238.7): Los precios reales tienden a desviarse, en promedio, unos 238.7 millones de pesos de los valores predichos.
Significancia: El modelo es estadísticamente significativo (p < 2.2e-16), lo que confirma que el área construida es un buen predictor del precio de la vivienda, aunque otros factores también podrían influir.
x2 <- datos_sin_na$Habitaciones
x3 <- datos_sin_na$Estrato
datos_modelo <- datos_sin_na[, c("precio_millon", "Area_contruida", "Habitaciones", "Estrato")]
plot(datos_modelo)
# Calcular la correlación entre las variables
correlacion <- cor(datos_modelo, use = "complete.obs")
correlacion
## precio_millon Area_contruida Habitaciones Estrato
## precio_millon 1.0000000 0.6873520 0.26409121 0.60980664
## Area_contruida 0.6873520 1.0000000 0.51691292 0.27432332
## Habitaciones 0.2640912 0.5169129 1.00000000 -0.07137615
## Estrato 0.6098066 0.2743233 -0.07137615 1.00000000
Principales predictores de precio_millon: Area_contruida y Estrato tienen correlaciones moderadas con el precio, lo que sugiere que son factores importantes para explicar el precio de la vivienda. Habitaciones: Tiene una correlación baja con el precio, lo que indica que podría no ser un predictor clave en comparación con Area_contruida y Estrato.
mod_multiple <- lm(y ~ x1 + x2 + x3)
summary(mod_multiple)
##
## Call:
## lm(formula = y ~ x1 + x2 + x3)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1948.98 -102.11 -23.74 64.44 1171.90
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -474.23594 11.94401 -39.705 <2e-16 ***
## x1 1.28139 0.01832 69.938 <2e-16 ***
## x2 1.94297 1.73022 1.123 0.261
## x3 146.10115 2.18418 66.891 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 190.4 on 8315 degrees of freedom
## Multiple R-squared: 0.6644, Adjusted R-squared: 0.6643
## F-statistic: 5487 on 3 and 8315 DF, p-value: < 2.2e-16
Intercepto (-474.24): Este valor representa el precio estimado cuando todas las variables predictoras son cero, lo cual no tiene un sentido práctico directo en este contexto, pero ajusta el modelo dentro del rango de los datos observados.
Coeficiente de Area_contruida (1.28): Por cada metro cuadrado adicional en el área construida, el precio de la vivienda aumenta en aproximadamente 1.28 millones de pesos, manteniendo constantes Habitaciones y Estrato. Este coeficiente es altamente significativo (p < 2e-16).
Coeficiente de Habitaciones (1.94): Este coeficiente sugiere que cada habitación adicional está asociada con un aumento de 1.94 millones de pesos en el precio, manteniendo constantes Area_contruida y Estrato. Sin embargo, este predictor no es estadísticamente significativo (p = 0.261), lo que indica que Habitaciones podría no aportar mucho al modelo en presencia de las otras variables.
Coeficiente de Estrato (146.10): El precio de la vivienda aumenta en promedio 146.1 millones de pesos por cada nivel adicional de Estrato, manteniendo constantes las demás variables. Este efecto es altamente significativo (p < 2e-16), lo que subraya la importancia del estrato socioeconómico en el precio.
Bondad de ajuste (R-cuadrado: 0.6644): El modelo explica aproximadamente el 66.44% de la variabilidad en el precio de la vivienda, lo que representa una mejora considerable sobre el modelo simple.
Error Estándar Residual (190.4): Los precios de las viviendas tienden a desviarse en promedio unos 190.4 millones de pesos de los valores predichos.
Conclusión: Area_contruida y Estrato son predictores significativos del precio de la vivienda, mientras que Habitaciones no aporta significativamente al modelo. La inclusión de Estrato mejora sustancialmente el ajuste del modelo.
x4 <- datos_sin_na$Zona # Variable categórica
# Ajustar el modelo de regresión múltiple, incluyendo Zona como variable categórica
mod_multiple <- lm(y ~ x1 + x2 + x3 + x4, data = datos_sin_na)
summary(mod_multiple)
##
## Call:
## lm(formula = y ~ x1 + x2 + x3 + x4, data = datos_sin_na)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1944.30 -93.87 -19.34 63.11 1100.09
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -379.69407 19.71832 -19.256 < 2e-16 ***
## x1 1.27962 0.01793 71.371 < 2e-16 ***
## x2 3.55538 1.71287 2.076 0.037954 *
## x3 132.54911 2.44721 54.163 < 2e-16 ***
## x4Zona Norte -60.86349 17.50533 -3.477 0.000510 ***
## x4Zona Oeste 67.55629 18.44689 3.662 0.000252 ***
## x4Zona Oriente -58.70153 19.43429 -3.021 0.002531 **
## x4Zona Sur -53.61031 17.36516 -3.087 0.002027 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 186 on 8311 degrees of freedom
## Multiple R-squared: 0.6801, Adjusted R-squared: 0.6798
## F-statistic: 2524 on 7 and 8311 DF, p-value: < 2.2e-16
Área Construida (1.28): Por cada metro cuadrado adicional, el precio de la vivienda aumenta en 1.28 millones de pesos.
Habitaciones (3.56): Cada habitación extra incrementa el precio en 3.56 millones de pesos.
Estrato (132.55): Cada nivel adicional en el estrato aumenta el precio en 132.55 millones.
Efecto de Zona:
Zona Norte: Precio 60.86 millones menor que la referencia. Zona Oeste: Precio 67.56 millones mayor. Zona Oriente: Precio 58.70 millones menor. Zona Sur: Precio 53.61 millones menor. R-cuadrado (68.01%): El modelo explica el 68% de la variabilidad en el precio.
Conclusión: Area_contruida, Estrato y Zona tienen el mayor impacto en el precio de la vivienda.
par(mfrow=c(2,2))
plot(mod_multiple)
Interpretación: Los gráficos de diagnóstico ayudan a evaluar si el modelo cumple con los supuestos de la regresión lineal, tales como la homocedasticidad (igual varianza de los residuos) y la normalidad de los residuos. Si se observan patrones claros en los gráficos de residuos (por ejemplo, una forma en abanico), esto sugiere que los supuestos del modelo podrían no cumplirse y que una transformación de las variables podría ser necesaria para mejorar el ajuste del modelo. Por ejemplo, residuos no aleatorios o una distribución no normal de los residuos pueden indicar problemas en el modelo que, de no corregirse, podrían resultar en estimaciones sesgadas e inferencias incorrectas.
mod_trans <- lm(log(y) ~ x1 + x2 + x3 + x4, data = datos_sin_na)
summary(mod_trans)
##
## Call:
## lm(formula = log(y) ~ x1 + x2 + x3 + x4, data = datos_sin_na)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.78243 -0.21068 -0.00426 0.19491 1.77534
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.753357 0.034096 110.081 < 2e-16 ***
## x1 0.002070 0.000031 66.763 < 2e-16 ***
## x2 0.064399 0.002962 21.743 < 2e-16 ***
## x3 0.363377 0.004232 85.871 < 2e-16 ***
## x4Zona Norte -0.228031 0.030270 -7.533 5.47e-14 ***
## x4Zona Oeste -0.017042 0.031898 -0.534 0.593
## x4Zona Oriente -0.260474 0.033605 -7.751 1.02e-14 ***
## x4Zona Sur -0.219800 0.030027 -7.320 2.71e-13 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3216 on 8311 degrees of freedom
## Multiple R-squared: 0.7698, Adjusted R-squared: 0.7696
## F-statistic: 3971 on 7 and 8311 DF, p-value: < 2.2e-16
par(mfrow=c(2,2))
plot(mod_trans)
Vemos una tendencia bajista en el “fitted values” y las colas del Q-Q residuals no se ajustan adecuadamente por ende vamos a utilizar Log para transformar.
datos_sin_na <- datos_sin_na[datos_sin_na$Area_contruida > 0 &
datos_sin_na$Habitaciones > 0 &
datos_sin_na$Estrato > 0, ]
# Convertimos a logaritmo y verificamos antes de ajustar el modelo
datos_sin_na <- datos_sin_na %>%
mutate(
log_y = log(precio_millon),
log_x1 = log(Area_contruida),
log_x2 = log(Habitaciones),
log_x3 = log(Estrato)
)
# Filtrar nuevamente para eliminar cualquier fila con valores NA, NaN o Inf en las columnas logarítmicas
datos_sin_na <- datos_sin_na[complete.cases(datos_sin_na[, c("log_y", "log_x1", "log_x2", "log_x3")]), ]
# Ajustar el modelo de regresión múltiple con las variables transformadas
mod_trans <- lm(log_y ~ log_x1 + log_x2 + log_x3 + Zona, data = datos_sin_na)
summary(mod_trans)
##
## Call:
## lm(formula = log_y ~ log_x1 + log_x2 + log_x3 + Zona, data = datos_sin_na)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.75331 -0.16789 -0.00556 0.16659 1.31087
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.911906 0.034589 26.364 < 2e-16 ***
## log_x1 0.639984 0.006666 96.008 < 2e-16 ***
## log_x2 0.014250 0.011945 1.193 0.232916
## log_x3 1.217504 0.016516 73.717 < 2e-16 ***
## ZonaZona Norte -0.114490 0.025608 -4.471 7.89e-06 ***
## ZonaZona Oeste 0.087776 0.026935 3.259 0.001123 **
## ZonaZona Oriente -0.206986 0.028303 -7.313 2.85e-13 ***
## ZonaZona Sur -0.091421 0.025483 -3.587 0.000336 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2677 on 8245 degrees of freedom
## Multiple R-squared: 0.8408, Adjusted R-squared: 0.8406
## F-statistic: 6220 on 7 and 8245 DF, p-value: < 2.2e-16
Coeficientes:
Intercepto (0.912): Representa el valor esperado de log(y) cuando todas las variables predictoras son cero. Esto no tiene un significado práctico directo debido a la transformación logarítmica, pero ayuda en el ajuste del modelo. log_x1 (Área Construida, 0.640): Una elasticidad de 0.640 indica que un aumento del 1% en el área construida se asocia con un incremento aproximado del 0.64% en el precio de la vivienda, manteniendo constantes las otras variables. log_x2 (Habitaciones, 0.014): Este coeficiente es pequeño y no es estadísticamente significativo (p = 0.233), lo que sugiere que, al controlar por las demás variables, el número de habitaciones no tiene un efecto fuerte en el precio. log_x3 (Estrato, 1.218): Con una elasticidad de 1.218, esto sugiere que un aumento del 1% en el estrato se asocia con un aumento de aproximadamente 1.22% en el precio de la vivienda, manteniendo constantes las demás variables. Este efecto es estadísticamente significativo. Zona: Zona Norte (-0.114): Las viviendas en la Zona Norte tienden a tener un precio aproximadamente 11.4% menor en comparación con la zona de referencia. Zona Oeste (0.088): Las viviendas en la Zona Oeste tienen un precio 8.8% mayor en promedio en comparación con la zona de referencia. Zona Oriente (-0.207): Las viviendas en la Zona Oriente tienden a tener un precio 20.7% menor que la referencia. Zona Sur (-0.091): Las viviendas en la Zona Sur tienen un precio 9.1% menor en promedio en comparación con la zona de referencia. Bondad de ajuste (R-cuadrado: 0.8408): El modelo explica aproximadamente el 84.08% de la variabilidad en el logaritmo del precio de la vivienda, lo cual es un ajuste fuerte, indicando que las variables explicativas capturan bien las variaciones en el precio.
Error Estándar Residual (0.2677): En promedio, los residuos (errores) en el logaritmo del precio de la vivienda se desvían en 0.2677 unidades logarítmicas de los valores predichos por el modelo.
ggplot(datos_sin_na, aes(x = precio_millon)) +
geom_histogram(bins = 30, fill = "skyblue", color = "black") +
labs(title = "Distribución del Precio de Viviendas (Millones)", x = "Precio (Millones)", y = "Frecuencia")
El histograma muestra la distribución del precio de las viviendas. Si la distribución es asimétrica o tiene una cola larga, podría ser útil aplicar una transformación (como el logaritmo) para normalizar los datos, lo cual puede mejorar el ajuste y la interpretación del modelo de regresión. Esto es particularmente importante para reducir la influencia de valores extremos y obtener estimaciones más precisas. Una distribución simétrica después de la transformación indicaría que los datos están mejor preparados para cumplir con los supuestos de la regresión lineal, mejorando así la validez de los resultados del modelo.