Con base en los datos de ofertas de vivienda descargadas del portal Fincaraiz para apartamento de estrato 4 con área construida menor a 200 m2 (vivienda4.RDS) la inmobiliaria A&C requiere la construcción de un modelo que lo oriente sobre los precios de inmuebles. Con este propósito el equipo de asesores a diseñado los siguientes pasos para obtener un modelo y así poder a futuro determinar los precios de los inmuebles a negociar.
head(vivienda4) # Visualizacion inicial de datos
## # A tibble: 6 × 5
## zona estrato preciom areaconst tipo
## <fct> <fct> <dbl> <dbl> <fct>
## 1 Zona Norte 4 220 52 Apartamento
## 2 Zona Norte 4 600 160 Casa
## 3 Zona Norte 4 320 108 Apartamento
## 4 Zona Sur 4 290 96 Apartamento
## 5 Zona Norte 4 220 82 Apartamento
## 6 Zona Norte 4 305 117 Casa
na_por_columna <- colSums(is.na(vivienda4))# Revision de NA por columna
print(na_por_columna)
## zona estrato preciom areaconst tipo
## 0 0 0 0 0
summary(vivienda4) # Resumen estadístico de las variables numéricas
## zona estrato preciom areaconst
## Zona Centro : 8 3: 0 Min. : 78.0 Min. : 40.00
## Zona Norte : 288 4:1706 1st Qu.:160.0 1st Qu.: 60.00
## Zona Oeste : 60 5: 0 Median :210.0 Median : 75.00
## Zona Oriente: 6 6: 0 Mean :225.4 Mean : 87.63
## Zona Sur :1344 3rd Qu.:265.0 3rd Qu.: 98.00
## Max. :760.0 Max. :200.00
## tipo
## Apartamento:1363
## Casa : 343
##
##
##
##
viviendaA <- vivienda4[vivienda4$tipo == "Apartamento", ]# Filtro Apartamentos
summary(viviendaA) # Resumen estadístico de las variables numéricas
## zona estrato preciom areaconst
## Zona Centro : 7 3: 0 Min. : 78.0 Min. : 40.00
## Zona Norte : 237 4:1363 1st Qu.:153.5 1st Qu.: 60.00
## Zona Oeste : 52 5: 0 Median :185.0 Median : 70.00
## Zona Oriente: 2 6: 0 Mean :202.4 Mean : 75.48
## Zona Sur :1065 3rd Qu.:240.0 3rd Qu.: 84.00
## Max. :645.0 Max. :200.00
## tipo
## Apartamento:1363
## Casa : 0
##
##
##
##
summary(viviendaA$preciom)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 78.0 153.5 185.0 202.4 240.0 645.0
summary(viviendaA$areaconst)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 40.00 60.00 70.00 75.48 84.00 200.00
Enunciado: interpretar graficos e indicadores.
Comentarios:
El precio de las viviendas varía desde un mínimo de 78 hasta un máximo de 645.
El valor promedio (202.4) se encuentra entre la mediana (185) y el tercer cuartil (240), lo que sugiere una distribución sesgada hacia la derecha, ya que la media es ligeramente mayor que la mediana.
El área de construcción de las viviendas varía desde un mínimo de 40 hasta un máximo de 200.
El valor promedio (75.48) es mayor que la mediana, lo que sugiere
una distribución sesgada hacia la derecha en el tamaño de las áreas de
construcción.
# Coeficiente de correlación entre precio y área
correlation <- cor(viviendaA$areaconst, viviendaA$preciom)
## Coeficiente de correlación entre Área y Precio: 0.7481389
Enunciado: interpretar grafico e indicador.
Comentarios:
El coeficiente de correlación de 0.7481389 sugiere que hay una relación positiva entre el área y el precio de las viviendas en tu conjunto de datos, en general un aumento en el área se asocia con un aumento en el precio de las viviendas.
Del grafico se puede inferir que aunque hay una correlacion se presenta mucha variación de los datos.
modelo <- lm(preciom ~ areaconst, data = viviendaA)
summary(modelo)
##
## Call:
## lm(formula = preciom ~ areaconst, data = viviendaA)
##
## Residuals:
## Min 1Q Median 3Q Max
## -225.404 -23.902 -4.754 25.763 209.021
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 39.04679 4.09977 9.524 <2e-16 ***
## areaconst 2.16473 0.05204 41.595 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 43.34 on 1361 degrees of freedom
## Multiple R-squared: 0.5597, Adjusted R-squared: 0.5594
## F-statistic: 1730 on 1 and 1361 DF, p-value: < 2.2e-16
Enunciado: interprete los coeficientes del modelo β₀, β₁.
Comentarios:
Intercept (β₀): el coeficiente del intercepto (39.04679) representa el valor estimado de la variable dependiente (“preciom”) cuando el área de construcción (“areaconst”) es igual a cero. En este contexto, un valor de “0” para el área de construcción no tiene sentido práctico, por lo que el intercepto no tiene una interpretación directa.
areaconst (β₁):por cada unidad adicional de área de construcción, se espera un aumento de aproximadamente 2.16473 unidades en el precio de la vivienda.
## 2.5 % 97.5 %
## areaconst 2.06264 2.266826
## Valor t: 41.59515
## Valor p: 1.056327e-244
Enunciado: interpretar y concluir si el coeficiente β₁ es igual a cero o no. Comparar este resultado con una prueba de hipótesis t.
Comentarios:
Dado que el intervalo de confianza de β₁ (2.5%: 2.06264 - 97.5%: 2.266826 ) no incluye el valor cero (0), podemos concluir que el coeficiente β₁ no es igual a cero.
En la prueba de hipotesis se obtiene un valor t muy alto y valor p prácticamente cero, lo que corrobora que el coeficiente β₁ “areaconst” es diferente de cero.
Lo anterior significa que la variable “areaconst” tiene un efecto significativo en la variable precio.
## Rsquared: 0.5597117
Enunciado: interpretar el indicador de bondad R2.
Comentario: alrededor del 55.97% de la variación en el precio de las viviendas es explicada por la variable “areaconst”. Teniendo en cuenta que el modelo solo tiene en cuenta una variable se puede considerar que “areaconst” es un predictor significativo de “preciom”.
# Definir el valor de 'areaconst'
nuevos_datos <- data.frame(areaconst = 110)
# Utilizar la función predict para estimar el precio
precio_estimado <- predict(modelo, newdata = nuevos_datos)
## Predicion precio apto de 110 m2: 277.1674
Enunciado: considera entonces con este resultado que un apartamento en la misma zona con 110 metros cuadrados en un precio de 200 millones sería una atractiva esta oferta? ¿Qué consideraciones adicionales se deben tener?.
Comentario: basandose solo en los reultados del modelo se pensaria que 200 millones NO es una oferta atractiva debido a que es 77 millones mas bajo de lo que sugiere el modelo. Sin embargo el precio de una vivienda no depende solo los metros cuadrados. Generalmente hay otros factores como la ubicación, antiguedad, estado de la propiedad, demanda en el mercado, etc, que suelen influir en el precio de una propiedad y que no se tienen en cuenta en el modelo.
# Prueba Shapiro-Wilk para normalidad
shapiro_test <- shapiro.test(resid(modelo))
shapiro_test
##
## Shapiro-Wilk normality test
##
## data: resid(modelo)
## W = 0.96486, p-value < 2.2e-16
# Prueba Breusch-Pagan para homocedasticidad
bp_test <- bptest(modelo)
bp_test
##
## studentized Breusch-Pagan test
##
## data: modelo
## BP = 292.99, df = 1, p-value < 2.2e-16
# Prueba Durbin-Watson para no autocorrelación
dw_test <- dwtest(modelo)
dw_test
##
## Durbin-Watson test
##
## data: modelo
## DW = 1.443, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
Enunciado: interpretar los supuestos y sugerir posibles soluciones.
Comentarios:
De la revision de los graficos se evidencia que no se esta cumpliendo con los supuesdos del modelo de regresion linea.
El resultado de la prueba de Shapiro-Wilk (p-value < 2.2e-16) indica que los residuos del modelo no siguen una distribución normal.
El resultado de la prueba de Breusch-Pagan (BP de 292.99 y p-value < 2.2e-16) sugiere que hay evidencia de heterocedasticidad en los residuos, lo que indica una violación del supuesto de homocedasticidad.
El resultado de la prueba de Durbin-Watson (DW es 1.443 y p-value < 2.2e-16) sugiere que hay evidencia de autocorrelación positiva en los residuos, lo que indica una violación del supuesto de no autocorrelación.
Como posible solución se considera aplicar transformaciones para intentar que la relación sea más lineal. Si las transformaciones no resuelven el problema, otra opción es considerar modelos no lineales.
# Aplicar transformación de Box-Cox
boxcox_result <- boxCox(modelo)
# Encontrar transformación óptima (lambda)
lambda <- boxcox_result$x[which.max(boxcox_result$y)]
## lambda: -0.06060606
#Aplicar transformación de Box-Cox con valor de lambda especificado
lambda_espec <- -0.06060606
viviendaA$preciom_l_espec <- (viviendaA$preciom^lambda_espec - 1) / lambda_espec
# Ajustar nuevo modelo con los datos transformados
modelo_l_espec <- lm(preciom_l_espec ~ areaconst, data = viviendaA)
summary(modelo_l_espec)
##
## Call:
## lm(formula = preciom_l_espec ~ areaconst, data = viviendaA)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.71317 -0.09492 -0.00849 0.11447 0.47869
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.990726 0.014097 283.08 <2e-16 ***
## areaconst 0.006821 0.000179 38.12 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.149 on 1361 degrees of freedom
## Multiple R-squared: 0.5163, Adjusted R-squared: 0.5159
## F-statistic: 1453 on 1 and 1361 DF, p-value: < 2.2e-16
# Aplicar transformación con lambda = 0 (logaritmo)
viviendaA$preciom_transformado_log <- log(viviendaA$preciom)
# Ajustar nuevo modelo con los datos transformados
modelo_transformado_log <- lm(preciom_transformado_log ~ areaconst, data = viviendaA)
summary(modelo_transformado_log)
##
## Call:
## lm(formula = preciom_transformado_log ~ areaconst, data = viviendaA)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.98857 -0.13188 -0.01249 0.15595 0.66387
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.5512586 0.0194001 234.60 <2e-16 ***
## areaconst 0.0094530 0.0002463 38.38 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2051 on 1361 degrees of freedom
## Multiple R-squared: 0.5198, Adjusted R-squared: 0.5195
## F-statistic: 1473 on 1 and 1361 DF, p-value: < 2.2e-16
# Aplica transformación con lambda = -0.5 (inverso de la raíz cuadrada)
viviendaA$preciom_transformado_raiz <- (1 / sqrt(viviendaA$preciom))
# Ajustar nuevo modelo con los datos transformados
modelo_transformado_raiz <- lm(preciom_transformado_raiz ~ areaconst, data = viviendaA)
summary(modelo_transformado_raiz)
##
## Call:
## lm(formula = preciom_transformado_raiz ~ areaconst, data = viviendaA)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.022689 -0.006035 0.000169 0.004798 0.033685
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 9.707e-02 7.061e-04 137.47 <2e-16 ***
## areaconst -3.231e-04 8.963e-06 -36.05 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.007464 on 1361 degrees of freedom
## Multiple R-squared: 0.4884, Adjusted R-squared: 0.488
## F-statistic: 1299 on 1 and 1361 DF, p-value: < 2.2e-16
Enunciado: compare los 3 modelos e interprete los resultados.
Comentarios:
Ninguno de los modelos cumplio los supuestos.
En los tres modelos los valores de p-valor son bajos (p-value: < 2.2e-16) lo que sujiere que “areaconst” tiene una influencia significativa en la variable dependiente, independientemente de la transformación aplicada.
El valor de R-cuadrado ajustado es similar en los tres modelos, lo que sugiere que explican una cantidad similar de variabilidad en los datos.
El modelo lineal simple y las 3 trasnformaciones revisadas no cumplieron con supuestos de normalidad para estas dos variables.
Para explicar la variable precio se recomienda estudiar otro modelo que no sea una regresión linal.