Introduccion

Nuestra meta en el presente proyecto es analizar la base de datos de Airbnb en Singapore para asi realizar un modelo de regresión lineal múltiple para explicar el precio de un departamento en términos de las variables numéricas de la base y condicional a las categóricas.

Objetivo

El objetivo de nuestro modelo es lograr el “mejor ajuste posible” de la respuesta a las variables explicativas, encontrando transformaciones que hagan nuestro modelo optimice alguno de los criterios de bondad para nuestro modelo (\(R^2\), el \(AIC\) o el \(BIC\)).

Analisis de las variables

Aqui obtenemos una matriz de correlacion considerando todas aquellas variables numericas de la base, donde las correlaciones que seran de nuestro interes seran aquellas que demuestren una mayor correlacion (tanto positiva como negativamente) y hagan sentido con la variable de respuesta: prices (precio por nocoche en Singapore en dollares).

Diagrama de correlación.

Diagrama de correlación.

Se observa que no hay correlaciones fuertes con la variable prices, si acaso podriamos decir que a_365 (disponibilidad en el año) y r_p_month (criticas por mes) practicamente no estan relacionadas con nuestra variable de respuesta.

Ahora bien, no vemos apropiado considerar las variables longitude (longitud), latitude (latitud), id (clave de la habitacion) ni id_host (clave del hospedero) pues no hacen logica en nuestro planteamiento.

Con esto decidimos quedarnos como variables explicativas: minimum_night (minimo de noches), number_of_reviews (numero de criticas) y calculated_host_listings_count (huespedes que lleva el hospedador).

Regresion Multivariada

Seleccionamos las variables explicativas: Numero de criticas, minimo de noches y numero de huespedes del hospedero.

Seleccionamos la variable dependiente|regresora: \(prices.\)

Obtenemos las Betas y con esto sacamos los errores.

Creamos una variable a la cual le asignamos la funcion “lm”, que ajusta nuestro modelo de regresion lineal y hacemos combinaciones por renglones y columnas con los residuales que obtenemos por M1.

## 
## Call:
## lm(formula = Y ~ X[, -1])
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -171.1  -99.6  -47.5   25.8 9827.1 
## 
## Coefficients:
##                                        Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                           175.46007    5.25420  33.394  < 2e-16 ***
## X[, -1]minimum_nights                  -0.12332    0.09111  -1.354 0.175930    
## X[, -1]number_of_reviews               -0.47714    0.13055  -3.655 0.000259 ***
## X[, -1]calculated_host_listings_count   0.05278    0.05938   0.889 0.374118    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 339.9 on 7903 degrees of freedom
## Multiple R-squared:  0.002104,   Adjusted R-squared:  0.001725 
## F-statistic: 5.555 on 3 and 7903 DF,  p-value: 0.0008348

De aqui se obtiene una \(R^2\) del \(0.002104\), lo cual nos hace creer que nuestro modelo no es muy bueno.

Obtenemos el intervalos de confianza para los parámetros del modelo ajustado \(M1\), con un nivel de confianza del 90%, a traves de la funcion confint que nos devuelve los intervalos de confianza para cada coeficiente.

##                                                5 %        95 %
## (Intercept)                           166.81665664 184.1034772
## X[, -1]minimum_nights                  -0.27319280   0.0265610
## X[, -1]number_of_reviews               -0.69190747  -0.2623714
## X[, -1]calculated_host_listings_count  -0.04490103   0.1504528

Realizamos la \(ANOVA\), para comprobar que nuestras betas no sean el vector 0.

Df Sum Sq Mean Sq F value Pr(>F)
X[, -1] 3 1925246 641748.8 5.554924 0.0008348
Residuals 7903 913017180 115527.9 NA NA

Se observa que nuestro \(P-value\) es muy pequeño \((0.0008348)\), por lo que se rechaza la \(H_0\) (nuestras betas no sean el vector 0), con \(\alpha=5%.\)

Ahora vemos la multicolinealidad, estandarizando los datos con la funcion scale y calculando la matriz de correlacion.

##                                minimum_nights number_of_reviews
## minimum_nights                     1.00000000       -0.07647488
## number_of_reviews                 -0.07647488        1.00000000
## calculated_host_listings_count    -0.01396428       -0.14968136
##                                calculated_host_listings_count
## minimum_nights                                    -0.01396428
## number_of_reviews                                 -0.14968136
## calculated_host_listings_count                     1.00000000

Ahora analizando los eigenvalores podemos ver como aumenta la variabilidad explicada con cada variable.

## [1] 0.2753247 0.6124209 1.0000000

Analizamos los residuales, haciendo una grafica de estos para observar si cumple con tener \(media \ cero \ y \ varianza \ constante\). Luego aplicamos una pueba de \(Kolmogorov-Smirnov\) para ver si se distribuyen Normal con media cero y varianza constante.

## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  Res1
## D = 0.32006, p-value < 2.2e-16
## alternative hypothesis: two-sided

Se observa que el \(P-value\) es muy pequeño \((p-value < 2.2e-16)\) por lo cual no cumple rechazamos la hipotesis de que se distribuye \(Normal \ con \ media \ cero \ y \ varianza \ constante\), es decir, con \(\alpha=5%\). De hecho si observamos el grafico parece ser que si tiene media cero pero parecise que no tiene varianza constante pues hay puntos que se disparan hasta 10mil. Por lo que decimos que no es bueno nuestro modelo.

Hacemos la grafica de lo obtenido con la multicolinealidad.

Transformaciones

Primera Transformación

Ahora bien, podriamos sugerir aplicarle la funcion \(logaritmo\) a las variables explicativas para asi ver si con esto se tiene un mejor ajuste posible (en la \(R^2\)) que de la respuesta a las variables explicativas.

Haciendo esto se obtiene lo siguiente:

Volvemos a ajustar nuestro modelo de regresion lineal.

## 
## Call:
## lm(formula = Y2 ~ X2[, -1])
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -170.7  -98.5  -46.8   25.1 9832.0 
## 
## Coefficients:
##                                        Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                            174.7640     6.8644  25.460  < 2e-16 ***
## X2[, -1]minimum_nights                  -8.9250     2.6257  -3.399 0.000679 ***
## X2[, -1]number_of_reviews               -0.3414     0.4919  -0.694 0.487631    
## X2[, -1]calculated_host_listings_count   3.5555     2.1026   1.691 0.090873 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 340 on 7903 degrees of freedom
## Multiple R-squared:  0.001681,   Adjusted R-squared:  0.001302 
## F-statistic: 4.435 on 3 and 7903 DF,  p-value: 0.00404

De aqui se obtiene una \(R^2\) de \(0.001681\) la cual es ligeramente menor a la obtenida antes de la transformacion \((0.002104)\), por lo cual el modelo no mejoro.

##                                                 5 %        95 %
## (Intercept)                            163.47181033 186.0561923
## X2[, -1]minimum_nights                 -13.24443399  -4.6055750
## X2[, -1]number_of_reviews               -1.15063485   0.4677644
## X2[, -1]calculated_host_listings_count   0.09665519   7.0143466
Df Sum Sq Mean Sq F value Pr(>F)
X2[, -1] 3 1537812 512604.1 4.435176 0.0040399
Residuals 7903 913404614 115576.9 NA NA
##                                minimum_nights number_of_reviews
## minimum_nights                     1.00000000       -0.04734473
## number_of_reviews                 -0.04734473        1.00000000
## calculated_host_listings_count     0.16425891       -0.06454891
##                                calculated_host_listings_count
## minimum_nights                                     0.16425891
## number_of_reviews                                 -0.06454891
## calculated_host_listings_count                     1.00000000

Volvemos a analizar los residuales.

## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  Res1_2
## D = 0.31047, p-value < 2.2e-16
## alternative hypothesis: two-sided

Segunda Transformación

Como observamos que nuestra transformación incial no nos mejoro nuestro ajuste, probaremos con otra transfomación; la función \(raíz \ quinta\) a las variables explicativas para asi ver si con esto se tiene un mejor ajuste posible (en la \(R^2\)) que de la respuesta a las variables explicativas.

Haciendo esto se obtiene lo siguiente:

Volvemos a ajustar nuestro modelo de regresion lineal.

## 
## Call:
## lm(formula = Y3 ~ X3[, -1])
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -181.2  -96.6  -47.1   26.7 9828.6 
## 
## Coefficients:
##                                        Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                             239.529     20.141  11.893  < 2e-16 ***
## X3[, -1]minimum_nights                  -31.248      8.091  -3.862 0.000113 ***
## X3[, -1]number_of_reviews               -26.840      7.343  -3.655 0.000259 ***
## X3[, -1]calculated_host_listings_count    6.028      6.223   0.969 0.332729    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 339.7 on 7903 degrees of freedom
## Multiple R-squared:  0.003376,   Adjusted R-squared:  0.002998 
## F-statistic: 8.925 on 3 and 7903 DF,  p-value: 6.706e-06

De aqui se obtiene una \(R^2\) de \(0.003376\) la cual es ligeramente mayor a la obtenida antes de la transformacion \((0.002104)\) y con la tranformación de logaritmo \((0.001681)\) por lo cual el modelo mejoró, pero no significativamente.

##                                              5 %      95 %
## (Intercept)                            206.39637 272.66177
## X3[, -1]minimum_nights                 -44.55934 -17.93761
## X3[, -1]number_of_reviews              -38.91992 -14.75954
## X3[, -1]calculated_host_listings_count  -4.20918  16.26613
Df Sum Sq Mean Sq F value Pr(>F)
X3[, -1] 3 3089194 1029731.4 8.924646 6.7e-06
Residuals 7903 911853232 115380.6 NA NA
##                                minimum_nights number_of_reviews
## minimum_nights                      1.0000000        -0.1620158
## number_of_reviews                  -0.1620158         1.0000000
## calculated_host_listings_count      0.1350486        -0.2355695
##                                calculated_host_listings_count
## minimum_nights                                      0.1350486
## number_of_reviews                                  -0.2355695
## calculated_host_listings_count                      1.0000000

Volvemos a analizar los residuales.

## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  Res1_3
## D = 0.3068, p-value < 2.2e-16
## alternative hypothesis: two-sided

Se obtienen resultados muy parecidos pues se tiene un \(P-value\) muy pequeño \((p-value < 2.2e-16)\) con lo cual rechazamos que se distribuye \(Normal \ con \ media \ cero \ y \ varianza \ constante\), con \(\alpha=5\)%.

Conclusiones

Con el analisis anterior, donde buscabamos encontrar un modelo para estimar el precio de un airbnb dadas ciertas caracteristicas, primero estudiamos nuestros datos y encontramos variables que creiamos significativas, despues ajustamos un modelo de regresion multiple respecto a estas variables, hicimos un analisis de residuales, verificamos que nuestro modelo pasara las pruebas de los supuestos estructurales y distribucionales. Finalmente llegamos a nuestro modelo, en el cual no vemos factible el poder explicar el precio de un departamento en terminos de las varibles que seleccionamos, pues nuestro modelo no pasa algunas pruebas, sin embargo el ejercicio nos muestra valor como un modelo descriptivo para nuestra base de datos.