(echo = TRUE)
## [1] TRUE
library(readxl)
datos_vivienda <- read_excel("Copia de Datos_Vivienda(1).xlsx")
colSums(is.na(datos_vivienda))
## Zona piso Estrato precio_millon
## 3 3 3 2
## Area_contruida parqueaderos Banos Habitaciones
## 3 3 3 3
## Tipo Barrio cordenada_longitud Cordenada_latitud
## 3 3 3 3
datos_sin_na <- datos_vivienda[!is.na(datos_vivienda$precio_millon) & !is.na(datos_vivienda$Area_contruida), ]
datos_sin_na <- na.omit(datos_vivienda)
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)")
Clara relacion positiva
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.
#MODELO MULTIPLE (Cuanti)
y <- datos_sin_na$precio_millon
x1 <- datos_sin_na$Area_contruida
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)
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.
##Modelo Multiple Cuanti y Cuali
# Cargar los datos desde el 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 la variable Zona en un factor para que el modelo la trate como categórica
datos_sin_na$Zona <- as.factor(datos_sin_na$Zona)
# Definir la variable dependiente (y) y las independientes (x1, x2, x3, y Zona) en el conjunto de datos sin NA
y <- datos_sin_na$precio_millon
x1 <- datos_sin_na$Area_contruida
x2 <- datos_sin_na$Habitaciones
x3 <- datos_sin_na$Estrato
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)
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.
# Paso 1: Filtrar valores cero o negativos en las variables que se transformarán
datos_sin_na <- datos_sin_na[datos_sin_na$Area_contruida > 0 &
datos_sin_na$Habitaciones > 0 &
datos_sin_na$Estrato > 0, ]
# Paso 2: Verificar si aún existen valores NA, NaN o Inf en las variables transformadas
# Convertimos a logaritmo y verificamos antes de ajustar el modelo
datos_sin_na$log_y <- log(datos_sin_na$precio_millon)
datos_sin_na$log_x1 <- log(datos_sin_na$Area_contruida)
datos_sin_na$log_x2 <- log(datos_sin_na$Habitaciones)
datos_sin_na$log_x3 <- log(datos_sin_na$Estrato)
# Identificar si aún existen valores NA, NaN o Inf
sum(is.na(datos_sin_na$log_y))
## [1] 0
sum(is.na(datos_sin_na$log_x1))
## [1] 0
sum(is.na(datos_sin_na$log_x2))
## [1] 0
sum(is.na(datos_sin_na$log_x3))
## [1] 0
# Paso 3: 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")]), ]
# Paso 4: 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.
par(mfrow=c(2,2))
plot(mod_trans)
Vemos que este modelo es mucho mas preciso.