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("data.table")
install.packages("ggplot2")
install.packages("caret")
library(data.table)
library(ggplot2)
library(caret)
NY<-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(NY, aes(neighbourhood_group)) + geom_bar() + labs (x="Grupo de Vecindario", y="Cantidad", title = "Cantidad de casas y departamentos arrendados", subtitle = "Por grupo de Vecindario de New York", caption = "Fuente: Airbnb New York año 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(NY, aes(price,calculated_host_listings_count)) + geom_point() + facet_wrap(facets = "room_type") + labs (x="Precio", y="Número de Visitas", title = "Relación entre precio y número de visitas", subtitle = "Según tipo de habitación", caption = "Fuente: Airbnb New York año 2019")

P4

  1. 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.
NY[,roomt:=as.factor(room_type)]
reg1<-lm(data=NY,formula =price~roomt)
summary(reg1)
## 
## Call:
## lm(formula = price ~ roomt, data = NY)
## 
## 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
  1. Interprete los coeficientes de su regresión anterior. ¿Son estadísticamente significativos? Intercepto b0: Cuando arriendo 0 habitaciones en un airbnb, el precio es 211, 79 dolares. La interpretación a este intercepto podría ser que, es el precio base de arrendar una habitación ya sea privada o compartida Coeficiente habitación privada: Cuando arriendo 1 habitación privada, entonces el precio disminuye en 122,013 dólares Coeficiente habitación compartida: Cuando arriendo 1 habitación compartida entonces el precio disminuye 141,667 dólares. Todos los coeficientes anteriores son estadísticamente significativos.

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

NY[,ppredicho:=predict(reg1,na.action = na.exclude)]
  1. Calcule los errores de predicción (RMSE y MAE) de nuestro modelo. Muestre sus resultados.
predicciones<-data.table(RMSE=RMSE(NY[,ppredicho],NY[,price]),
                         MAE=MAE(NY[,ppredicho],NY[,price]))

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

P5

  1. 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.
NY[,vecindario:=as.factor(neighbourhood_group)]
reg2<-lm(data=NY,formula =price~roomt+calculated_host_listings_count+minimum_nights+vecindario)
summary(reg2)
## 
## Call:
## lm(formula = price ~ roomt + calculated_host_listings_count + 
##     minimum_nights + vecindario, data = NY)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -319.7  -62.8  -23.4   11.0 9923.7 
## 
## Coefficients:
##                                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                     159.85230    7.11317  22.473  < 2e-16 ***
## roomtPrivate room              -110.51468    2.15547 -51.272  < 2e-16 ***
## roomtShared room               -132.92066    6.92374 -19.198  < 2e-16 ***
## calculated_host_listings_count    0.07845    0.03231   2.428 0.015180 *  
## minimum_nights                    0.18082    0.05131   3.524 0.000425 ***
## vecindarioBrooklyn               21.68426    7.16153   3.028 0.002464 ** 
## vecindarioManhattan              78.13849    7.17013  10.898  < 2e-16 ***
## vecindarioQueens                  8.82534    7.60965   1.160 0.246153    
## vecindarioStaten Island          12.81351   13.80601   0.928 0.353355    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 230.1 on 48886 degrees of freedom
## Multiple R-squared:  0.08198,    Adjusted R-squared:  0.08183 
## F-statistic: 545.7 on 8 and 48886 DF,  p-value: < 2.2e-16
  1. Calcule el precio predicho para todas las observaciones de la muestra. E inclúyalo en la base original.
NY[,ppredicho2:=predict(reg2,na.action = na.exclude)]
  1. Calcule los errores de predicción (RMSE y MAE) de nuestro modelo. Muestre sus resultados.
predicciones2<-data.table(RMSE=RMSE(NY[,ppredicho2],NY[,price]),
                         MAE=MAE(NY[,ppredicho2],NY[,price]))

print(predicciones2)
##        RMSE      MAE
## 1: 230.0974 73.29543

P6

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

La diferencia entre RMSE regresión 1 y RMSE regresión 2 es de 232.1394 - 230.0974= 2,0422 y la diferencia entre MAE regresión 1 y MAE regresión 2 es 75.89648 - 73.29543 = 2,60115. Por lo tanto, queda evidenciado que la regresión 2 es mejor modelo para precedir el precio de los arriendos de airbnb porque tiene menor error.

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.

reg3<-lm(data=NY,formula =price~neighbourhood_group+number_of_reviews+roomt+availability_365)
NY[,ppredicho3:=predict(reg3,na.action = na.exclude)]
summary(reg3)
## 
## Call:
## lm(formula = price ~ neighbourhood_group + number_of_reviews + 
##     roomt + availability_365, data = NY)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -265.4  -63.6  -22.8   15.9 9958.6 
## 
## Coefficients:
##                                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                       1.396e+02  7.194e+00  19.408  < 2e-16 ***
## neighbourhood_groupBrooklyn       3.284e+01  7.138e+00   4.601 4.22e-06 ***
## neighbourhood_groupManhattan      8.745e+01  7.134e+00  12.257  < 2e-16 ***
## neighbourhood_groupQueens         1.323e+01  7.568e+00   1.748   0.0805 .  
## neighbourhood_groupStaten Island  7.885e+00  1.373e+01   0.574   0.5658    
## number_of_reviews                -3.057e-01  2.362e-02 -12.945  < 2e-16 ***
## roomtPrivate room                -1.108e+02  2.131e+00 -51.987  < 2e-16 ***
## roomtShared room                 -1.439e+02  6.895e+00 -20.870  < 2e-16 ***
## availability_365                  1.807e-01  8.063e-03  22.408  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 228.8 on 48886 degrees of freedom
## Multiple R-squared:  0.0925, Adjusted R-squared:  0.09235 
## F-statistic: 622.8 on 8 and 48886 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)
predkfolds1<-train(price~roomt+number_of_reviews+minimum_nights+vecindario,data=NY,method="lm",trControl= setupKCV)
predkfolds2<-train(price~neighbourhood_group+number_of_reviews+roomt+availability_365,data=NY,method="lm",trControl= setupKCV)
print(predkfolds1)
## 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(predkfolds2)
## Linear Regression 
## 
## 48895 samples
##     4 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.5926  0.09791927  73.97997
## 
## Tuning parameter 'intercept' was held constant at a value of TRUE

Dado que los errores son muy parecidos, creemos que el mejor modelo es la regresión 3 dado que el Rsquared es levemente mayor ( 0.09791927 > 0.09033125 ). En otras palabras, las cuatro variables de la regresión 3 explican mejor el precio de los arriendos del airbnb.