Integrantes:

Mauricio Campos, Lorenzo Lorenzi y Rodrigo Mojica

P1

Instale el paquete de data.table, ggplot2 y caret y abra la base de datos que contiene la información de arriendos de airbnb de New York para el año 2019.

install.packages("data.table")
install.packages("ggplot2")
install.packages("caret")
library(data.table)
library(ggplot2)
library(caret)
library(readr)
Airbnb_2019<-fread("AB_NYC_2019.csv")

P2

Muestre en un gráfico de barras la oferta de arriendos para cada grupo de vecindario, es decir, cuántos departamentos/casas se arriendan por grupo de vecindario.

ggplot(data = Airbnb_2019,aes(x=neighbourhood_group))+geom_bar()

P3

Muestre con un scatter plot la relación entre el precio (eje x) y el número de visitas (eje y) según el tipo de habitación que se está arrendando. Pista: Recuerde la función facet_wrap.

ggplot(data=Airbnb_2019,aes(x=price,y=calculated_host_listings_count))+geom_point()+facet_wrap(facets = "room_type")

P4.a

Nuestro primer modelo de predicción será una regresión lineal simple que explique el precio de los arriendos de airbnb según el tipo de habitación. Pista: Recuerde que para las regresiones hay que transformar las variables character en variables categóricas.

Airbnb_2019[,nbhg:=as.factor(neighbourhood_group)]
Airbnb_2019[,nbh:=as.factor(neighbourhood)]
Airbnb_2019[,roomt:=as.factor(room_type)]
Regresion1<-lm(price~roomt,data = Airbnb_2019)
summary(Regresion1)
## 
## Call:
## lm(formula = price ~ roomt, data = Airbnb_2019)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -211.8  -59.8  -29.8    9.2 9910.2 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)        211.794      1.456  145.43   <2e-16 ***
## roomtPrivate room -122.013      2.130  -57.30   <2e-16 ***
## roomtShared room  -141.667      6.970  -20.32   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 232.1 on 48892 degrees of freedom
## Multiple R-squared:  0.06561,    Adjusted R-squared:  0.06558 
## F-statistic:  1717 on 2 and 48892 DF,  p-value: < 2.2e-16

P4.b

Interprete los coeficientes de su regresión anterior. ¿Son estadísticamente significativos?

*bo= 211,794. Este sería el valor del arriendo de un depto. si b1=0.

*b1=tendrá valores distintos,dependiendo del tipo de habitación (privada o compartida). En el caso de ser habitación compartida, el precio a pagar bajará en 141,667 unidades monetarias. Si es una habitación privada, el precio bajará 122,013 unidades monetarias. No aparece en caso de arrendar un depto completo, ya que con esta variable se está “relativizando”(es el punto de comparación). Este estimador es significativo (basta con mirar los tres asteriscos). Esto hace referencia a que el valor P es 2e-16, lo cual lo hace significativo al 1%

P4.c

Calcule el precio predicho para todas las observaciones de la muestra. E inclúyalo en la base original.

Airbnb_2019[,Predicción1:=predict(Regresion1,na.action = na.exclude())]

P4.d

Calcule los errores de predicción (RMSE y MAE) de nuestro modelo. Muestre sus resultados.

Predicciones<-data.table(RMSE=RMSE(Airbnb_2019[,Predicción1],Airbnb_2019[,price]),
                         MAE=MAE(Airbnb_2019[,Predicción1],Airbnb_2019[,price]))

P5.a

Nuestro segundo modelo de predicción será una regresión lineal múltiple que explique el precio de los arriendos de airbnb según el tipo de habitación, el número de visitas, la cantidad mínima de noches y el grupo de vecindario en el que se encuentra. No olvide mostrar los resultados Pista: Recuerde que para las regresiones hay que transformar las variables character en variables categóricas.

En esta pregunta, se asumirá que todas las personas que visitan el depto, dejan su reseña.

Regresion2<-lm(price~roomt+minimum_nights+nbhg+number_of_reviews,data=Airbnb_2019,na.action='na.exclude')
summary(Regresion2)
## 
## Call:
## lm(formula = price ~ roomt + minimum_nights + nbhg + number_of_reviews, 
##     data = Airbnb_2019, na.action = "na.exclude")
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -304.3  -63.1  -23.9   11.7 9920.1 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)    
## (Intercept)        165.92245    7.13445  23.257  < 2e-16 ***
## roomtPrivate room -110.94748    2.14630 -51.692  < 2e-16 ***
## roomtShared room  -134.82447    6.91878 -19.487  < 2e-16 ***
## minimum_nights       0.16007    0.05108   3.134  0.00173 ** 
## nbhgBrooklyn        21.23645    7.15621   2.968  0.00300 ** 
## nbhgManhattan       77.83906    7.16043  10.871  < 2e-16 ***
## nbhgQueens           9.29678    7.60385   1.223  0.22147    
## nbhgStaten Island   13.75862   13.79607   0.997  0.31863    
## number_of_reviews   -0.20908    0.02345  -8.915  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 229.9 on 48886 degrees of freedom
## Multiple R-squared:  0.08336,    Adjusted R-squared:  0.08321 
## F-statistic: 555.7 on 8 and 48886 DF,  p-value: < 2.2e-16

P5.b

Calcule el precio predicho para todas las observaciones de la muestra. E inclúyalo en la base original.

Airbnb_2019[,Predicción2:=predict(Regresion2,na.action = na.exclude())]

P5.c

Calcule los errores de predicción (RMSE y MAE) de nuestro modelo. Muestre sus resultados.

Predicciones2<-data.table(RMSE=RMSE(Airbnb_2019[,Predicción2],Airbnb_2019[,price]),
                         MAE=MAE(Airbnb_2019[,Predicción2],Airbnb_2019[,price]))

P6

Interprete la diferencia en los errores de predicción entre el Modelo 1 y el Modelo 2.

La diferencia entre los errores de predicción entre los modelos 1 y 2, vienen dado a que el efecto se “diluye” a medida que se le agregan más variables que son significantes en el modelo. Esto provoca que la predicción se logre apegar cada vez más a la realidad, logrando así la disminución de los errores.

P7

Proponga un modelo de predicción (distinto a los anteriores) que le permita predecir el precio de los arriendos de airbnb y calcule precio predicho para todas las observaciones.

Regresion3<-lm(price~roomt+nbhg+minimum_nights+availability_365+number_of_reviews,data = Airbnb_2019,na.action ='na.exclude') 
summary(Regresion3)
## 
## Call:
## lm(formula = price ~ roomt + nbhg + minimum_nights + availability_365 + 
##     number_of_reviews, data = Airbnb_2019, na.action = "na.exclude")
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -265.6  -63.7  -22.7   15.9 9961.3 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)    
## (Intercept)        1.397e+02  7.196e+00  19.415  < 2e-16 ***
## roomtPrivate room -1.109e+02  2.136e+00 -51.918  < 2e-16 ***
## roomtShared room  -1.440e+02  6.897e+00 -20.877  < 2e-16 ***
## nbhgBrooklyn       3.292e+01  7.140e+00   4.611 4.03e-06 ***
## nbhgManhattan      8.757e+01  7.138e+00  12.268  < 2e-16 ***
## nbhgQueens         1.326e+01  7.568e+00   1.752   0.0797 .  
## nbhgStaten Island  7.864e+00  1.373e+01   0.573   0.5668    
## minimum_nights    -2.811e-02  5.153e-02  -0.545   0.5855    
## availability_365   1.814e-01  8.174e-03  22.192  < 2e-16 ***
## number_of_reviews -3.071e-01  2.375e-02 -12.930  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 228.8 on 48885 degrees of freedom
## Multiple R-squared:  0.0925, Adjusted R-squared:  0.09234 
## F-statistic: 553.7 on 9 and 48885 DF,  p-value: < 2.2e-16
Airbnb_2019[,Predicción3:=predict(Regresion3,na.action = na.exclude())]

P8

Ahora realice k folds CV para comparar su modelo con el de la pregunta 5. Muestre los resultados de errores en la predicción y determine cuál modelo es más conveniente en base al error de predicción. Utilice k=9 y set.seed(12345)

set.seed(12345)
setupKCV<-trainControl(method = "cv",number = 9)
predkfolds2<-train(price~roomt+minimum_nights+nbhg+number_of_reviews,data=Airbnb_2019,na.action='na.exclude',method="lm",trControl=setupKCV)
predkfolds3<-train(price~roomt+nbhg+minimum_nights+availability_365+number_of_reviews,data = Airbnb_2019,na.action ='na.exclude',method="lm",trControl=setupKCV)
print(predkfolds2)
## Linear Regression 
## 
## 48895 samples
##     4 predictor
## 
## No pre-processing
## Resampling: Cross-Validated (9 fold) 
## Summary of sample sizes: 43462, 43463, 43462, 43462, 43462, 43463, ... 
## Resampling results:
## 
##   RMSE      Rsquared    MAE     
##   226.7153  0.09033125  73.70971
## 
## Tuning parameter 'intercept' was held constant at a value of TRUE
print(predkfolds3)
## Linear Regression 
## 
## 48895 samples
##     5 predictor
## 
## No pre-processing
## Resampling: Cross-Validated (9 fold) 
## Summary of sample sizes: 43462, 43462, 43461, 43462, 43461, 43464, ... 
## Resampling results:
## 
##   RMSE     Rsquared  MAE     
##   226.618  0.097714  73.97165
## 
## Tuning parameter 'intercept' was held constant at a value of TRUE

El modelo 2, presenta un MAE de 73,70971 y un RMSE de 226,7153. Por otro lado, el modelo 3 presenta un MAE de 73,97165 y un RMSE de 226,618. Las diferencias entre el RMSD (modelo 2 con el 3) es de 0,0973, mientras que la diferencia del MAE (modelo 2 con el 3) es de -0,26194. Las diferencias no son muy significativas, por ende la elección del mejor modelo van a depender del peso que le de el evaluador a los distintos valores de las predicciones.