Actividad 6

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("ggplot2")
install.packages("data.table")
install.packages("caret")
library("ggplot2")
library("data.table")
library("caret")
Arriendos<-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=Arriendos,aes(x=neighbourhood_group))+
  geom_bar()+labs(x="Grupos de Vecindario", y="Cantidad de Arriendos", title = "Cantidad de Arriendos", subtitle = "Por grupo de vecindario", caption = "Fuente: Arriendos de Airbnb New York 2019" )

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=Arriendos,aes(x=price,y=number_of_reviews))+
  geom_point()+ facet_wrap("room_type")+labs(x="Precio", y="Cantidad de visitas", title= "Price Ratio",subtitle = "Relación entre el Precio y el Número de Visitas según tipo", caption = "Fuente: Arriendos de Airbnb New York 2019" )

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.

Arriendos[,roomt_:=as.factor(room_type)]

reg<-lm(data=Arriendos,formula =price~roomt_)
summary(reg)
## 
## Call:
## lm(formula = price ~ roomt_, data = Arriendos)
## 
## 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 ***
## roomt_Private room -122.013      2.130  -57.30   <2e-16 ***
## roomt_Shared 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?

  • si, debido a que el p-value es menor a 0,05.

P4.c

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

Arriendos[,pred:=predict(reg,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(Arriendos[,pred],Arriendos[,price]),MAE=MAE(Arriendos[,pred],Arriendos[,price]))

print(Predicciones)
##        RMSE      MAE
## 1: 232.1394 75.89648

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.

Arriendos[,roomt_:=as.factor(room_type)]
Arriendos[,ngrp_:=as.factor(neighbourhood_group)]

reg1<-lm(data=Arriendos,formula =price~roomt_+number_of_reviews+minimum_nights+ngrp_)
summary(reg1)
## 
## Call:
## lm(formula = price ~ roomt_ + number_of_reviews + minimum_nights + 
##     ngrp_, data = Arriendos)
## 
## 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 ***
## roomt_Private room -110.94748    2.14630 -51.692  < 2e-16 ***
## roomt_Shared room  -134.82447    6.91878 -19.487  < 2e-16 ***
## number_of_reviews    -0.20908    0.02345  -8.915  < 2e-16 ***
## minimum_nights        0.16007    0.05108   3.134  0.00173 ** 
## ngrp_Brooklyn        21.23645    7.15621   2.968  0.00300 ** 
## ngrp_Manhattan       77.83906    7.16043  10.871  < 2e-16 ***
## ngrp_Queens           9.29678    7.60385   1.223  0.22147    
## ngrp_Staten Island   13.75862   13.79607   0.997  0.31863    
## ---
## 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.

Arriendos[,pred2:=predict(reg1,na.action = na.exclude)]

P5.c

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

Predicciones1<-data.table(RMSE=RMSE(Arriendos[,pred2],Arriendos[,price]),MAE=MAE(Arriendos[,pred2],Arriendos[,price]))

print(Predicciones1)
##        RMSE      MAE
## 1: 229.9244 73.68691

P6

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

  • el modelo 2 tiene menor cantidad de error entre el conjunto de valores(RMSE) por lo que podemos decir que los valores predichos son más cercanos a los observados.

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.

reg2<-lm(data=Arriendos,formula =price~minimum_nights+ngrp_+roomt_)

Arriendos[,pred3:=predict(reg2,na.action = na.exclude)]
summary(reg2)
## 
## Call:
## lm(formula = price ~ minimum_nights + ngrp_ + roomt_, data = Arriendos)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -334.9  -63.1  -23.1   10.4 9922.2 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         160.24553    7.11168  22.533  < 2e-16 ***
## minimum_nights        0.19507    0.05097   3.827  0.00013 ***
## ngrp_Brooklyn        21.61257    7.16183   3.018  0.00255 ** 
## ngrp_Manhattan       78.79639    7.16537  10.997  < 2e-16 ***
## ngrp_Queens           8.95092    7.60985   1.176  0.23951    
## ngrp_Staten Island   12.76340   13.80669   0.924  0.35526    
## roomt_Private room -110.95257    2.14802 -51.653  < 2e-16 ***
## roomt_Shared room  -133.30813    6.92224 -19.258  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 230.1 on 48887 degrees of freedom
## Multiple R-squared:  0.08187,    Adjusted R-squared:  0.08174 
## F-statistic: 622.8 on 7 and 48887 DF,  p-value: < 2.2e-16

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)

predkfolds<-train(price~roomt_+number_of_reviews+minimum_nights+ngrp_,data=Arriendos,method="lm",trControl= setupKCV)

print(predkfolds)
## 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
  • Este modelo es más conveniente, debido a que tiene un RMSE menor por lo que ajusta mejor el valor predicho al valor observado.