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")
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" )
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" )
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
Interprete los coeficientes de su regresión anterior. ¿Son estadísticamente significativos?
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)]
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
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
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)]
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
Interprete la diferencia en los errores de predicción entre el Modelo 1 y el Modelo 2.
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
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