En el presente trabajo se realizará una análisis del mercado inmobiliario a través de distintos modelos de regresión múltiple. Se comparan los resultados y se evaluan los supuestos sobre los que se apoyan.
Elaboramos un modelo con todas las covariables
modelo0=lm(price~rooms+bathrooms+surface_total+surface_covered+property_type+l3,data=df)
summary(modelo0)
Call:
lm(formula = price ~ rooms + bathrooms + surface_total + surface_covered +
property_type + l3, data = df)
Residuals:
Min 1Q Median 3Q Max
-400904 -33817 -3307 24660 560915
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -109406.61 4788.67 -22.847 < 2e-16 ***
rooms -3961.27 444.58 -8.910 < 2e-16 ***
bathrooms 34040.98 644.28 52.836 < 2e-16 ***
surface_total 919.08 23.52 39.069 < 2e-16 ***
surface_covered 1457.18 28.73 50.715 < 2e-16 ***
property_typeDepartamento 92653.32 2191.23 42.284 < 2e-16 ***
property_typePH 46779.37 2274.94 20.563 < 2e-16 ***
l3Agronomía 623.53 8846.14 0.070 0.943807
l3Almagro -4520.04 4295.24 -1.052 0.292650
l3Balvanera -24788.27 4551.65 -5.446 5.18e-08 ***
l3Barracas -10128.24 5351.06 -1.893 0.058397 .
l3Barrio Norte 49921.81 4417.82 11.300 < 2e-16 ***
l3Belgrano 69648.12 4283.55 16.259 < 2e-16 ***
l3Boca -47540.60 7076.20 -6.718 1.86e-11 ***
l3Boedo -19034.38 5219.54 -3.647 0.000266 ***
l3Caballito 6220.15 4301.29 1.446 0.148153
l3Catalinas -76321.95 33563.74 -2.274 0.022974 *
l3Centro / Microcentro -29046.49 6781.80 -4.283 1.85e-05 ***
l3Chacarita 11903.39 5299.02 2.246 0.024687 *
l3Coghlan 40820.55 5462.90 7.472 8.02e-14 ***
l3Colegiales 34073.02 4816.54 7.074 1.52e-12 ***
l3Congreso -32314.97 5494.75 -5.881 4.10e-09 ***
l3Constitución -47292.98 6321.63 -7.481 7.50e-14 ***
l3Flores -22510.27 4536.15 -4.962 6.99e-07 ***
l3Floresta -28315.65 5069.38 -5.586 2.34e-08 ***
l3Las Cañitas 90455.90 5883.38 15.375 < 2e-16 ***
l3Liniers -20080.34 5366.27 -3.742 0.000183 ***
l3Mataderos -33863.43 5424.79 -6.242 4.35e-10 ***
l3Monserrat -32431.49 5228.46 -6.203 5.59e-10 ***
l3Monte Castro -8770.72 5949.63 -1.474 0.140445
l3Nuñez 56958.42 4559.69 12.492 < 2e-16 ***
l3Once -30757.83 5456.51 -5.637 1.74e-08 ***
l3Palermo 66169.58 4221.50 15.674 < 2e-16 ***
l3Parque Avellaneda -34398.95 7598.09 -4.527 5.99e-06 ***
l3Parque Centenario -12288.30 5016.45 -2.450 0.014305 *
l3Parque Chacabuco -22537.83 5314.36 -4.241 2.23e-05 ***
l3Parque Chas 5195.26 7542.97 0.689 0.490981
l3Parque Patricios -36808.02 5973.29 -6.162 7.24e-10 ***
l3Paternal -13314.50 5189.69 -2.566 0.010304 *
l3Pompeya -79977.17 8035.74 -9.953 < 2e-16 ***
l3Puerto Madero 259015.83 5095.12 50.836 < 2e-16 ***
l3Recoleta 64088.22 4360.34 14.698 < 2e-16 ***
l3Retiro 26067.40 5281.27 4.936 8.01e-07 ***
l3Saavedra 19492.00 4914.18 3.966 7.31e-05 ***
l3San Cristobal -23739.75 4955.13 -4.791 1.67e-06 ***
l3San Nicolás -26247.55 5168.96 -5.078 3.83e-07 ***
l3San Telmo -5653.85 4877.12 -1.159 0.246356
l3Tribunales -34608.17 8924.63 -3.878 0.000106 ***
l3Velez Sarsfield -25943.69 8303.75 -3.124 0.001783 **
l3Versalles -22232.13 6758.40 -3.290 0.001004 **
l3Villa Crespo 1595.26 4317.54 0.369 0.711770
l3Villa del Parque -3290.17 4866.59 -0.676 0.498997
l3Villa Devoto 13301.39 4807.08 2.767 0.005659 **
l3Villa General Mitre -19170.08 6802.25 -2.818 0.004831 **
l3Villa Lugano -83039.18 6533.35 -12.710 < 2e-16 ***
l3Villa Luro -7579.11 5404.78 -1.402 0.160833
l3Villa Ortuzar 18667.61 6829.18 2.734 0.006269 **
l3Villa Pueyrredón 10516.80 5349.56 1.966 0.049314 *
l3Villa Real -8823.37 8745.56 -1.009 0.313030
l3Villa Riachuelo -32775.66 17171.10 -1.909 0.056298 .
l3Villa Santa Rita -5767.71 6383.86 -0.903 0.366274
l3Villa Soldati -136489.91 18944.29 -7.205 5.90e-13 ***
l3Villa Urquiza 30648.43 4418.91 6.936 4.09e-12 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 66580 on 45841 degrees of freedom
Multiple R-squared: 0.7764, Adjusted R-squared: 0.7761
F-statistic: 2568 on 62 and 45841 DF, p-value: < 2.2e-16
Análisis de variables constinuas y discretas:
El intercepto en nuestro ejemplo carece de sentido, ya que no tiene sentido ni interpretabilidad para nuestro problema un PH o departamente con cero metros cuadrados totales, cero baños, ambientes, etc. El Coeficiente “superficie cubierta” es significativos en su p-valor y de 1457, es decir, que la respuesta media de nuestro modelo en el precio en dólares de una vivienda cuando se incrementa en un metro cuadrado cubierto (y todas las demás variables de nuestro modelo se mantienen constantes), es de 1457 USD. Sin embargo, como en nuestro modelo tambien tenemos la variable “metros cuadrados totales”, por cada incremento en un metro cuadrado cubierto, inevitablemente se incrementará en la misma medida los metros totales. El coeficiente “superficie total” (tambien muy significativos) nos muestra una respuesta media de nuestro modelo en el precio en dólares de la vivienda de 919 USD (al mantener constante todo lo demás). Como el M2 cubierto y el total suben necesariamente juntos al incrementar un metro cuadrado podrìa pensarse como que el metro cuadrado cubierto en realidad incrementa el precio en 1457+919 =2.376 USD, mientras que el metro cuadrado descubierto (que suma al total pero no en el cubierto) incrementa el precio en el modelo en promedio 919USD. Respecto al coeficiente de “baño”, nos indica que el precio promedio de una vivienda en el modelo sube sube algo mas de 34 mil dólares por cada baño que se adiciona a esta. Cabe destacar que su p-valor es significativo. La interpretación para un único baño también la considero con alguna particularidad, ya que supuestamente cualquier vivienda contaria con un baño. Sin embargo, al incrementarse los baños generalmente suele incrementarse la “calidad” de la vivienda, ya que estos cambios pueden obedecer simplmente otro baño o bien ser un toilette para visitas o cuartos en suite. Por este motivo tiene sentido que el valor sea positivo en este caso. En el caso de los “rooms” o ambientes el coeficiente es de -3961 USD. Si bien el p valor nos dice que valor es significativo, el coeficiente (por su tamaño) no parece estar jugando un rol clave en el precio total por los precios medio de las viviendas y las cantidades medias de ambientes. A primera vista puede sonar raro que al incrementar un ambiente no suba el precio, pero si consideramos que los metros cuadrados totales y cubiertos (y todas las demas variables) estan fijas, lo que vemos es que el incremento de un ambiente en cuanto creciento de la vivienda ya esta reflejado en estas otras variables. Con lo cual, intuimos que una casa grande con muchos ambientes en el modelo estará valuada en promedio a un precio menor que la misma vivienda (junto con sus características) con menos ambientes. Así, por ejemplo, el barrio más caro de Buenos Aires, Puerto Madero, adiciona en nuestro modelo al precio de la vivienda más de 250 mil USD, manteniendo constantes el resto de las variables.
Análisis de variables categóricas:
Las variables categóricas (“tipo de propiedad” y “Barrio” o l3) se abren como nuevas variable dummys (que pueden valer 1 o 0) para cada posibilidad de nivel categórico. Vale aclarar que en todos los casos categóricos un nivel siempre cumplirá el rol basal, esto es, que no veremos un coeficiente para esta categoría y que todos los otros coeficientes estarán expresando su movimiento relativo a la categoría basal. En el caso del tipo de propiedad, el caso basal es Casa, con lo cual vemos los coeficientes de PH y departamento.El coeficiente de ambos es significativo e igual a 46.779 USD y 92.653 USD, respectivamente. Es decir, que si una propiedad se corresponde con PH, el coeficiente Dpto valdrá cero y PH 1. Con lo cual, sus valores nos indican que, ante todo el resto invariante, si una vivienda es Dpto, el valor del precio predicho se incrementará respecto a los valores de una casa en mayor medida que en los casos de PH. De forma análoga pero con muchos más niveles, el factor del barrio puede afectar ajustando el valor de una propiedad positivamente o negativamente respecto a la catagoría basal “Abasto”. Es decir, que los barrios menos exclusivos (generalmente en el sur de la ciudad) como Lugano, la Boca, etc. tienen coeficientes de considerable tamaño, negativos (o sea que tienen un menor valor al relativo a Abasto) y son significativos en términos de su p-valor. Las variables Dummy que no son significativas se corresponden con aquellos barrios en los cuales su coeficiente es chico o se acerca a al nivel basal, esto es, que es dificil saber con precisión si su presencia conlleva un aumento o una descenso del valor de la propiedad respecto al barrio de Abasto.
Creamos un modelo en el que excluye la variable explicativa Barrio
modelo1=lm(price~rooms+bathrooms+surface_total+surface_covered+property_type,data=df)
summary(modelo1)
Call:
lm(formula = price ~ rooms + bathrooms + surface_total + surface_covered +
property_type, data = df)
Residuals:
Min 1Q Median 3Q Max
-518799 -36177 -9643 25740 724251
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -131096.86 2750.50 -47.66 <2e-16 ***
rooms -13348.53 519.02 -25.72 <2e-16 ***
bathrooms 42664.68 756.37 56.41 <2e-16 ***
surface_total 877.03 27.59 31.79 <2e-16 ***
surface_covered 1783.80 33.53 53.21 <2e-16 ***
property_typeDepartamento 135177.47 2513.93 53.77 <2e-16 ***
property_typePH 68598.52 2677.46 25.62 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 79210 on 45897 degrees of freedom
Multiple R-squared: 0.6832, Adjusted R-squared: 0.6831
F-statistic: 1.649e+04 on 6 and 45897 DF, p-value: < 2.2e-16
En el modelo sin barrios todos los coeficientes son significativos. Respecto a los coeficientes, todos mantienen sus signos, aunque en el caso de los ambientes o “rooms” el descenso por unidad aumento de casi 4 mil USD a algo más de 13 mil USD. De forma parecida, pero en positivo, los incrementos asociados a los baños pasaron de 34mil USD a 42,6 mil USD. A su vez el valor del metro cuadrado cubierto, mientras en el modelo anterior crecía a una razon de USD 1457, ahora lo hace en USD 1783. El metro cuadrado total pasó de 919 USD a 877USD. Todo ello implica que el metro cuadrado cubierto completo paso de 2.376 a 2.660. Podría intuirse que al no tener la variable explicativa del barrio, los incrementos y descensos resultante de ella pasan a intentar ser reflajadas con mayores (y menores) coeficientes según corresponda.
Medidas de evaluación del modelo:
Cuando en el primer TP hicimos modelos de regresión simple, la mejor variable (como superficie total) nos arrojó un R2 menor al 0,5. Es decir, que casi en un 50% la proporción de variabilidad de los precios de las viviendas nos quedaba explicada por el modelo de regresión (relativo a la variabilidad explicada simplemente por un promedio). Como al incorporar nuevas variables el R2 nunca puede reducirse (aunque las variables incluso tengan poco que ver con el problema), es que debe usarse el R2 ajustado por el numero de covariables explicativas incluidas en el modelo. En nuestro primer modelo de regresión multiple el valor de R2 ajustado es de 0,776 lo que nos da una idea de que la proporción de variabilidad explicada se incremento en buena medida respecto al TP1. La segunda regresión múltiple sin el barrio, reduce el R2 ajustado a 0,683. Como esta medida esta ajustada por la variable que falta, podemos afirmar que el modelo con los barrios tiene una mayor proporción de variabilidad explicada en el precios de las viviendas respecto a evaluarlo solo la una media.
#Simplificar este código
vector1=c('Dpto_Abasto','Abasto',4,2,120,120,0,'Departamento')
vector2=c('PH_Balvanera','Balvanera',3,2,80,100,0,'PH')
df_test=rbind(df[1,],vector1,vector2)
df_test$rooms=as.numeric(df_test$rooms)
df_test$bathrooms=as.numeric(df_test$bathrooms)
df_test$surface_total=as.numeric(df_test$surface_total)
df_test$surface_covered=as.numeric(df_test$surface_covered)
df_test$price=as.numeric(df_test$price)
df_test=df_test[2:3,]
prediccion=predict(modelo0,df_test)
print(df_test)
1 2
320635.2 188027.3
Creo dos vectores emulando las características de la casa de abasto (1) y la casa de Balvanera (2) y predigo su valor de acuerdo al modelo creado anteriormente. Independientemente de si en el mercado una opción se vende (más rapido) o no y teniendo únicamente en cuenta el valor de la propiedad, de acuerdo con el modelo, el precio del dpto en el Abasto rondaría los 320 mil dólares mientras que PH en Balvanera estaría cerca de los 188 mil dólares. Con lo cual convendría el primero para vender.
Para poder clasificar los barrio en “alto” “medio” y “bajo”, calculo el precio por metro cuadrado total promedio por barrio.
df=df %>%
mutate(precio_M_cuadrado=price/surface_total)
precioXbarrio=df %>%
# select(l3,precio_M_cuadrado) %>%
group_by(l3) %>%
summarise(precio_M_cuadrado_promedio=mean(precio_M_cuadrado))
print(summary(precioXbarrio))
l3 precio_M_cuadrado_promedio
Length:57 Min. :1093
Class :character 1st Qu.:2062
Mode :character Median :2204
Mean :2358
3rd Qu.:2579
Max. :5472
Ahora, simplemente ordenamos de menor a mayor los precios por metro cuadrados promedio de cada barrio.
ggplot(precioXbarrio,mapping=aes(x=fct_reorder(l3,precio_M_cuadrado_promedio,.desc = F),y=precio_M_cuadrado_promedio))+
geom_point()+
theme_bw()+
theme(axis.text.x = element_text(angle = 90),plot.title = element_text(hjust = 0.5),plot.subtitle = element_text(hjust = 0.5))+
geom_hline(yintercept = 2062,col="blue")+
geom_hline(yintercept = 2579,col="red")+
labs(title = "Precio promedio por M2 de viviendas por barrio",subtitle = "1er cuartil (azul) = 2.062USD // 3er cuartil (rojo) = 2.579USD")+
xlab("Barrio")+
ylab("Precio prom. por metro cuadrado")
Como se puede observar el 50% de los barrios se encuentran en un rango menor de precio promedio por metro cuadrado al 25% de los barrios con precios mas altos y mas bajos. Por este motivo se propone interpretar como “alto” al 25% de los barrios con los mayores precios por metro cuadrado promedio y como “bajo” al 25% de los de menor precio. Es decir, que como utilizaremos esta etiqueta para captar variabilidad del precio de las viviendas en un futuro modelo, entiendo que tomar proporciones de barrios iguales reduciría mucho el efecto de la etiqueta “media” en su capacidad de predecir un precio de una vivienda. No está de más aclarar que esta división no puede mantener dichas proporciones a la hora de analizar a nivel de viviendas ya que cada barrio tiene cantidades de casas en venta distintas.
Incorporamos una columna con “alto” “medio” y “bajo” en función de si superan el Cuartil 3 o estan por debajo del cuartil 1.
df2=df %>%
group_by(l3=as.factor(l3)) %>%
mutate(mediadelbarrio=mean(price/surface_total)) %>%
ungroup() %>%
mutate(Q1=2062,Q3=2579) %>%
transmute(l3,barrios=as_factor(case_when(
mediadelbarrio<Q1~"Bajo",
mediadelbarrio>Q3~"Alto",
TRUE~"Medio")))
df3=cbind(df,df2)
Procedemos entonces a realizar el modelo de regresión lineal multiple con nuestra nueva variable “barrios”.
modelo2=lm(price~rooms+bathrooms+surface_total+surface_covered+property_type+barrios,data=df3)
summary(modelo2)
Call:
lm(formula = price ~ rooms + bathrooms + surface_total + surface_covered +
property_type + barrios, data = df3)
Residuals:
Min 1Q Median 3Q Max
-434681 -37269 -5344 25482 698983
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -154183.93 2757.84 -55.91 <2e-16 ***
rooms -8747.45 477.91 -18.30 <2e-16 ***
bathrooms 36466.47 696.08 52.39 <2e-16 ***
surface_total 877.73 25.31 34.67 <2e-16 ***
surface_covered 1641.81 30.76 53.37 <2e-16 ***
property_typeDepartamento 103741.18 2333.65 44.45 <2e-16 ***
property_typePH 54097.47 2459.08 22.00 <2e-16 ***
barriosAlto 87378.78 1539.32 56.77 <2e-16 ***
barriosMedio 25199.05 1546.42 16.30 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 72540 on 45895 degrees of freedom
Multiple R-squared: 0.7343, Adjusted R-squared: 0.7342
F-statistic: 1.585e+04 on 8 and 45895 DF, p-value: < 2.2e-16
Lo que se observa de nuestro tercer modelo (2) es que resulta considerablemente más parecido al modelo con los barrios (modelo0) que al modelo eliminando dicha variable (modelo1). Es decir, el coeficiente de “baño” es 36 mil USD cuando en el modelo0 era de 34 mil, el coeficiente de superficie total era de aproximadamente 900 USD y ahora es de 877 USD, mientras que superficie cubierta era de 1457USD y ahora es de 1641USD (mas alto pero menos a los casi 1800USD del modelo1 sin barrios). En el mismo sentido, el factor “departamento” que sumaba 93 mil USD por sobre el caso basal de Casa en el modelo0 y 135 mil USD en el modelo1 (sin barrios) ahora suma 87 mil (similar al mejor modelo0) e igual con el factor “PH” 47 mil USD en el modelo0 y 69 mil en el modelo1 y ahora 54 mil USD. Los barrios de “alto valor por metro cuadrado promedio” incorporan en nuestro modelo2 de predicción de precio de vivienda, si mantenemos todas las otras variables constante, casi 87 mil USD al valor que tendría una vivienda en un barrio caratulado de “bajo”. Los barrios “medios” adicionarían 25 mil USD en el modelo respecto a los bajos.
En el modelo0 (con l3), el R ajustado es de 0,776 mientras que en el modelo con barrio dicho valor es de 0,734. El primer modelo tiene una diferencia ligeramente superior en la proporción de la variabilidad explicada por el modelo lineal sobre la total. La ventaja que observo del modelo con barrio es que con una importante reducción y simplificación del modelo (gracias a la reducción de más de 50 variables dummys) su R ajustado casi no sufrió una caída considerable. Considero que el primer modelo tiene una diferenciación barrio a barrio que permite, adicionalmente a todo el análisis que realizamos, hacer otro tipo de evaluación como el de registrar si hay movimientos relativos entre los barrios. Esto es, si un barrio está encareciendose o abaratándose en relación a otros.
Incorporo una variable de “superficie descubierta” como la resta de los metros totales menos los metros cubiertos.
Si algun registro contuviera valores de superficie cubierta mayor que la total, eso nos estaría indicando un error en la carga de la información. Ese error podría provenir de una carga erronea en la superficie total o en la cubierta o en ambas. Si no tuvieramos forma de averiguarlo y si fueran pocos casos, sería recomendable eliminar los registros por ser poco confiables.
Como vemos, no existe ningún registro con superficie descubierta menor que cero. Todos los registros tienen coherencia.
MODELO LINEAL con la nueva variable “surface_patio”:
modelo3=lm(price~rooms+bathrooms+surface_covered+property_type+barrios+surface_patio,data=df3)
summary(modelo3)
Call:
lm(formula = price ~ rooms + bathrooms + surface_covered + property_type +
barrios + surface_patio, data = df3)
Residuals:
Min 1Q Median 3Q Max
-434681 -37269 -5344 25482 698983
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -154183.93 2757.84 -55.91 <2e-16 ***
rooms -8747.45 477.91 -18.30 <2e-16 ***
bathrooms 36466.47 696.08 52.39 <2e-16 ***
surface_covered 2519.54 16.22 155.31 <2e-16 ***
property_typeDepartamento 103741.18 2333.65 44.45 <2e-16 ***
property_typePH 54097.47 2459.08 22.00 <2e-16 ***
barriosAlto 87378.78 1539.32 56.77 <2e-16 ***
barriosMedio 25199.05 1546.42 16.30 <2e-16 ***
surface_patio 877.73 25.31 34.67 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 72540 on 45895 degrees of freedom
Multiple R-squared: 0.7343, Adjusted R-squared: 0.7342
F-statistic: 1.585e+04 on 8 and 45895 DF, p-value: < 2.2e-16
En este ejercicio, en el que se quitó la superficie total y se agregó surface_patio, podemos volver a reafirmar las conclusiones obtenidas en el primer modelo0. Esto es, que necesariamente así como el metro cuadrado cubierto era la suma del cubierto y total (ya que no pueden separarse), el “total” tenía que representar al metro cuadrado descubierto. Esto se confirma ya que el modelo 3 y 2 son exactamente iguales.
Calculamos los residuos
# res <- broom::augment(modelo3,df3)
# ggplot(res,aes(.fitted,.resid))+
# geom_point()+
# theme_bw()+
# theme(plot.title = element_text(hjust = 0.5),plot.subtitle = element_text(hjust = 0.5))+
# geom_hline(yintercept = 0)+
# geom_smooth(se=FALSE)+
# labs(title = "Errores de modelo3 de regresión multiple",subtitle = "Tendencia en linea azul")+
# xlab("predicción")+
# ylab("residuos")
plot(modelo3)
Para chequear que los supuestos del modelo de regresión lineal multiple se cumplen, se realizaron los precedentes gráficos. En el primer gráfico (redisual vs Fitted) lo que se observa es que los residuos contra los valores predichos estan centrados en torno al cero, cosa que en gran medida se verifica si se observa la linea roja, salvo para valores predichos pequeños.Ello refleja que no se observa una correlación importante entre los errores, es decir que no se nota una tendencia o comportamiento claro.
En cuando a la homogeneidad de la varianza de los errores se destaca que no se observa una nube de puntos uniforme, sino que se incrementa en valores predichos medios y vuelve a reducirse en valores grandes. Ello reflejaría un problema de heterocedasticidad de los residuos violando uno de los supuestos necesarios para poder confiar en nuestro modelo de regresión multiple.
El segundo gráfico (normal Q-Q) detalla en qué medida la distribución de los errores se ajustan a una distribución normal (graficada como una recta de pendiente positiva). El problema que vemos es que los errores en sus extremos no se ajustan a una distribución normal, lo que genera otro problema para los supuestos del modelo3.
La transformación logarítmica es una forma de transformar relaciones exponenciales en relaciones lineales sin alterar el comportamiento intrinseco de las variables. Por eso aplicamos estas transformaciones a las variables numéricas.
Call:
lm(formula = log(price) ~ log(rooms) + log(bathrooms) + log(surface_covered) +
property_type + barrios + surface_patio, data = df3)
Residuals:
Min 1Q Median 3Q Max
-1.29710 -0.15116 -0.00538 0.13944 1.38298
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 8.163e+00 1.943e-02 420.161 <2e-16 ***
log(rooms) -4.737e-02 3.914e-03 -12.103 <2e-16 ***
log(bathrooms) 1.819e-01 3.951e-03 46.034 <2e-16 ***
log(surface_covered) 8.201e-01 4.596e-03 178.429 <2e-16 ***
property_typeDepartamento 2.379e-01 7.490e-03 31.759 <2e-16 ***
property_typePH 7.122e-02 7.927e-03 8.985 <2e-16 ***
barriosAlto 4.451e-01 5.013e-03 88.779 <2e-16 ***
barriosMedio 1.685e-01 5.036e-03 33.460 <2e-16 ***
surface_patio 3.892e-03 8.262e-05 47.104 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.2362 on 45895 degrees of freedom
Multiple R-squared: 0.8079, Adjusted R-squared: 0.8078
F-statistic: 2.412e+04 on 8 and 45895 DF, p-value: < 2.2e-16
Lo primero a destacar del nuevo modelo, es que el R2 ajustado se eleva de 0.73 del modelo3 a 0.808 en el modelo4 lo que nos indica que es el modelo que mayor asociación lineal presenta entre las X y las Y. Para interpretar nuestro nuevo modelo debemos ser concientes que aplicamos la transformación tanto a nuestra variable dependiente precio como a las independientes, por lo que nuestro modelo será log-log (Wooldridge, J.M (2006) pg. 46). En este sentido, el coeficiente de log(room) es de -0,0473 por lo que podemos decir que una variación de un 1% (positivo) en la cantidad de ambientes afectará (negativamente) en -0,0473% por ciento en el precio predicho por el modelo, ante todas las otras variables constantes. Por su partes variaciones de 1% en baños, superficie cubierta y descubierta generaran en nuestro modelo4 variaciones en el precio de 0,1819%, 0,8201% y 0,004%, respectivamente. Para el caso de las variables categóricas, como no se aplicó transformación en la variable independiente, el modelo es Log-nivel lo que nos requiere multiplicar por 100 los coeficientes para ver los cambios porcentuales del precio. Así, si la vivienda es un departamento se incrementará casi un 24% en el precio predicho por sobre las “Casas” o bien un 7% si fuese PH. Barrios rotulados como “alto” adicionan un 44% al precio predicho sobre el nivel de “Bajo” y 16% si es “medio”.
Si repetimos el análisis en materia de residuos con el nuevo modelo obtenemos los siguientes resultados.
Podemos observar que el modelo con las transformaciones logarítmicas ha mejorado considerablemente el problema de heterocedasticidad presente en el modelo3. Esto se observa en el primer gráfico en una mejoría en las homogeneidad relativa de los errores para los valores predichos (fitted values) pequeños y grandes. A su vez también se ve en el QQ plot que los datos se ajustan mucho mejor a la linea de normalidad.
En primer lugar agrupamos los datos por tipo de propiedad
Ahora creamos una función para iterar el modelo4 en los distintos tipos de propiedad
Error in eval(predvars, data, env) : object 'barrios' not found
Corremos la función para cada una de los tipos de propiedades
modelos_por_tipo_propiedad <- modelos_por_tipo_propiedad %>%
mutate(model=map(modelos_por_tipo_propiedad$data,funcion_modelo4))
observamos los resultados:
library("broom")
modelos_por_tipo_propiedad %>%
mutate(glnc=map(modelos_por_tipo_propiedad$model,glance)) %>%
unnest(glnc,.drop=TRUE)
Respecto a los tres modelos, en primer lugar se puede descartar que todos los coeficientes de las variables sean nulos ya que el p-valor resulta significativo. Como los tres modelos son iguales, es decir, que no es necesario ajustar por el número de variables, miramos el valor de R2. En el caso de los “departamentos” se registra la mejor proporción de variabilidad explicada por el modelo, alcanzando un 0.82. Este caso es el único que supera al modelo4. Para Casa y PH el R2 es de 0.65 y 0.72.
Al revisar los coeficientes (todos ellos significativos) de cada modelo se observa mucha similitud en todos los parametros con la salvedad que para el tipo “departamento” se observan algunas particularidades. Asi, por ejemplo, mientras que ante cambios de un 1% en log(room), se prevee un cambio en el precio predicho tanto para Casa como PH de 0,08%, para “departamento” es de -0,07%. Los cambios en el precio predicho por cambios en la superficie cubierta de Casa y PH es de 0,56% y 0,58% mientras que para departamento es de 0,86%. Lo mismo ocurre con la superficie descubierta.
-Wooldridge, J.M (2006). Introducción a la econometría: un enfoque moderno. Editorial Paraninfo.