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")
install.packages("jtools")
library(data.table)
library(ggplot2)
library(caret)
library(jtools)
airbnb<-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=airbnb, aes(x=neighbourhood_group,fill=neighbourhood_group))+geom_bar()+labs(x="Grupo de vecindario", y="Oferta de arriendos", title="Oferta de arriendos para cada grupo de vecindario")+scale_fill_discrete(name=NULL, breaks=NULL)
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, aes(x=price, y=number_of_reviews, color=room_type))+geom_point()+facet_wrap(facets="room_type")+labs(x="Precio", y="N° de visitass", title="Relación entre precio y N° de visitas, según tipo de habitación")+scale_color_discrete(name=NULL, breaks=NULL)
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[,roomt:=as.factor(room_type)]
reg1<-lm(data=airbnb,formula =price~roomt)
summ(reg1)
## MODEL INFO:
## Observations: 48895
## Dependent Variable: price
## Type: OLS linear regression
##
## MODEL FIT:
## F(2,48892) = 1716.63, p = 0.00
## R² = 0.07
## Adj. R² = 0.07
##
## Standard errors: OLS
## --------------------------------------------------------
## Est. S.E. t val. p
## ----------------------- --------- ------ -------- ------
## (Intercept) 211.79 1.46 145.43 0.00
## roomtPrivate room -122.01 2.13 -57.30 0.00
## roomtShared room -141.67 6.97 -20.33 0.00
## --------------------------------------------------------
Interprete los coeficientes de su regresión anterior. ¿Son estadísticamente significativos?
B0= 211.79. Podemos decir que si private room y shared room son 0, el precio de la casa/dpto completo es de $211.79 dólares, ceteris paribus.
B1= -122.01. Si el tipo de habitación es privada, el precio disminuye en $122.01 dólares en relación al de una casa/dpto completo, ceteris paribus.
B2= -141.67. Si el tipo de habitación es compartida, el precio disminuye en $141.67 dólares en relación al de una casa/dpto completo, ceteris paribus.
Además, todos son estadísticamente significativos.
Calcule el precio predicho para todas las observaciones de la muestra. E inclúyalo en la base original.
airbnb[,pred1:=predict(reg1, na.action=na.exclude)]
Calcule los errores de predicción (RMSE y MAE) de nuestro modelo. Muestre sus resultados.
errorespred1<-data.table(RMSE=RMSE(airbnb[,pred1],airbnb[,price]),
MAE=MAE(airbnb[,pred1],airbnb[,price]))
errorespred1
## 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.
airbnb[,nbhg:=as.factor(neighbourhood_group)]
reg2<-lm(data=airbnb,formula =price~roomt+number_of_reviews+minimum_nights+nbhg)
summ(reg2)
## MODEL INFO:
## Observations: 48895
## Dependent Variable: price
## Type: OLS linear regression
##
## MODEL FIT:
## F(8,48886) = 555.72, p = 0.00
## R² = 0.08
## Adj. R² = 0.08
##
## Standard errors: OLS
## ---------------------------------------------------------
## Est. S.E. t val. p
## ----------------------- --------- ------- -------- ------
## (Intercept) 165.92 7.13 23.26 0.00
## roomtPrivate room -110.95 2.15 -51.69 0.00
## roomtShared room -134.82 6.92 -19.49 0.00
## number_of_reviews -0.21 0.02 -8.92 0.00
## minimum_nights 0.16 0.05 3.13 0.00
## nbhgBrooklyn 21.24 7.16 2.97 0.00
## nbhgManhattan 77.84 7.16 10.87 0.00
## nbhgQueens 9.30 7.60 1.22 0.22
## nbhgStaten Island 13.76 13.80 1.00 0.32
## ---------------------------------------------------------
Calcule el precio predicho para todas las observaciones de la muestra. E inclúyalo en la base original.
airbnb[,pred2:=predict(reg2, na.action=na.exclude)]
Calcule los errores de predicción (RMSE y MAE) de nuestro modelo. Muestre sus resultados.
errorespred2<-data.table(RMSE=RMSE(airbnb[,pred2],airbnb[,price]),
MAE=MAE(airbnb[,pred2],airbnb[,price]))
errorespred2
## RMSE MAE
## 1: 229.9244 73.68691
Interprete la diferencia en los errores de predicción entre el Modelo 1 y el Modelo 2.
El modelo 2 es mejor que el modelo 1, ya que los errores de predicción RMSE y MAE son menores, por tanto predice de mejor manera el precio.
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.
airbnb[,nbh:=as.factor(neighbourhood)]
reg3<-lm(data=airbnb,formula =price~roomt+nbh)
airbnb[,pred3:=predict(reg3, na.action=na.exclude)]
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+nbhg,data=airbnb,method="lm",trControl= setupKCV)
predkfolds2<-train(price~roomt+nbh,data=airbnb,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
## 2 predictor
##
## No pre-processing
## Resampling: Cross-Validated (9 fold)
## Summary of sample sizes: 43462, 43462, 43461, 43462, 43461, 43464, ...
## Resampling results:
##
## RMSE Rsquared MAE
## 225.6774 0.1055182 70.60149
##
## Tuning parameter 'intercept' was held constant at a value of TRUE
Vemos que el Modelo 2 (propuesto por nosotras) tiene errores de predicción MAE y RMSE más pequeños .Por tanto, estima de mejor forma el precio de arriendo.