Ejercicio 1: Regresión lineal múltiple

a) Crear un modelo para predecir el precio con todas las covariables.
library(tidyverse)
dataset<-readRDS("ar_properties.rds")
Modelo_1<-lm(price ~ l3+rooms+bathrooms+surface_total+surface_covered+property_type, data = dataset)

b) Analizar los resultados del modelo:

Al aplicar un modelo lineal sobre todas las variables que se tienen se observan que el modelo contiene 63 parámetros, de los cuales 50 resultaron significativos (p values menor o igual a 0.05).
Para la interpretación de los parámetros, por ejemplo para la variable rooms:

  • El precio de las propiedades aumenta en promedio 34040.98 ante incrementos unitarios de la variable “bathrooms” cuando las demás variables permanecen constantes en el modelo.
  • El precio de las propiedades aumenta en promedio 623.53 cuando la propiedad se encuentra en Agronomía, que en barrio Abasto, permaneciendo las otras variables constantes.

Por otro lado se observó un R cuadrado ajustado igual a 0.7761. y también se obtuvo que el modelo resulto estadísticamente significativo (F=2568 Y PValue<=0.05).

summary(Modelo_1)
## 
## Call:
## lm(formula = price ~ l3 + rooms + bathrooms + surface_total + 
##     surface_covered + property_type, data = dataset)
## 
## 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 ***
## 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 ***
## 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 ***
## ---
## 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
length(Modelo_1$coefficients)
## [1] 63

Para analizar la significatividad de las variables dummy se recurre a aplicar anova al modelo.En el se realiza el test de hipótesis de si la diferencia de medias de los precios en cada grupo es la misma o difiere. En el mismo podemos observar que todas las variables resultan significativas al 5%. Es decir, que la variable l3 afecta al precio en al menos uno de sus grupos.

anova(Modelo_1)
## Analysis of Variance Table
## 
## Response: price
##                    Df     Sum Sq    Mean Sq  F value    Pr(>F)    
## l3                 56 1.8443e+14 3.2934e+12   742.95 < 2.2e-16 ***
## rooms               1 3.0174e+14 3.0174e+14 68067.54 < 2.2e-16 ***
## bathrooms           1 9.7588e+13 9.7588e+13 22014.36 < 2.2e-16 ***
## surface_total       1 9.6762e+13 9.6762e+13 21827.91 < 2.2e-16 ***
## surface_covered     1 1.2667e+13 1.2667e+13  2857.40 < 2.2e-16 ***
## property_type       2 1.2491e+13 6.2453e+12  1408.85 < 2.2e-16 ***
## Residuals       45841 2.0321e+14 4.4329e+09                       
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

c) ¿Qué es preferible tener para vender?

Es preferible vender “un departamento de 120 mts cuadrados cubiertos en abasto, con 3 dormitorios y 2 baños ya que el valor estimado del precio de venta es mayor.

Propuesta_1 <- predict(Modelo_1, 
    newdata = data.frame(l3 = "Abasto", rooms = 3, bathrooms=2, surface_total=120,  surface_covered=120, property_type="Departamento"), se.fit = FALSE)
Propuesta_2 <- predict(Modelo_1, 
    newdata = data.frame(l3 = "Balvanera", rooms = 2, bathrooms=3, surface_total=100,  surface_covered=80, property_type="PH"), se.fit = FALSE)

c(Propuesta_1,
Propuesta_2)
##        1        1 
## 324596.4 215267.6

d) Realizar un modelo sin la covariable l3 e interpretar sus resultados (todas las partes de la salida que consideren relevantes)

Al realizar dicho modelo se observó que todas las variables resultaron significativas al 5%. Por otro lado se encontró que el R cuadrado ajustado de 0.6831. El modelo resultó significativo (F=1.649e+04 Y P_asociada=2.2e-16<0.05) El precio de las propiedades es en promedio 42664.68 ante incrementos unitarios en la variable bathrooms, cuando las dem?s variables permanecen constantes.

Modelo_2<-lm(price ~ rooms+bathrooms+surface_total+surface_covered+property_type, data = dataset)
summary(Modelo_2)
## 
## Call:
## lm(formula = price ~ rooms + bathrooms + surface_total + surface_covered + 
##     property_type, data = dataset)
## 
## 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

e) ¿Cuál es el modelo que mejor explica la variabilidad del precio?

El mejor modelo que ajusta a los datos es el primero ya que se obtiene un R cuadrado ajusstado superior al segundo


Ejercicio 2: Creación de variables

a) En el ejercicio anterior encontramos que algunos barrios son significativos, aunque no todos. Crear una nueva variable barrios que divida a los barrios según el precio por metro cuadrado promedio de las propiedades en ellos, con los grupos c(‘alto’, ‘medio’, ‘bajo’). Realizar un análisis exploratorio para definir los puntos de corte de la nueva variable y explicar los criterios utilizados en la construcción de la misma.

Para crear los grupos Bajo, medio y alto se analizaron los precios promedios por barrio. En el se observan que tiene una distribución asimétrica hacia la derecha

library(scales)
## 
## Attaching package: 'scales'
## The following object is masked from 'package:purrr':
## 
##     discard
## The following object is masked from 'package:readr':
## 
##     col_factor
dataset%>%
  group_by(l3)%>%
  summarise(Precio_prom=mean(price,na.rm=TRUE))%>%
  # ggplot()+
  # aes(Precio_prom)+
  # geom_histogram(bins = 20,col="blue", 
  #                fill="blue", 
  #                alpha = .2)+
  # scale_x_continuous(labels = comma)+
  # theme_minimal()%>%
  summary(Precio_prom)
##       l3             Precio_prom    
##  Length:57          Min.   :115106  
##  Class :character   1st Qu.:144323  
##  Mode  :character   Median :164325  
##                     Mean   :184638  
##                     3rd Qu.:194193  
##                     Max.   :512831
dataset%>%
  group_by(l3)%>%
  summarise(Precio_prom=mean(price,na.rm=TRUE))%>%
  ggplot()+
  aes(Precio_prom)+
  geom_histogram(bins = 20,col="blue",
                 fill="blue",
                 alpha = .2)+
  scale_x_continuous(labels = comma)+
  theme_minimal()

  # summary(Precio_prom)
  # arrange(-Precio_prom)

En base a lo observado, para definir los grupos se decidecortar la variable precios de la siguiente manera:
* Bajos: precios <=160000
* Medios:entre 160000 y 300000
* Altos: Mayores a 300000

dataset_barrio<-dataset%>%
  group_by(l3)%>%
  summarise(Precio_prom=mean(price,na.rm=TRUE))%>%
  mutate(Grupo_barrio=case_when(Precio_prom<=160000~"Bajo",
                                Precio_prom>160000 & Precio_prom<=300000~"Medio",
                                Precio_prom>250000~"Alto"))%>%
  select(l3,Grupo_barrio)

La nueva variable queda compuesta de la siguiente forma:

dataset<-dataset%>%
  left_join(dataset_barrio,by="l3")%>%
  select(-l3)
head(dataset)  
## # A tibble: 6 x 8
##   id    rooms bathrooms surface_total surface_covered  price property_type
##   <chr> <dbl>     <dbl>         <dbl>           <dbl>  <dbl> <chr>        
## 1 Afdc~     3         2            95              69 199900 Casa         
## 2 ESzy~     1         1            44              38 147000 Departamento 
## 3 r22O~     1         1            40              37  92294 Departamento 
## 4 atZQ~     1         1            49              44 115000 Departamento 
## 5 R7Is~     1         1            40              37  77000 Departamento 
## 6 Tur/~     1         1            40              37  88900 Departamento 
## # ... with 1 more variable: Grupo_barrio <chr>
table(dataset$Grupo_barrio)
## 
##  Alto  Bajo Medio 
##  3327 10187 32390

b) Calcular el modelo que predice el precio en función de las nuevas covariables e interpretar sus resultados (todas las partes de la salida que consideren relevantes)

Al aplicar el nuevo modelo se observa que todos los parametros resultaron significativos al 5%. Se obtuvo un R cuadrado ajustado de 0.7176. El ajuste del modelo resultó significativo.
Interpretación de parametros:
* Superficie total: En promedio el precio de las propiedades aumenta 884.38 a medida que hay incrementos unitarios en lavarile superficie total, permaneciendo constantes las otras variables. * Grupo_barrioBajo: En promedio el precio de las propiedades disminuye -108906.78 cuando la propiedad se encuentra en un barrio con precios bajos que para las propiedades que se encuentran en barrios con precios altos, permaneciendo constantes las otras variables.

Modelo_3<-lm(price ~ rooms+bathrooms+surface_total+surface_covered+property_type+Grupo_barrio, data = dataset)
summary(Modelo_3)
## 
## Call:
## lm(formula = price ~ rooms + bathrooms + surface_total + surface_covered + 
##     property_type + Grupo_barrio, data = dataset)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -491181  -36056   -6035   24570  658081 
## 
## Coefficients:
##                             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                -38313.81    3043.80  -12.59   <2e-16 ***
## rooms                      -10633.86     491.31  -21.64   <2e-16 ***
## bathrooms                   38987.45     716.79   54.39   <2e-16 ***
## surface_total                 884.38      26.10   33.89   <2e-16 ***
## surface_covered              1625.16      31.85   51.02   <2e-16 ***
## property_typeDepartamento  118106.68    2385.86   49.50   <2e-16 ***
## property_typePH             61677.83    2530.10   24.38   <2e-16 ***
## Grupo_barrioBajo          -108906.78    1538.84  -70.77   <2e-16 ***
## Grupo_barrioMedio          -63067.94    1389.47  -45.39   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 74780 on 45895 degrees of freedom
## Multiple R-squared:  0.7176, Adjusted R-squared:  0.7176 
## F-statistic: 1.458e+04 on 8 and 45895 DF,  p-value: < 2.2e-16

c) ¿Qué modelo explica mejor la variabilidad de los datos, el que utiliza la variable l3 o el que utiliza barrio? En su opinión, ¿Qué modelo es más útil? ¿Porqué?

El nuevo modelo obtuvo un R cuadrado de 0.71, mientras el que utilizaba todos los barrios obtuvo uno de 0.77. Es preferible utilizar el nuevo modelo ya que el valor de R cuadrado es parecido y estima menos parámetros.

d) La interpretación de los coeficientes de las variables surface_covered y surface_total puede ser un poco problemática ya que se encuentran correlacionadas. Entonces, podemos construir una nueva variable surface_patio para la diferencia entre ambas superficies:

Interpretación de parametros:
* surface_covered: En promedio el precio de las propiedades aumenta 2509.54 a medida que hay incrementos unitarios en la variable surface_covered, permaneciendo constantes las otras variables.
* surface_patio: En promedio el precio de las propiedades aumenta 884.38 a medida que hay incrementos unitarios en la variable surface_patio, permaneciendo constantes las otras variables.
Cabe mencionar, como se hizo una transformación en la variable surface_total y ahora la información que antes tenía surface_total esta contenida en la variable surface_patio, coeficiente de esete último es el mismo pero varió el coeficiente asociado a la variable surface_covered

dataset<-dataset %>%
  mutate(surface_patio=surface_total - surface_covered )

Modelo_4<-lm(price ~ rooms+bathrooms+surface_patio+surface_covered+property_type+Grupo_barrio, data = dataset)
summary(Modelo_4)
## 
## Call:
## lm(formula = price ~ rooms + bathrooms + surface_patio + surface_covered + 
##     property_type + Grupo_barrio, data = dataset)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -491181  -36056   -6035   24570  658081 
## 
## Coefficients:
##                             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                -38313.81    3043.80  -12.59   <2e-16 ***
## rooms                      -10633.86     491.31  -21.64   <2e-16 ***
## bathrooms                   38987.45     716.79   54.39   <2e-16 ***
## surface_patio                 884.38      26.10   33.89   <2e-16 ***
## surface_covered              2509.54      16.81  149.27   <2e-16 ***
## property_typeDepartamento  118106.68    2385.86   49.50   <2e-16 ***
## property_typePH             61677.83    2530.10   24.38   <2e-16 ***
## Grupo_barrioBajo          -108906.78    1538.84  -70.77   <2e-16 ***
## Grupo_barrioMedio          -63067.94    1389.47  -45.39   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 74780 on 45895 degrees of freedom
## Multiple R-squared:  0.7176, Adjusted R-squared:  0.7176 
## F-statistic: 1.458e+04 on 8 and 45895 DF,  p-value: < 2.2e-16

Ejercicio 3: Evaluación del modelo

a)

En primer lugar, podemos observar que los residuos se concentral al rededor del 0

library(modelr)
residuos<-dataset%>%
  add_residuals(Modelo_4)

# ggplot(data=residuos,aes(resid)) + 
#   geom_freqpoly(binwidth = 0.5)

mean(residuos$resid)
## [1] 4.243773e-08
ggplot(data=residuos,aes(resid)) + 
 geom_freqpoly()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

  • El primer gráfico se muestran los Residuos versus el modelo ajustado: en el mismo, se puede ver que a medida que aumentan los valores ajustados, los residuos se alejan del 0.

  • El segundo grafico es un QQ Plot Normal.: En el observamos la distribución teórica versus la de los residuos. En la misma podemos ver que se aleja de la distribución teóricas en las colas de la gráfica

  • Scale-location plot: Este grafico es similar al primero pero se grafica la raiz cuadrada de los residuos estandarizados. En ella vemos que no hay ningún patrón.

  • Scale vs leverage: El leverage mide cuan influyentes son los puntos en el modelo. Se observan algunos puntos alejados (en la derecha de la gráfica)

Por lo tanto podemos decir que no se cumple el supuesto de homocedasticidad, ni de normalidad de los residuos.

plot(Modelo_4)

b) Calcular el modelo:

Con el nuevo modelo se encontró que todos los parámetros son significativos al 5% Por otro lado se encontró un R cuadrado ajustado de 0.78, superior al encontrado anteriormente (0.71).

* Rooms (log): ante incrementos del 1% en las variable rooms, el precio de las propiedades disminuye en un 0.06%.
* Bathrooms (log): ante incrementos del 1% en las variable Bathrooms, el precio de las propiedades aumenta en un 0.2% * surface_patio: ante incrementos unitarios en la variable surface_patio, manteniendo el resto de las variables constantes, aumenta el precio en promedio de las propiedades en un 0.3%.

Modelo_5<-lm(log(price) ~ log(rooms)+log(bathrooms)+log(surface_covered)+property_type+Grupo_barrio+surface_patio,data = dataset)
summary(Modelo_5)
## 
## Call:
## lm(formula = log(price) ~ log(rooms) + log(bathrooms) + log(surface_covered) + 
##     property_type + Grupo_barrio + surface_patio, data = dataset)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.34489 -0.16274 -0.00398  0.15259  1.29089 
## 
## Coefficients:
##                             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                8.650e+00  2.176e-02  397.43   <2e-16 ***
## log(rooms)                -6.713e-02  4.192e-03  -16.01   <2e-16 ***
## log(bathrooms)             2.011e-01  4.233e-03   47.52   <2e-16 ***
## log(surface_covered)       8.205e-01  4.963e-03  165.34   <2e-16 ***
## property_typeDepartamento  3.210e-01  7.965e-03   40.30   <2e-16 ***
## property_typePH            1.155e-01  8.486e-03   13.61   <2e-16 ***
## Grupo_barrioBajo          -4.386e-01  5.220e-03  -84.03   <2e-16 ***
## Grupo_barrioMedio         -2.015e-01  4.710e-03  -42.78   <2e-16 ***
## surface_patio              3.766e-03  8.865e-05   42.48   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2534 on 45895 degrees of freedom
## Multiple R-squared:  0.7789, Adjusted R-squared:  0.7788 
## F-statistic: 2.02e+04 on 8 and 45895 DF,  p-value: < 2.2e-16

Al analizar los residuos del nuevo modelo se encuentra una mejora, ya que en el QQ Plot Normal, la distribución de los resduos del nuevo modelo se asemejan mejor a la distribución teórica. Y, por otro lado, el gráfico de los residuos versus los valores ajustados no muestra ningún patrón.

plot(Modelo_5)

Ejercicio 4: Dataframes anidados

Anidar por la variable property_type

dataset_anidado<-dataset%>%
  group_by(property_type)%>%
  nest()

Construir para cada tipo de propiedad el modelo de 2.d e interpretar los resultados en cada caso. Qué diferencias encuentran entre los distintos modelos?

Al ajustar un modelo para cada tipo de propiedad, se puede ver una clara diferencia en los R cuadrados ajustados, se obtuvo un r cuadrado ajustado de 0.749 para departamentos y uno de 0.482 para casas. Cabe mencionar que la cantidad de observaciones difiere bastante entre cada uno de los modelos.

library(broom)
## 
## Attaching package: 'broom'
## The following object is masked from 'package:modelr':
## 
##     bootstrap
Propiedad_modelo <- function(df) {
  lm(price ~ rooms+bathrooms+surface_patio+surface_covered+Grupo_barrio, data = df)
}

dataset_anidado<-dataset_anidado%>%
  mutate(model = map(data, Propiedad_modelo))

Resultados_anidados2 <- dataset_anidado %>% 
  mutate(Res = map(model, glance),
         tdy = map(model, tidy)) %>% 
  unnest(tdy, .drop=TRUE)

Resultados_anidados <- dataset_anidado %>% 
  mutate(Res = map(model, glance),
         tdy = map(model, tidy)) %>% 
  unnest(Res, .drop=TRUE)
Resultados_anidados
## # A tibble: 3 x 12
##   property_type r.squared adj.r.squared  sigma statistic   p.value    df
##   <chr>             <dbl>         <dbl>  <dbl>     <dbl>     <dbl> <int>
## 1 Casa              0.485         0.482 97360.      184. 3.34e-165     7
## 2 Departamento      0.749         0.749 72277.    20024. 0.            7
## 3 PH                0.607         0.607 60082.     1124. 0.            7
## # ... with 5 more variables: logLik <dbl>, AIC <dbl>, BIC <dbl>,
## #   deviance <dbl>, df.residual <int>

Por último, se puede observar que la variable rooms no resulta significativa en modelo para PH. Es decir el precio de las propiedades en los PH no depende de de la cantidad de habitaciones. Por otro lado, se puede observar como tambien esta variable rooms, toma signos distintos el coeficiente para casa y departament (en el modelo para CASA el coeficiente es positivo, mientras que para “Departamento” es negativo)

library(DT)
Resultados_anidados2%>% arrange(term)%>%select(1,2,3,6)%>%
  mutate(Es_significativa=ifelse(p.value<=0.05,"Si","No"))%>%
  datatable(selection = 'single',
            rownames = FALSE,
            escape = FALSE,
            extensions = 'Scroller',
            options = list(dom = 't',
                           scrollY = 500,
                           scroller = TRUE,
                           paging=TRUE,
                           autoWidth = TRUE,
                           columnDefs = list(list(width = '80px', className = 'dt-center',
                                                  targets = "_all"))))