Informe de Análisis de Precios de Viviendas

Este informe presenta un análisis detallado de los precios de las viviendas y su relación con el área construida en el mercado inmobiliario. El análisis se basa en datos recopilados del portal Fincaraiz para apartamento de estrato 4 con área construida menor a 200 m 2 y tiene como objetivo proporcionar información clave para la toma de decisiones.

  1. Análisis Exploratorio

1.1 Datos Faltantes

Se realizó una verificación de datos faltantes en los registros y se determinó que no hay valores faltantes en las variables analizadas.

1.2 Distribución de Variables

Se realizaron histogramas para visualizar la distribución de las variables precio y área construida. Ambas variables muestran distribuciones prácticamente idénticas, lo que sugiere una correlación potencial entre ellas.

  1. Relación entre Precio y Área Construida

2.1 Correlación

Se calculó la correlación entre el precio de las viviendas y el área construida, y se encontró una correlación positiva fuerte de 0.76. Esto indica que a medida que aumenta el área construida, el precio tiende a aumentar.

2.2 Modelo de Regresión Lineal Simple

Se estimó un modelo de regresión lineal simple entre el precio y el área construida. El modelo resultante es:

Precio = 1.8 * ÁreaConstruida + ε El coeficiente de regresión β1 es positivo (1.8), lo que sugiere que un aumento en el área construida se asocia con un aumento en el precio. El R-cuadrado indica que el modelo explica una cantidad significativa de la variabilidad en los precios.

2.3 Prueba de Hipótesis y Diagnóstico de Errores

  1. Modelo Transformado

Se ajustó un modelo transformado utilizando el logaritmo de las variables. El modelo transformado mejoró ligeramente el ajuste a los datos y cumplió con algunos supuestos.

  1. Conclusiones y Recomendaciones

Anexos

1. Realice un análisis exploratorio de las variables precio de vivienda (millones de pesos COP) y área de la vivienda (metros cuadrados) - incluir gráficos e indicadores apropiados interpretados.

data("vivienda4")

# revision de datos faltantes
faltantes <- colSums(is.na(vivienda4))
faltantes
##      zona   estrato   preciom areaconst      tipo 
##         0         0         0         0         0
summary(vivienda4$preciom)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    78.0   160.0   210.0   225.4   265.0   760.0
summary(vivienda4$areaconst)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   40.00   60.00   75.00   87.63   98.00  200.00
hist(vivienda4$preciom, main = "Histograma del Precio de Vivienda", xlab = "Precio (millones de pesos COP)", col = "lightblue")

hist(vivienda4$areaconst, main = "Histograma del Área de la Vivienda", xlab = "Área (metros cuadrados)", col = "lightgreen")

No hay valores faltantes es ninguna variable, notamos que las distribuciones de ambas variables son prácticamente idénticas, lo cual puede ser un buen indicativo de correlación.

2. Realice un análisis exploratorio bivariado de datos, enfocado en la relación entre la variable respuesta (precio) en función de la variable predictora (area construida) - incluir gráficos e indicadores apropiados interpretados.

cor(vivienda4$areaconst, vivienda4$preciom)
## [1] 0.7630166
modelo1 <- lm(preciom ~ areaconst, data = vivienda4)
plot(vivienda4$areaconst, vivienda4$preciom, 
     main = "Diagrama de Dispersión: Precio vs. Área Construida", 
     xlab = "Área Construida (metros cuadrados)", 
     ylab = "Precio (millones de pesos COP)", 
     col = "blue")
abline(modelo1, col = "red")

summary(modelo1)
## 
## Call:
## lm(formula = preciom ~ areaconst, data = vivienda4)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -195.86  -31.95   -8.95   27.87  431.17 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   67.381      3.510   19.20   <2e-16 ***
## areaconst      1.803      0.037   48.73   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 55.53 on 1704 degrees of freedom
## Multiple R-squared:  0.5822, Adjusted R-squared:  0.5819 
## F-statistic:  2374 on 1 and 1704 DF,  p-value: < 2.2e-16
print(cor(vivienda4$preciom,vivienda4$areaconst))
## [1] 0.7630166

El diagrama de dispersión, da una clara tendencia al alza, es decir, entre más área de construcción, podemos decir, en base a la gráfica, que el precio aumentara también, teniendo una correlación de ambas variables de 0.7630166, confirmamos la correlación positiva entre ambas variables.

3. Estime el modelo de regresión lineal simple entre precio=f(area)+ε. Interprete los coeficientes del modelo β0, β1 en caso de ser correcto.

modelo1 <- lm(preciom ~ areaconst, data = vivienda4)

summary(modelo1)
## 
## Call:
## lm(formula = preciom ~ areaconst, data = vivienda4)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -195.86  -31.95   -8.95   27.87  431.17 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   67.381      3.510   19.20   <2e-16 ***
## areaconst      1.803      0.037   48.73   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 55.53 on 1704 degrees of freedom
## Multiple R-squared:  0.5822, Adjusted R-squared:  0.5819 
## F-statistic:  2374 on 1 and 1704 DF,  p-value: < 2.2e-16
u = modelo1$residuals

al tener el coeficiente \(\beta_1\) positivo es un indicativo que la variable aporta positivamente a la regresión lineal, es decir, al precio final, sin embargo, entre más grande ese número, significa que aporta mayor cantidad a l precio la variable, así que con un valor de 1.8 podemos decir que su aporte es positivo, pero no excesivamente grande.

4. Construir un intervalo de confianza (95%) para el coeficiente β1, interpretar y concluir si el coeficiente es igual a cero o no. Compare este resultado con una prueba de hipótesis t.

modelo1 <- lm(preciom ~ areaconst, data = vivienda4)

conf_int <- confint(modelo1, level = 0.95)

conf_int
##                 2.5 %    97.5 %
## (Intercept) 60.496208 74.265055
## areaconst    1.730404  1.875547

\[H_0: \beta_1 = 0 \quad\quad, H_1: \beta_1 \neq 0\]

prueba_t <- shapiro.test(u)
prueba_t 
## 
##  Shapiro-Wilk normality test
## 
## data:  u
## W = 0.92671, p-value < 2.2e-16

La prueba de hipótesis arrojo un pvalor menor al 0.05 por lo tanto tenemos evidencia para rechazar la hipótesis de que el coeficiente beta es igual a 0. No se presenta normalidad de los errores.

lmtest::bptest(modelo1)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo1
## BP = 152.8, df = 1, p-value < 2.2e-16

La varianza de los errores no es constante, los errores tienen varianza.

lmtest::dwtest(modelo1)
## 
##  Durbin-Watson test
## 
## data:  modelo1
## DW = 1.6713, p-value = 5.124e-12
## alternative hypothesis: true autocorrelation is greater than 0

Los errores no son independientes

5. Calcule e interprete el indicador de bondad R2.

summary(modelo1)$r.squared
## [1] 0.5821944

Teniendo en cuenta que el valor esta más cercano a 1 que a 0, podemos establecer que nuestro modelo se ajusta medianamente bien a los datos.

6. ¿Cuál sería el precio promedio estimado para un apartamento de 110

metros cuadrados? 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?.

predict(modelo1, data.frame(areaconst=110), interval = "confidence")
##        fit      lwr      upr
## 1 265.7079 262.6113 268.8046

(262.6113 , 268.8046): El precio promedio estimado para un apartamento de 110 metros cuadrados, según el modelo de regresión lineal simple, es de 265.7079 millones de pesos COP. Esto significa que, en promedio, un apartamento de 110 metros cuadrados en esa zona se vendería por aproximadamente 265.7 millones de pesos.

Tendría en cuenta:

  • Comparación de precios: El precio propuesto de 200 millones de pesos COP es significativamente más bajo que el precio estimado por el modelo (265.7 millones de pesos COP). Esto podría considerarse una oferta atractiva en términos de precio.

  • Contexto del mercado: Asegúrate de comprender el mercado inmobiliario en esa zona. Puede haber diversas razones por las que un vendedor podría ofrecer un precio más bajo, como una necesidad de venta rápida, condiciones del inmueble, competencia en la zona, entre otros.

  • Condición y características del apartamento: Además del precio, es importante considerar las condiciones y características específicas del apartamento en cuestión. ¿Está en buen estado? ¿Tiene características adicionales que lo hacen más atractivo?

  • Negociación y evaluación de riesgos: Si estás interesado en la oferta, es fundamental realizar una inspección detallada del apartamento y, si es posible, obtener una tasación independiente. También puedes considerar la posibilidad de negociar el precio.

7. Realice la validación de los supuestos del modelo por medio de gráficos apropiados, interpretarlos y sugerir posibles soluciones si se violan algunos de ellos. Utilice las pruebas de hipótesis para la validación de supuestos y compare los resultados con lo observado en los gráficos asociados.

plot(modelo1)

Los gráficos se ajustan bastante bien a lo suponemos del modelo que se ajusta medianamente bien a los datos.

8. De ser necesario realice una transformación apropiada para mejorar el ajuste y supuestos del modelo.

modelo2 <- lm(log(preciom) ~ areaconst, data = vivienda4)
summary(modelo2)
## 
## Call:
## lm(formula = log(preciom) ~ areaconst, data = vivienda4)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.80097 -0.16347 -0.02737  0.16610  1.14818 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 4.7238296  0.0143492  329.21   <2e-16 ***
## areaconst   0.0072020  0.0001513   47.61   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.227 on 1704 degrees of freedom
## Multiple R-squared:  0.5709, Adjusted R-squared:  0.5706 
## F-statistic:  2267 on 1 and 1704 DF,  p-value: < 2.2e-16

9. De ser necesario compare el ajuste y supuestos del modelo inicial y el transformado.

plot(modelo1)

plot(modelo2)

Las gráficas son bastante parecidas entre sí.

summary(modelo1)$r.squared
## [1] 0.5821944
summary(modelo2)$r.squared
## [1] 0.5708913

El \(R^2\) con la transformación, nos da un mejor ajuste a los datos, aunque la variación es poca

shapiro.test(modelo2$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  modelo2$residuals
## W = 0.99287, p-value = 2.395e-07

Ambos modelos rechazan la hipótesis de nulidad en el \(\beta_1\)

10. Estime varios modelos y compare los resultados obtenidos. En el mejor de los modelos, ¿se cumplen los supuestos sobre los errores?

modelo3 <- lm(preciom ~ log(areaconst), data = vivienda4)
modelo4 <- lm(log(preciom) ~ log(areaconst), data = vivienda4)
library(stargazer)
## 
## Please cite as:
##  Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
##  R package version 5.2.3. https://CRAN.R-project.org/package=stargazer
stargazer(modelo1, modelo2, modelo3, modelo4, type = "text", df=FALSE)
## 
## =======================================================================
##                                     Dependent variable:                
##                     ---------------------------------------------------
##                       preciom    log(preciom)   preciom    log(preciom)
##                         (1)          (2)          (3)          (4)     
## -----------------------------------------------------------------------
## areaconst             1.803***     0.007***                            
##                       (0.037)      (0.0002)                            
##                                                                        
## log(areaconst)                                 189.708***    0.780***  
##                                                 (3.641)      (0.014)   
##                                                                        
## Constant             67.381***     4.724***   -610.083***    1.919***  
##                       (3.510)      (0.014)      (16.085)     (0.063)   
##                                                                        
## -----------------------------------------------------------------------
## Observations           1,706        1,706        1,706        1,706    
## R2                     0.582        0.571        0.614        0.639    
## Adjusted R2            0.582        0.571        0.614        0.638    
## Residual Std. Error    55.531       0.227        53.347       0.208    
## F Statistic         2,374.452*** 2,267.022*** 2,715.248*** 3,012.086***
## =======================================================================
## Note:                                       *p<0.1; **p<0.05; ***p<0.01
modelo3 <- lm(preciom ~ log(areaconst), data = vivienda4)
summary(modelo3)
## 
## Call:
## lm(formula = preciom ~ log(areaconst), data = vivienda4)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -192.72  -27.27   -3.56   23.58  419.52 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    -610.083     16.085  -37.93   <2e-16 ***
## log(areaconst)  189.708      3.641   52.11   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 53.35 on 1704 degrees of freedom
## Multiple R-squared:  0.6144, Adjusted R-squared:  0.6142 
## F-statistic:  2715 on 1 and 1704 DF,  p-value: < 2.2e-16
u = modelo3$residuals

shapiro.test(u)
## 
##  Shapiro-Wilk normality test
## 
## data:  u
## W = 0.91387, p-value < 2.2e-16
lmtest::bptest(modelo3)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo3
## BP = 146.29, df = 1, p-value < 2.2e-16
lmtest::dwtest(modelo3)
## 
##  Durbin-Watson test
## 
## data:  modelo3
## DW = 1.6908, p-value = 7.831e-11
## alternative hypothesis: true autocorrelation is greater than 0

No se presenta normalida de los errores

La varianza de los errores no es constante en todas las observaciones, los errores tienen varianza.

Los errores no son independientes.

modelo4 <- lm(log(preciom) ~ log(areaconst), data = vivienda4)
summary(modelo4)
## 
## Call:
## lm(formula = log(preciom) ~ log(areaconst), data = vivienda4)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.85459 -0.13422 -0.00746  0.13797  1.10104 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     1.91891    0.06281   30.55   <2e-16 ***
## log(areaconst)  0.78022    0.01422   54.88   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2083 on 1704 degrees of freedom
## Multiple R-squared:  0.6387, Adjusted R-squared:  0.6385 
## F-statistic:  3012 on 1 and 1704 DF,  p-value: < 2.2e-16
u = modelo4$residuals

shapiro.test(u)
## 
##  Shapiro-Wilk normality test
## 
## data:  u
## W = 0.9934, p-value = 6.631e-07
lmtest::bptest(modelo4)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo4
## BP = 65.105, df = 1, p-value = 7.101e-16
lmtest::dwtest(modelo4)
## 
##  Durbin-Watson test
## 
## data:  modelo4
## DW = 1.5104, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0

Dado que el valor p es extremadamente pequeño (p-value = 6.631e-07), se rechaza la hipótesis nula en favor de la hipótesis alternativa. Esto sugiere que los errores no siguen una distribución normal.

La varianza de los errores no es constante en todas las observaciones, los errores tienen varianza, pero no es constante

Los errores no son independientes