En este proyecto, usando R, se realiza un análisis estadístico del comportamiento del mercado inmobiliario de acuerdo a la información recogida por la empresa A&C, esto con el propósito de que sea útil para la toma de decisiones comerciales.
Los datos son obtenidos de la librería paqueteMETODOS de R y, analizados a través de la misma herramienta haciendo uso de diferentes paquetes que permiten realizar un análisis estadístico descriptivo, de acuerdo a la siguiente metodología.
Con base en los datos de ofertas de vivienda descargadas del portal Fincaraiz para apartamento de estrato 4 con área construida menor a \(200\) \(m^{2}\) \((vivienda4.RDS)\) la inmobiliaria A&C requiere el apoyo de un científico de datos en la construcción de un modelo que lo oriente sobre los precios de inmuebles.
data(vivienda4)
head(vivienda4)
AyC <- vivienda4
AyC <- subset(vivienda4, vivienda4$tipo == "Apartamento" & vivienda4$areaconst < 200)
AyC
## # A tibble: 1,360 × 5
## zona estrato preciom areaconst tipo
## <fct> <fct> <dbl> <dbl> <fct>
## 1 Zona Norte 4 232. 52 Apartamento
## 2 Zona Norte 4 255. 108 Apartamento
## 3 Zona Sur 4 258. 96 Apartamento
## 4 Zona Norte 4 250. 82 Apartamento
## 5 Zona Norte 4 247. 75 Apartamento
## 6 Zona Norte 4 222. 60 Apartamento
## 7 Zona Norte 4 227. 84 Apartamento
## 8 Zona Norte 4 255. 117 Apartamento
## 9 Zona Norte 4 232. 60 Apartamento
## 10 Zona Norte 4 237. 75 Apartamento
## # ℹ 1,350 more rows
faltantes4 <- colSums(is.na(AyC)) %>% as.data.frame()
faltantes4
## .
## zona 0
## estrato 0
## preciom 0
## areaconst 0
## tipo 0
AyC$preciom2 <- AyC$preciom/AyC$areaconst
AyC
## # A tibble: 1,360 × 6
## zona estrato preciom areaconst tipo preciom2
## <fct> <fct> <dbl> <dbl> <fct> <dbl>
## 1 Zona Norte 4 232. 52 Apartamento 4.47
## 2 Zona Norte 4 255. 108 Apartamento 2.36
## 3 Zona Sur 4 258. 96 Apartamento 2.69
## 4 Zona Norte 4 250. 82 Apartamento 3.05
## 5 Zona Norte 4 247. 75 Apartamento 3.30
## 6 Zona Norte 4 222. 60 Apartamento 3.71
## 7 Zona Norte 4 227. 84 Apartamento 2.70
## 8 Zona Norte 4 255. 117 Apartamento 2.18
## 9 Zona Norte 4 232. 60 Apartamento 3.86
## 10 Zona Norte 4 237. 75 Apartamento 3.16
## # ℹ 1,350 more rows
El equipo de asesores ha diseñado los siguientes pasos para obtener un modelo y así determinar los precios de los inmuebles a negociar en el futuro.
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.
| tipo | n | Min. | Q1 | Median | Q3 | Max. | Mean | Sd |
|---|---|---|---|---|---|---|---|---|
| Apartamento | 1360 | 207.4 | 228.8 | 236.1 | 243.6 | 300.4 | 237.5 | 12.9 |
| zona | n | Min. | Q1 | Median | Q3 | Max. | Mean | Sd |
|---|---|---|---|---|---|---|---|---|
| Zona Centro | 7 | 236.2 | 236.4 | 257.3 | 278.2 | 279.0 | 256.4 | 17.9 |
| Zona Norte | 236 | 216.2 | 230.0 | 236.7 | 243.7 | 296.7 | 238.8 | 13.3 |
| Zona Oeste | 52 | 215.4 | 227.3 | 238.3 | 247.7 | 275.2 | 238.9 | 14.6 |
| Zona Oriente | 2 | 236.8 | 236.8 | 240.4 | 244.0 | 244.0 | 240.4 | 5.1 |
| Zona Sur | 1063 | 207.4 | 228.6 | 235.7 | 243.2 | 300.4 | 237.1 | 12.7 |
| tipo | n | Min. | Q1 | Median | Q3 | Max. | Mean | Sd |
|---|---|---|---|---|---|---|---|---|
| Apartamento | 1360 | 40 | 60 | 70 | 83 | 198 | 75.2 | 21.8 |
| zona | n | Min. | Q1 | Median | Q3 | Max. | Mean | Sd |
|---|---|---|---|---|---|---|---|---|
| Zona Centro | 7 | 62 | 72.0 | 120 | 129.0 | 155 | 107.7 | 32.9 |
| Zona Norte | 236 | 51 | 61.0 | 73 | 82.8 | 198 | 78.2 | 23.6 |
| Zona Oeste | 52 | 48 | 56.8 | 63 | 82.0 | 144 | 74.9 | 26.1 |
| Zona Oriente | 2 | 84 | 84.0 | 87 | 90.0 | 90 | 87.0 | 4.2 |
| Zona Sur | 1063 | 40 | 60.0 | 70 | 83.0 | 198 | 74.3 | 20.9 |
El número de apartamentos en la zona oriente y zona centro no es significativa, por lo que se debe analizar en conjunto.
El mayor número de apartamentos ofertados está ubicado en la zona sur en donde el 50% de los precios de venta se encuentra entre \(207.4\)M COP y \(235.7\)M COP,
La dispersión de precios y área construida para la zona oriente es baja \(5.1\) y \(4.2\), respectivamente, sin embargo, esto no es significativo ya que tiene un \(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 (área construida) - incluir gráficos e indicadores apropiados interpretados.
cor.test(AyC$areaconst, AyC$preciom)
##
## Pearson's product-moment correlation
##
## data: AyC$areaconst and AyC$preciom
## t = 56.37, df = 1358, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.8203549 0.8522488
## sample estimates:
## cor
## 0.8370114
cor.test(AyC$areaconst, AyC$preciom, method="spearman")
## Warning in cor.test.default(AyC$areaconst, AyC$preciom, method = "spearman"):
## Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: AyC$areaconst and AyC$preciom
## S = 109351031, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.7391699
Se evidencia que entre el precio de venta y el área construida existe una correlación positiva directamente proporcional, es decir, a mayor área mayor es el precio. Adicionalmente, el mayor volumen de viviendas tienen un área igual o inferior a \(100m^2\).
Al plantear la hipótesis nula \(H_{0}\) : Correlación es cero y utilizando la prueba Spearman’s se tiene que \(p-value\) es cercano a \(0\), no se rechaza \(H_{0}\), lo que indica que ambas variables están correlacionadas.
cor.test(AyC$areaconst,AyC$preciom)
##
## Pearson's product-moment correlation
##
## data: AyC$areaconst and AyC$preciom
## t = 56.37, df = 1358, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.8203549 0.8522488
## sample estimates:
## cor
## 0.8370114
Estime el modelo de regresión lineal simple entre \(precio=f(area)+ε\). Interprete los coeficientes del modelo \(β_{0}\), \(β_{1}\) en caso de ser correcto.
El modelo de regresión lineal \(Y=β_{0}+β_{1}X+ε\) obtenido es \(Y=200.1863+0.4967X\)
mrl<- lm(preciom~areaconst, data=AyC)
mrl
##
## Call:
## lm(formula = preciom ~ areaconst, data = AyC)
##
## Coefficients:
## (Intercept) areaconst
## 200.1863 0.4967
mrl_summary <- summary(mrl)
mrl_summary
##
## Call:
## lm(formula = preciom ~ areaconst, data = AyC)
##
## Residuals:
## Min 1Q Median 3Q Max
## -26.4010 -5.0783 -0.0175 4.6173 24.3353
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.002e+02 6.899e-01 290.15 <2e-16 ***
## areaconst 4.967e-01 8.811e-03 56.37 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7.087 on 1358 degrees of freedom
## Multiple R-squared: 0.7006, Adjusted R-squared: 0.7004
## F-statistic: 3178 on 1 and 1358 DF, p-value: < 2.2e-16
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.
Con una confianza del \(95\%\), se puede concluir que por cada metro cuadrado que incremente el apartamento, el precio puede incrementar entre \(0.479\)M COP y \(0.514\)M COP.
Se plantea la hipótesis nula \(H_0 : β1=0\). Se utiliza la prueba \(t\) para determinar si el coeficiente \(β_{1}\) es igual a cero, obteniendo como resultado igual a \(Pr(>|t|)=0\), es decir que, no hay una linealidad entre el precio y el área construida.
confint(mrl, level=0.95)
## 2.5 % 97.5 %
## (Intercept) 198.8328481 201.5398110
## areaconst 0.4794099 0.5139806
Calcule e interprete el indicador de bondad \(R^{2}\).
El coeficiente de determinación \(R^{2}\) es una medida utilizada para explicar cuánta variabilidad de un factor puede ser causada por su relación con otro factor relacionado. Esta correlación, conocida como “bondad de ajuste”, se representa como un valor entre 0,0 y 1,0. Un valor de 1,0 indica un ajuste perfecto y, por tanto, un modelo muy fiable para las previsiones futuras, mientras que un valor de 0,0 indicaría que el cálculo no logra modelar los datos con precisión en absoluto.
En este caso, se tiene que \(R^{2}=0.700588\), lo que sugiere que el \(70\%\) de la variable dependiente (Precio de vivienda (M COP)) es predicha por la variable independiente (Área construida (Metros cuadrados)).
summary(mrl)$r.squared
## [1] 0.700588
¿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?.
De acuerdo con el modelo, el precio promedio estimado para los apartamentos de \(110 m^{2}\) sería de \(254.8\)M COP, con un intervalo de confianza del \(95\%\) con un límite inferior \(L_{i}=254.1\) y límite superior \(L_{s}=255.5\).
predict.lm(mrl, list(areaconst=110), interval="confidence", level=0.95)
## fit lwr upr
## 1 254.8228 254.113 255.5326
Para determinar si un apartamento de \(110 m^{2}\) en un precio de \(200\)M COP sería una oferta atractiva en una zona, se debe calcular el precio promedio estimado para cada zona, estimando modelos por zona, obteniendo que:
AyC_centro <- subset(AyC, zona == "Zona Centro")
AyC_norte <- subset(AyC, zona == "Zona Norte")
AyC_oeste <- subset(AyC, zona == "Zona Oeste")
AyC_oriente <- subset(AyC, zona == "Zona Oriente")
AyC_sur <- subset(AyC, zona == "Zona Sur")
n_ce = n(AyC_centro$zona)
n_no = n(AyC_norte$zona)
n_oe = n(AyC_oeste$zona)
n_or = n(AyC_oriente$zona)
n_su = n(AyC_sur$zona)
mrl_ce <- lm(preciom~areaconst, data=AyC_centro)
mrl_no <- lm(preciom~areaconst, data=AyC_norte)
mrl_oe <- lm(preciom~areaconst, data=AyC_oeste)
mrl_or <- lm(preciom~areaconst, data=AyC_oriente)
mrl_su <- lm(preciom~areaconst, data=AyC_sur)
ce <- predict.lm(mrl_ce, list(areaconst=110))
no <- predict.lm(mrl_no, list(areaconst=110))
oe <- predict.lm(mrl_oe, list(areaconst=110))
or <- predict.lm(mrl_or, list(areaconst=110))
su <- predict.lm(mrl_su, list(areaconst=110))
data.frame(
"zona" = as.character(c("Zona Centro","Zona Norte","Zona Oeste","Zona Oriente","Zona Sur")),
"n" = c(n_ce,n_no,n_oe,n_or,n_su),
"Predict. fit" = c(ce,no,oe,or,su)
)
## zona n Predict..fit
## 1 Zona Centro 7 257.5557
## 2 Zona Norte 236 254.2524
## 3 Zona Oeste 52 255.4371
## 4 Zona Oriente 2 267.8277
## 5 Zona Sur 1063 254.9250
De acuerdo con lo anterior, se determina que el precio de \(200\)M COP para un apartamento de \(110 m^{2}\) en cualquier zona es una oferta muy atractiva para comprador, es importante tener en cuenta que en la zona oriente \(n=2\) y en la zona centro \(n=7\). Adicionalmente, se deben considerar características específicas del apartamento, tales como, número de habitaciones y baños, piso en el que se encuentra ubicado, ascensor, antigüedad, estado general del inmueble, etc.
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.
Los supuestos teóricos sobre los que se sustenta el modelo de regresión lineal simple son cuatro:
Se plantea la hipótesis nula \(H_{0}\) : La relación entre las variables es lineal. Para evaluar la linealidad se calcula la media de los residuos del modelo. Dado que la media de residuos es \(-2.311717e-16\), es decir, cercana a \(0\), no se rechaza \(H_{0}\) de linealidad. Según el gráfico de los residuos, se evidencia cómo oscilan alrededor de su media la cual es cercana a \(0\).
mean(mrl$residuals)
## [1] -2.311717e-16
Se plantea la hipótesis nula \(H_{0}\) : Los residuos son independientes. Para evaluar la independencia se utiliza la prueba Durbin-Watson. Dado que el \(p-value=0.6536\) es mayor que \(0.05\) no se rechaza \(H_{0}\) de independencia.
dwtest(mrl)
##
## Durbin-Watson test
##
## data: mrl
## DW = 2.0219, p-value = 0.6536
## alternative hypothesis: true autocorrelation is greater than 0
Se plantea la hipótesis nula \(H_{0}\) : Los residuos tienen una varianza constante. Para evaluar la homocedasticidad se utiliza la prueba Breusch-Pagan. Dado que el \(p-value=0.4897\) es mayor que \(0.05\) no se rechaza \(H_{0}\) de homocedasticidad. Según el gráfico se evidencia que los residuos estudentizados oscilan alrededor de \(0\).
bptest(mrl)
##
## studentized Breusch-Pagan test
##
## data: mrl
## BP = 0.47718, df = 1, p-value = 0.4897
Se plantea la hipótesis nula \(H_{0}\) : Los residuos tienen una distribución normal. Para evaluar la normalidad se utiliza la prueba Shapiro-Wilk. Dado que el \(p-value=0.5243\) es mayor que \(0.05\) no se rechaza \(H_{0}\) de normalidad. Según los gráficos se evidencia cómo los residuos siguen una distribución normal.
shapiro.test(mrl$residuals)
##
## Shapiro-Wilk normality test
##
## data: mrl$residuals
## W = 0.99883, p-value = 0.5243
En conclusión, para el modelo de regresión lineal \(Y=β_{0}+β_{1}X+ε\) obtenido \(Y=200.1863+0.4967X\) se cumplen los 4 supuestos.
De ser necesario realice una transformación apropiada para mejorar el ajuste y supuestos del modelo.
Se plantean 4 modelos:
x <- AyC$areaconst
y <- AyC$preciom
log_x <- log(AyC$areaconst)
log_y <- log(AyC$preciom)
mod_1 <- lm(y~x, data=AyC)
mod_2 <- lm(log_y~x, data=AyC)
mod_3 <- lm(y~log_x, data=AyC)
mod_4 <- lm(log_y~log_x, data=AyC)
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(mod_1,mod_2,mod_3,mod_4, type = "text", df=FALSE)
##
## =======================================================================
## Dependent variable:
## ---------------------------------------------------
## y log_y y log_y
## (1) (2) (3) (4)
## -----------------------------------------------------------------------
## x 0.497*** 0.002***
## (0.009) (0.00004)
##
## log_x 42.112*** 0.172***
## (0.801) (0.003)
##
## Constant 200.186*** 5.318*** 57.054*** 4.733***
## (0.690) (0.003) (3.437) (0.014)
##
## -----------------------------------------------------------------------
## Observations 1,360 1,360 1,360 1,360
## R2 0.701 0.682 0.671 0.663
## Adjusted R2 0.700 0.681 0.671 0.662
## Residual Std. Error 7.087 0.030 7.432 0.031
## F Statistic 3,177.556*** 2,906.067*** 2,766.449*** 2,667.104***
## =======================================================================
## Note: *p<0.1; **p<0.05; ***p<0.01
Se concluye que todos los modelos tienen coeficientes de determinación similares, sin embargo, el modelo 1 (lin-lin) tiene el mayor \(R^2=0.701\).
Se utiliza la transformacion Box Cox para calcular un lambda \(\lambda=1.01\), dado que es cercano a \(1\) se ajusta a un modelo lineal.
## [1] 1.010101
De ser necesario compare el ajuste y supuestos del modelo inicial y el transformado.
Se evalúan los supuestos de independencia, homocedasticidad y normalidad en los 4 modelos planteados en el punto 4.8.
Teniendo en cuenta la hipótesis nula \(H_{0}\) : Los residuos son independientes y utilizando la prueba Durbin-Watson, se tiene que para los 4 modelos el \(p-value\) es mayor que \(0.05\), por lo tanto no se rechaza \(H_{0}\), se cumple el supuesto de independencia.
dwtest(mod_1)
##
## Durbin-Watson test
##
## data: mod_1
## DW = 2.0219, p-value = 0.6536
## alternative hypothesis: true autocorrelation is greater than 0
dwtest(mod_2)
##
## Durbin-Watson test
##
## data: mod_2
## DW = 2.0218, p-value = 0.6523
## alternative hypothesis: true autocorrelation is greater than 0
dwtest(mod_3)
##
## Durbin-Watson test
##
## data: mod_3
## DW = 1.9505, p-value = 0.1778
## alternative hypothesis: true autocorrelation is greater than 0
dwtest(mod_4)
##
## Durbin-Watson test
##
## data: mod_4
## DW = 1.9678, p-value = 0.2727
## alternative hypothesis: true autocorrelation is greater than 0
Teniendo en cuenta la hipótesis nula \(H_{0}\) : Los residuos tienen una varianza constante y utilizando la prueba Breusch-Pagan, se tiene que para los modelos 1 y 4, el \(p-value\) es mayor que \(0.05\), por lo tanto no se rechaza \(H_{0}\), se cumple el supuesto de homocedasticidad. Mientras que, para los modelos 2 y 3, el \(p-value\) es menor que \(0.05\), rechazando \(H_{0}\), los residuos no tienen varianza constante.
bptest(mod_1)
##
## studentized Breusch-Pagan test
##
## data: mod_1
## BP = 0.47718, df = 1, p-value = 0.4897
bptest(mod_2)
##
## studentized Breusch-Pagan test
##
## data: mod_2
## BP = 5.8661, df = 1, p-value = 0.01544
bptest(mod_3)
##
## studentized Breusch-Pagan test
##
## data: mod_3
## BP = 7.6515, df = 1, p-value = 0.005672
bptest(mod_4)
##
## studentized Breusch-Pagan test
##
## data: mod_4
## BP = 0.83834, df = 1, p-value = 0.3599
Teniendo en cuenta la hipótesis nula \(H_{0}\) : Los residuos tienen una distribución normal y utilizando la prueba Shapiro-Wilk, se tiene que para los modelos 1, 2 y 4, el \(p-value\) es mayor que \(0.05\), por lo tanto no se rechaza \(H_{0}\), se cumple el supuesto de normalidad. Mientras que, para el modelo 3, el \(p-value\) es menor que \(0.05\), rechazando \(H_{0}\), los residuos no siguen una distribución normal.
shapiro.test(mod_1$residuals)
##
## Shapiro-Wilk normality test
##
## data: mod_1$residuals
## W = 0.99883, p-value = 0.5243
shapiro.test(mod_2$residuals)
##
## Shapiro-Wilk normality test
##
## data: mod_2$residuals
## W = 0.99904, p-value = 0.7137
shapiro.test(mod_3$residuals)
##
## Shapiro-Wilk normality test
##
## data: mod_3$residuals
## W = 0.99736, p-value = 0.02368
shapiro.test(mod_4$residuals)
##
## Shapiro-Wilk normality test
##
## data: mod_4$residuals
## W = 0.99855, p-value = 0.3145
Estime varios modelos y compare los resultados obtenidos. En el mejor de los modelos, ¿se cumplen los supuestos sobre los errores?
De los modelos estimados, los modelos 1 y 4 cumplen los supuestos de independencia, homocedasticidad y normalidad.
| Modelo | Independencia | Homocedasticidad | Normalidad |
|---|---|---|---|
| Modelo 1: lin-lin | Se cumple | Se cumple | Se cumple |
| Modelo 2: log-lin | Se cumple | No se cumple | Se cumple |
| Modelo 3: lin-log | Se cumple | No se cumple | No se cumple |
| Modelo 4: log-log | Se cumple | Se cumple | Se cumple |