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")
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")
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")
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
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.
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)]
predicciones<-data.table(RMSE=RMSE(NY[,ppredicho],NY[,price]),
MAE=MAE(NY[,ppredicho],NY[,price]))
print(predicciones)
## RMSE MAE
## 1: 232.1394 75.89648
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
NY[,ppredicho2:=predict(reg2,na.action = na.exclude)]
predicciones2<-data.table(RMSE=RMSE(NY[,ppredicho2],NY[,price]),
MAE=MAE(NY[,ppredicho2],NY[,price]))
print(predicciones2)
## RMSE MAE
## 1: 230.0974 73.29543
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.
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
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.