Practica Final Estadistica con R - Eliana Aliz Chuquillanqui Julcapari

library(ggplot2) 
options(repr.plot.height=4,repr.plot.width=6) 

Cargar los datos en un dataframe llamado: airbnb

airbnb<-read.csv('data//airbnb.csv',sep = ',', stringsAsFactors = T)
head(airbnb)
##   Zipcode Neighbourhood.Cleansed Property.Type       Room.Type Accommodates
## 1   28004            Universidad     Apartment    Private room            2
## 2   28004            Universidad     Apartment Entire home/apt            6
## 3   28004            Universidad     Apartment Entire home/apt            3
## 4   28004            Universidad          Loft Entire home/apt            3
## 5   28015            Universidad     Apartment Entire home/apt            5
## 6   28004            Universidad     Apartment Entire home/apt            2
##   Bathrooms Bedrooms Beds Bed.Type
## 1         2        1    1 Real Bed
## 2         1        3    5 Real Bed
## 3         1        2    2 Real Bed
## 4         2        1    1 Real Bed
## 5         1        1    1 Real Bed
## 6         1        0    1 Real Bed
##                                                                                                                                                                                                                                                                                                                                                          Amenities
## 1                                                                                                                                                                              TV,Wireless Internet,Kitchen,Pets allowed,Pets live on this property,Buzzer/wireless intercom,Heating,Suitable for events,Washer,First aid kit,Essentials,Lock on bedroom door,Iron
## 2                                                                                                                                                                                      TV,Internet,Wireless Internet,Air conditioning,Kitchen,Indoor fireplace,Heating,Family/kid friendly,Washer,Dryer,Smoke detector,Carbon monoxide detector,Essentials,Shampoo
## 3                                                                                                                                                                                           TV,Internet,Wireless Internet,Air conditioning,Kitchen,Doorman,Heating,Family/kid friendly,Washer,Essentials,Shampoo,Hangers,Hair dryer,Iron,Laptop friendly workspace
## 4                                           TV,Internet,Wireless Internet,Air conditioning,Kitchen,Pets allowed,Breakfast,Elevator in building,Indoor fireplace,Buzzer/wireless intercom,Heating,Washer,Essentials,Shampoo,Hangers,Hair dryer,Iron,Laptop friendly workspace,translation missing: en.hosting_amenity_49,translation missing: en.hosting_amenity_50
## 5                                                                                                                                                                                                               TV,Wireless Internet,Air conditioning,Kitchen,Smoking allowed,Pets allowed,Elevator in building,Heating,Family/kid friendly,Washer,Essentials,Iron
## 6 TV,Cable TV,Internet,Wireless Internet,Air conditioning,Wheelchair accessible,Kitchen,Doorman,Elevator in building,Buzzer/wireless intercom,Heating,Washer,Smoke detector,Carbon monoxide detector,First aid kit,Safety card,Fire extinguisher,Essentials,Shampoo,24-hour check-in,Hangers,Hair dryer,Iron,Laptop friendly workspace,Self Check-In,Doorman Entry
##   Square.Feet Price Review.Scores.Rating
## 1          NA    35                   NA
## 2          NA    92                   96
## 3          NA    55                   91
## 4          NA    60                  100
## 5         538    75                   90
## 6          NA    55                   95

Renombrar las columnas de la siguiente forma:

Nombre original Nuevo nombre
Zipcode CodigoPostal
Neighbourhood.Cleansed Barrio
Property.Type TipoPropiedad
Room.Type TipoAlquiler
Accommodates MaxOcupantes
Bathrooms NumBanyos
Bedrooms NumDormitorios
Beds NumCamas
Bed.Type TipoCama
Amenities Comodidades
Square.Feet PiesCuadrados
Price Precio
Review.Scores.Rating Puntuacion

Crea una nueva columna llamada MetrosCuadrados a partir de la columna PiesCuadrados.

Ayuda: 1 pie cuadrado son 0,092903 metros cuadrdados

newnames<-c("CodigoPostal","Barrio","TipoPropiedad","TipoAlquiler","MaxOcupantes","NumBanyos", "NumDormitorios","NumCamas","TipoCama","Comodidades","PiesCuadrados","Precio","Puntuacion")

colnames(airbnb)<-newnames

airbnb$MetrosCuadrados<- c(round(airbnb$PiesCuadrados*0.092903,2)) 
head(airbnb)
##   CodigoPostal      Barrio TipoPropiedad    TipoAlquiler MaxOcupantes NumBanyos
## 1        28004 Universidad     Apartment    Private room            2         2
## 2        28004 Universidad     Apartment Entire home/apt            6         1
## 3        28004 Universidad     Apartment Entire home/apt            3         1
## 4        28004 Universidad          Loft Entire home/apt            3         2
## 5        28015 Universidad     Apartment Entire home/apt            5         1
## 6        28004 Universidad     Apartment Entire home/apt            2         1
##   NumDormitorios NumCamas TipoCama
## 1              1        1 Real Bed
## 2              3        5 Real Bed
## 3              2        2 Real Bed
## 4              1        1 Real Bed
## 5              1        1 Real Bed
## 6              0        1 Real Bed
##                                                                                                                                                                                                                                                                                                                                                        Comodidades
## 1                                                                                                                                                                              TV,Wireless Internet,Kitchen,Pets allowed,Pets live on this property,Buzzer/wireless intercom,Heating,Suitable for events,Washer,First aid kit,Essentials,Lock on bedroom door,Iron
## 2                                                                                                                                                                                      TV,Internet,Wireless Internet,Air conditioning,Kitchen,Indoor fireplace,Heating,Family/kid friendly,Washer,Dryer,Smoke detector,Carbon monoxide detector,Essentials,Shampoo
## 3                                                                                                                                                                                           TV,Internet,Wireless Internet,Air conditioning,Kitchen,Doorman,Heating,Family/kid friendly,Washer,Essentials,Shampoo,Hangers,Hair dryer,Iron,Laptop friendly workspace
## 4                                           TV,Internet,Wireless Internet,Air conditioning,Kitchen,Pets allowed,Breakfast,Elevator in building,Indoor fireplace,Buzzer/wireless intercom,Heating,Washer,Essentials,Shampoo,Hangers,Hair dryer,Iron,Laptop friendly workspace,translation missing: en.hosting_amenity_49,translation missing: en.hosting_amenity_50
## 5                                                                                                                                                                                                               TV,Wireless Internet,Air conditioning,Kitchen,Smoking allowed,Pets allowed,Elevator in building,Heating,Family/kid friendly,Washer,Essentials,Iron
## 6 TV,Cable TV,Internet,Wireless Internet,Air conditioning,Wheelchair accessible,Kitchen,Doorman,Elevator in building,Buzzer/wireless intercom,Heating,Washer,Smoke detector,Carbon monoxide detector,First aid kit,Safety card,Fire extinguisher,Essentials,Shampoo,24-hour check-in,Hangers,Hair dryer,Iron,Laptop friendly workspace,Self Check-In,Doorman Entry
##   PiesCuadrados Precio Puntuacion MetrosCuadrados
## 1            NA     35         NA              NA
## 2            NA     92         96              NA
## 3            NA     55         91              NA
## 4            NA     60        100              NA
## 5           538     75         90           49.98
## 6            NA     55         95              NA
length(airbnb$CodigoPostal) #longitud total airbnb$CodigoPostal
## [1] 13207

Miremos el código postal. Es una variable con entradas erroneas. Hay valores como ’‘,’-’ y ‘28’ que deberían ser considerados como NA. Así mismo también debería ser NA todos los que no compiencen por 28, ya que estamos con códigos postales de Madrid

El código postal 28002, 28004 y 28051 tienen entradas repetidas. Por ejemplo las entradas 28002 deberían ir dnetro de 28002

El codigo 2804 debería ser 28004, 2805 deberia ser 28005 y 2815 juncto con 2815 debería ser 28015

Limpia los datos de la columna Codigo Postal

airbnb[which(airbnb$CodigoPostal == ''), 'CodigoPostal'] <- NA 
airbnb[which(airbnb$CodigoPostal == '-'), 'CodigoPostal'] <- NA 
airbnb[which(airbnb$CodigoPostal == '28'), 'CodigoPostal'] <- NA 
airbnb[which(airbnb$CodigoPostal == '20013'), 'CodigoPostal'] <- NA 
airbnb[which(airbnb$CodigoPostal == '20126'), 'CodigoPostal'] <- NA 
airbnb[which(airbnb$CodigoPostal == '25008'), 'CodigoPostal'] <- NA 
airbnb[which(airbnb$CodigoPostal == '27004'), 'CodigoPostal'] <- NA 
airbnb[which(airbnb$CodigoPostal == '27013'), 'CodigoPostal'] <- NA 
airbnb[which(airbnb$CodigoPostal == '28002\n28002'), 'CodigoPostal'] <- '28002' 
airbnb[which(airbnb$CodigoPostal == '28051\n28051'), 'CodigoPostal'] <- '28051' 
airbnb[which(airbnb$CodigoPostal == 'Madrid 28004'), 'CodigoPostal'] <- '28004' 
airbnb[which(airbnb$CodigoPostal == '2804'), 'CodigoPostal'] <- '28004' 
airbnb[which(airbnb$CodigoPostal == '2805'), 'CodigoPostal'] <- '28005' 
airbnb[which(airbnb$CodigoPostal == '2015'), 'CodigoPostal'] <- '28015' 
airbnb[which(airbnb$CodigoPostal == '2815'), 'CodigoPostal'] <- '28015' 
airbnb[which(airbnb$CodigoPostal == '280013'), 'CodigoPostal'] <- '28013'
airbnb$CodigoPostal<-factor(airbnb$CodigoPostal) 
summary(airbnb$CodigoPostal)
## 28001 28002 28003 28004 28005 28006 28007 28008 28009 28010 28011 28012 28013 
##   231   171   185  1796  1195   218   206   338   216   384   250  2060  1020 
## 28014 28015 28016 28017 28018 28019 28020 28021 28022 28023 28024 28025 28026 
##   630   602    76   107    43   200   192    58    30    23    44   123    93 
## 28027 28028 28029 28030 28031 28032 28033 28034 28035 28036 28037 28038 28039 
##   122   263   110    73    27    33    89    45    59    67    65    77   160 
## 28040 28041 28042 28043 28044 28045 28046 28047 28048 28049 28050 28051 28052 
##    16    63    90   103    19   495    32    67     1     3    58    17     1 
## 28053 28054 28055 28056 28058 28060 28094 28105 28850  NA's 
##    85    12    12     1     1     1     1     1     1   446

Una vez limpios los datos ¿Cuales son los códigos postales que tenemos?

length(unique(airbnb$CodigoPostal))
## [1] 62
sort(unique(airbnb$CodigoPostal), decreasing = FALSE)
##  [1] 28001 28002 28003 28004 28005 28006 28007 28008 28009 28010 28011 28012
## [13] 28013 28014 28015 28016 28017 28018 28019 28020 28021 28022 28023 28024
## [25] 28025 28026 28027 28028 28029 28030 28031 28032 28033 28034 28035 28036
## [37] 28037 28038 28039 28040 28041 28042 28043 28044 28045 28046 28047 28048
## [49] 28049 28050 28051 28052 28053 28054 28055 28056 28058 28060 28094 28105
## [61] 28850
## 61 Levels: 28001 28002 28003 28004 28005 28006 28007 28008 28009 ... 28850

¿Cuales son los 5 códigos postales con más entradas? ¿Y con menos? ¿Cuantas entradas tienen?

print("Los 5 códigos postales con más entradas son:") 
## [1] "Los 5 códigos postales con más entradas son:"
head(sort(table(airbnb$CodigoPostal),decreasing = T),5)
## 
## 28012 28004 28005 28013 28014 
##  2060  1796  1195  1020   630
print("Los 5 códigos postales con menos entradas son:") 
## [1] "Los 5 códigos postales con menos entradas son:"
head(sort(table(airbnb$CodigoPostal),decreasing = F),5)
## 
## 28048 28052 28056 28058 28060 
##     1     1     1     1     1

¿Cuales son los barrios que hay en el código postal 28012?

unique(na.omit(airbnb[airbnb$CodigoPostal == '28012', 'Barrio']))
##  [1] Sol             Acacias         Palos de Moguer Embajadores    
##  [5] Cortes          Palacio         Universidad     Delicias       
##  [9] Arapiles        Atocha          Goya           
## 125 Levels: Abrantes Acacias Adelfas Aeropuerto Aguilas ... Zofío

¿Cuantas entradas hay en cada uno de esos barrios para el codigo postal 28012?

airbnb_28012<-airbnb[which(airbnb$CodigoPostal=='28012'),] 
airbnb_28012$Barrio<-factor(airbnb_28012$Barrio) 
table(airbnb_28012$Barrio)
## 
##         Acacias        Arapiles          Atocha          Cortes        Delicias 
##              13               1               1             216               1 
##     Embajadores            Goya         Palacio Palos de Moguer             Sol 
##            1449               1              27              46             301 
##     Universidad 
##               4

¿Cuantos barrios hay en todo el dataset airbnb? ¿Cuales son?

length(unique(airbnb$Barrio)) 
## [1] 125
levels(airbnb$Barrio)
##   [1] "Abrantes"                     "Acacias"                     
##   [3] "Adelfas"                      "Aeropuerto"                  
##   [5] "Aguilas"                      "Alameda de Osuna"            
##   [7] "Almagro"                      "Almenara"                    
##   [9] "Almendrales"                  "Aluche"                      
##  [11] "Ambroz"                       "Amposta"                     
##  [13] "Apostol Santiago"             "Arapiles"                    
##  [15] "Aravaca"                      "Arcos"                       
##  [17] "Argüelles"                    "Atocha"                      
##  [19] "Bellas Vistas"                "Berruguete"                  
##  [21] "Buenavista"                   "Butarque"                    
##  [23] "Campamento"                   "Canillas"                    
##  [25] "Canillejas"                   "Cármenes"                    
##  [27] "Casa de Campo"                "Casco Histórico de Barajas"  
##  [29] "Casco Histórico de Vallecas"  "Casco Histórico de Vicálvaro"
##  [31] "Castellana"                   "Castilla"                    
##  [33] "Castillejos"                  "Chopera"                     
##  [35] "Ciudad Jardín"                "Ciudad Universitaria"        
##  [37] "Colina"                       "Comillas"                    
##  [39] "Concepción"                   "Corralejos"                  
##  [41] "Cortes"                       "Costillares"                 
##  [43] "Cuatro Caminos"               "Cuatro Vientos"              
##  [45] "Delicias"                     "El Goloso"                   
##  [47] "El Plantío"                   "El Viso"                     
##  [49] "Embajadores"                  "Entrevías"                   
##  [51] "Estrella"                     "Fontarrón"                   
##  [53] "Fuente del Berro"             "Fuentelareina"               
##  [55] "Gaztambide"                   "Goya"                        
##  [57] "Guindalera"                   "Hellín"                      
##  [59] "Hispanoamérica"               "Ibiza"                       
##  [61] "Imperial"                     "Jerónimos"                   
##  [63] "Justicia"                     "La Paz"                      
##  [65] "Legazpi"                      "Lista"                       
##  [67] "Los Angeles"                  "Los Rosales"                 
##  [69] "Lucero"                       "Marroquina"                  
##  [71] "Media Legua"                  "Mirasierra"                  
##  [73] "Moscardó"                     "Niño Jesús"                  
##  [75] "Nueva España"                 "Numancia"                    
##  [77] "Opañel"                       "Orcasitas"                   
##  [79] "Orcasur"                      "Pacífico"                    
##  [81] "Palacio"                      "Palomas"                     
##  [83] "Palomeras Bajas"              "Palomeras Sureste"           
##  [85] "Palos de Moguer"              "Pavones"                     
##  [87] "Peñagrande"                   "Pilar"                       
##  [89] "Pinar del Rey"                "Piovera"                     
##  [91] "Portazgo"                     "Pradolongo"                  
##  [93] "Prosperidad"                  "Pueblo Nuevo"                
##  [95] "Puerta Bonita"                "Puerta del Angel"            
##  [97] "Quintana"                     "Recoletos"                   
##  [99] "Rejas"                        "Rios Rosas"                  
## [101] "Rosas"                        "Salvador"                    
## [103] "San Andrés"                   "San Cristobal"               
## [105] "San Diego"                    "San Fermín"                  
## [107] "San Isidro"                   "San Juan Bautista"           
## [109] "San Pascual"                  "Santa Eugenia"               
## [111] "Simancas"                     "Sol"                         
## [113] "Timón"                        "Trafalgar"                   
## [115] "Universidad"                  "Valdeacederas"               
## [117] "Valdefuentes"                 "Valdemarín"                  
## [119] "Valdezarza"                   "Vallehermoso"                
## [121] "Valverde"                     "Ventas"                      
## [123] "Vinateros"                    "Vista Alegre"                
## [125] "Zofío"

¿Cuales son los 5 barrios que tienen mayor número entradas?

head(sort(table(airbnb$Barrio),decreasing = T),5)
## 
## Embajadores Universidad     Palacio         Sol    Justicia 
##        1844        1358        1083         940         785

¿Cuantos Tipos de Alquiler diferentes hay? ¿Cuales son? ¿Cuantas entradas en el dataframe hay por cada tipo?

length(unique(airbnb$TipoAlquiler)) 
## [1] 3
table(airbnb$TipoAlquiler)
## 
## Entire home/apt    Private room     Shared room 
##            7903            5113             191

Muestra el diagrama de cajas del precio para cada uno de los diferentes Tipos de Alquiler

library(ggplot2) 
ggplot(airbnb,aes(y=Precio,x=TipoAlquiler,color=TipoAlquiler))+geom_boxplot()+ 
  ggtitle('Precio/TipoAlquiler')
## Warning: Removed 9 rows containing non-finite values (stat_boxplot).

Cual es el precio medio de alquiler de cada uno, la diferencia que hay ¿es estadísticamente significativa? ¿Con que test lo comprobarías?

#Averiguamos el precio medio por tipo de alquiler y calculamos su pvalor con un test de shapiro,
#despues al no seguir una distribucion gaussiano comprobamos con kruskal.

for (i in levels(airbnb$TipoAlquiler)){
    df<-subset(airbnb,TipoAlquiler==i)
    print(paste("Tipo de alquiler:",i," , precio medio= ",mean(df$Precio,na.rm=T)))
    if (nrow(df)>5000){
        df<-df[1:5000,]
    }
    
    sp<-shapiro.test(df$Precio)
    print(paste("pvalor Shapiro = ",sp$p.value))
}
## [1] "Tipo de alquiler: Entire home/apt  , precio medio=  87.2966058763931"
## [1] "pvalor Shapiro =  1.24077898621874e-72"
## [1] "Tipo de alquiler: Private room  , precio medio=  34.255135981217"
## [1] "pvalor Shapiro =  9.18974842339072e-85"
## [1] "Tipo de alquiler: Shared room  , precio medio=  29.8534031413613"
## [1] "pvalor Shapiro =  4.51672121600842e-24"
kt<-kruskal.test(Precio~TipoAlquiler,airbnb)

paste("pvalor Kruskal=",kt$p.value)
## [1] "pvalor Kruskal= 0"

Filtra el dataframe cuyos tipo de alquiler sea ‘Entire home/apt’ y guardalo en un dataframe llamado airbnb_entire. Estas serán las entradas que tienen un alquiler del piso completo.

airbnb_entire<-subset(airbnb,TipoAlquiler=='Entire home/apt')

¿Cuales son los 5 barrios que tienen un mayor número de apartamentos enteros en alquiler? Nota: Mirar solo en airbnb_entire. A partir de este punto y hasta que se diga lo contrario partiremos de airbnb_entire.

head(sort(table(airbnb_entire$Barrio),decreasing = T),5)
## 
## Embajadores Universidad     Palacio         Sol      Cortes 
##        1228         984         769         701         574

¿Cuales son los 5 barrios que tienen un mayor precio medio de alquiler para apartamentos enteros (es decir, del dataframe airbnb_entire)?

¿Cual es su precio medio?

Ayuda: Usa la función aggregate aggregate(.~colname,df,mean,na.rm=TRUE)

mean_price<-aggregate(. ~ Barrio, airbnb_entire[c("Barrio","Precio")], mean,na.rm=TRUE)
dim(mean_price)
## [1] 119   2
mean_price<-mean_price[order(mean_price$Precio,decreasing = T),]
head(mean_price,5)
##           Barrio   Precio
## 77       Palomas 309.7500
## 50 Fuentelareina 180.0000
## 93     Recoletos 161.9254
## 43    El Plantío 150.0000
## 30    Castellana 141.3889
barrios<-head(mean_price,5)$Barrio

¿Cuantos apartamentos hay en cada uno de esos barrios?

Mostrar una dataframe con el nombre del barrio, el precio y el número de entradas.

Ayuda: Podeis crear un nuevo dataframe con las columnas “Barrio” y “Freq” que contenga el número de entradas en cada barrio y hacer un merge con el dataframe del punto anterior.

data_Barrio_Freq<-data.frame(table(airbnb_entire$Barrio))
colnames(data_Barrio_Freq)<-c("Barrio","Freq")
mean_price_BF<-merge(data_Barrio_Freq,mean_price,by="Barrio")

mean_price_BF<-mean_price_BF[order(mean_price_BF$Precio,decreasing = T),]
head(mean_price_BF,5)
##           Barrio Freq   Precio
## 77       Palomas    4 309.7500
## 50 Fuentelareina    2 180.0000
## 93     Recoletos  135 161.9254
## 43    El Plantío    1 150.0000
## 30    Castellana   73 141.3889

Partiendo del dataframe anterior, muestra los 5 barrios con mayor precio, pero que tengan más de 100 entradas de alquiler.

mean_price_100<-subset(mean_price_BF,mean_price_BF$Freq>100)

head(mean_price_100,5)
##        Barrio Freq    Precio
## 93  Recoletos  135 161.92537
## 52       Goya  142 111.33803
## 106       Sol  701 100.75036
## 108 Trafalgar  223  98.57848
## 59   Justicia  534  98.25468
barrios<-head(mean_price_100,5)$Barrio

Dibuja el diagrama de densidad de distribución de los diferentes precios. Serían 5 gráficas, una por cada barrio.

df_dens_barrios<-subset(airbnb_entire,Barrio %in% barrios)
ggplot(df_dens_barrios,aes(x=Precio,color=Barrio)) + 
  geom_density(aes(x = Precio, fill = Barrio), position = 'stack') + 
  facet_grid(Barrio~., scales = 'free') +
  xlab("Precio") + 
  ylab("Densidad") + 
  ggtitle("Diagrama de densidad (distribucion diferentes precios)") +
  theme_minimal()
## Warning: Removed 1 rows containing non-finite values (stat_density).

ggplot(df_dens_barrios,aes(x=Precio,color=Barrio)) + 
  geom_density(aes(x = Precio, fill = Barrio), position = 'stack') + 
  xlab("Precio") + 
  ylab("Densidad") + 
  ggtitle("Diagrama de densidad (distribucion diferentes precios)") +
  theme_minimal()
## Warning: Removed 1 rows containing non-finite values (stat_density).

ggplot(df_dens_barrios,aes(x=Precio,color=Barrio))+geom_density(bw=10)+ 
  ggtitle("Diagrama de densidad (distribucion diferentes precios)") +
  theme_minimal()
## Warning: Removed 1 rows containing non-finite values (stat_density).

Calcula el tamaño medio, en metros cuadrados, para los 5 barrios anteriores y muestralo en el mismo dataframe junto con el precio y número de entradas

mean_size<-aggregate(. ~ Barrio, airbnb_entire[c("Barrio","MetrosCuadrados")], mean,na.rm=TRUE)
mean_price_size_100<-merge(mean_price_100,mean_size,by="Barrio")

mean_price_size_100<-mean_price_size_100[order(mean_price_size_100$Precio,decreasing = T),]
head(mean_price_size_100,5)
##       Barrio Freq    Precio MetrosCuadrados
## 8  Recoletos  135 161.92537        26.66333
## 4       Goya  142 111.33803        51.68333
## 9        Sol  701 100.75036        45.61750
## 10 Trafalgar  223  98.57848        29.30429
## 5   Justicia  534  98.25468        28.52706

Dibuja el diagrama de densidad de distribución de los diferentes tamaños de apartamentos. Serían 5 gráficas, una por cada barrio.

df_dens_barrios<-subset(airbnb_entire,Barrio %in% barrios)

ggplot(df_dens_barrios,aes(x=Precio,color=Barrio)) + 
  geom_density(aes(x = MetrosCuadrados, fill = Barrio), position = 'stack') + 
  facet_grid(Barrio~., scales = 'free') +
  xlab("MetrosCuadrados") + 
  ylab("Densidad") + 
  ggtitle("Diagrama de densidad (distribucion MetrosCuadrados)") +
  theme_minimal()
## Warning: Removed 1645 rows containing non-finite values (stat_density).

ggplot(df_dens_barrios,aes(x=MetrosCuadrados,color=Barrio)) + 
  geom_density(aes(x = Precio, fill = Barrio), position = 'stack') + 
  xlab("MetrosCuadrados") + 
  ylab("Densidad") + 
  ggtitle("Diagrama de densidad (distribucion MetrosCuadrados)") +
  theme_minimal()
## Warning: Removed 1 rows containing non-finite values (stat_density).

ggplot(df_dens_barrios,aes(x=MetrosCuadrados,color=Barrio))+geom_density(bw=10)+ 
  ggtitle("Diagrama de densidad (distribucion MetrosCuadrados)") +
  theme_minimal()
## Warning: Removed 1645 rows containing non-finite values (stat_density).

Esta claro que las medias de metros cuadrados de cada uno de estos 5 barrios parecen ser diferentes, pero ¿son estadísticamente diferentes? ¿Que test habría que usar para comprobarlo?

#Tendriamos que usar tambien el test de Kruskal, ocurre como en el test anterior.

for (barrio in unique(df_dens_barrios$Barrio)){
    df<-df_dens_barrios[which(df_dens_barrios$Barrio==as.character(barrio)),]
    print(paste("Precio medio para el barrio:",barrio," = ",mean(df$MetrosCuadrados,na.rm=T)))
    if (nrow(df)>5000){
        df<-df[1:5000,]
    }
    sp<-shapiro.test(df$Precio)
    print(paste("pvalor Shapiro =",sp$p.value))
}
## [1] "Precio medio para el barrio: Sol  =  45.6175"
## [1] "pvalor Shapiro = 6.82296081876145e-30"
## [1] "Precio medio para el barrio: Justicia  =  28.5270588235294"
## [1] "pvalor Shapiro = 6.68576869862315e-32"
## [1] "Precio medio para el barrio: Recoletos  =  26.6633333333333"
## [1] "pvalor Shapiro = 2.80034621674868e-13"
## [1] "Precio medio para el barrio: Goya  =  51.6833333333333"
## [1] "pvalor Shapiro = 2.76797989326578e-11"
## [1] "Precio medio para el barrio: Trafalgar  =  29.3042857142857"
## [1] "pvalor Shapiro = 5.98924729847284e-17"
kt<-kruskal.test(MetrosCuadrados~Barrio,df_dens_barrios)
kt
## 
##  Kruskal-Wallis rank sum test
## 
## data:  MetrosCuadrados by Barrio
## Kruskal-Wallis chi-squared = 1.882, df = 4, p-value = 0.7574

Para únicamente los pisos de alquiler en el barrio de Sol:

barrio_sol<-subset(airbnb_entire,Barrio=="Sol")

Calcular un modelo lineal que combine alguna de estas variables: * NumBanyos * NumDormitorios * MaxOcupantes * MetrosCuadrados

barrio_sol<-subset(airbnb_entire,Barrio=="Sol")
nrow(barrio_sol)
## [1] 701

Primero calculamos la correlación para ver como se relacionan estas variables entre sí.

r <- cor(barrio_sol[,c("NumBanyos","NumDormitorios","MaxOcupantes","MetrosCuadrados")],use="pairwise.complete.obs")
r
##                 NumBanyos NumDormitorios MaxOcupantes MetrosCuadrados
## NumBanyos       1.0000000      0.6761906    0.6578162       0.4820403
## NumDormitorios  0.6761906      1.0000000    0.7594598       0.5684425
## MaxOcupantes    0.6578162      0.7594598    1.0000000       0.4286106
## MetrosCuadrados 0.4820403      0.5684425    0.4286106       1.0000000

Se observa que la correlación entre el número de dormitorios y los metros cuadrados es sorprendentemente baja. ¿Son de fiar esos números?

Mediante un histograma o curvas de densidad podemos descartar números que notienen sentido en el dataframe barrio_sol, para tener una matriz de correlación que tenga mayor sentido.

ggplot(data=barrio_sol,aes(x=barrio_sol$MetrosCuadrados))+
   theme(tex=element_text(size=20))+
   geom_histogram(bins=15,fill='skyblue2',color="slateblue")+
   xlab("MetrosCuadrados")
## Warning: Use of `barrio_sol$MetrosCuadrados` is discouraged. Use
## `MetrosCuadrados` instead.
## Warning: Removed 641 rows containing non-finite values (stat_bin).

ggplot(barrio_sol,aes(x=MetrosCuadrados))+geom_density(bw=3)
## Warning: Removed 641 rows containing non-finite values (stat_density).

#A la vista de estos resultados podemos descartar los pisos que tengan menos de 15 m2.

barrio_sol<-subset(barrio_sol, MetrosCuadrados>15)
nrow(barrio_sol)
## [1] 35
#Una vez realizado este estudio procedemos a calcular nuevamente la matriz de correlacion
barrio_sol<-subset(airbnb_entire,Barrio=="Sol" & MetrosCuadrados>15)
cor(barrio_sol[,c("NumBanyos","NumDormitorios","MaxOcupantes","MetrosCuadrados")],use="pairwise.complete.obs")
##                 NumBanyos NumDormitorios MaxOcupantes MetrosCuadrados
## NumBanyos       1.0000000      0.7292599    0.8589205       0.6112905
## NumDormitorios  0.7292599      1.0000000    0.7855310       0.8214959
## MaxOcupantes    0.8589205      0.7855310    1.0000000       0.7120924
## MetrosCuadrados 0.6112905      0.8214959    0.7120924       1.0000000
##nueva representación
library(GGally)
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
options(repr.plot.height=5,repr.plot.width=7)
ggpairs(barrio_sol[,c("NumBanyos","NumDormitorios","MaxOcupantes","MetrosCuadrados","Precio")],
        #lower = list(continuous = wrap("density", alpha = 0.8,size=0.2,color='blue'))
        lower = list(continuous = wrap("points", alpha = 0.3,size=0.1,color='blue'))
)

Una vez que hayamos filtrado los datos correspondientes calcular el valor o la combinación de valores que mejor nos permite obtener el precio de un inmueble.

model<-lm(barrio_sol,formula=Precio~NumBanyos+NumDormitorios+MetrosCuadrados+MaxOcupantes)
summary(model)
## 
## Call:
## lm(formula = Precio ~ NumBanyos + NumDormitorios + MetrosCuadrados + 
##     MaxOcupantes, data = barrio_sol)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -76.853 -13.673  -5.048  18.523  69.472 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)   
## (Intercept)      28.0360    12.9586   2.164  0.03859 * 
## NumBanyos         0.5648    14.6039   0.039  0.96941   
## NumDormitorios   28.2124     8.5440   3.302  0.00249 **
## MetrosCuadrados   0.2237     0.2050   1.091  0.28397   
## MaxOcupantes      2.6739     4.4329   0.603  0.55091   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 31.32 on 30 degrees of freedom
## Multiple R-squared:  0.7588, Adjusted R-squared:  0.7267 
## F-statistic:  23.6 on 4 and 30 DF,  p-value: 6.728e-09

¿Que variable es más fiable para conocer el precio de un inmueble, el número de habitaciones o los metros cuadrados? La variable mas fiable es NumDormitorios

Responde con su correspondiente margen de error del 95%, ¿cuantos euros incrementa el precio del alquiler por cada metro cuadrado extra del piso?

model<-lm(barrio_sol,formula=Precio~MetrosCuadrados)
summary(model)
## 
## Call:
## lm(formula = Precio ~ MetrosCuadrados, data = barrio_sol)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -65.155 -18.407  -0.141   9.145 122.102 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      30.9152    12.6756   2.439   0.0203 *  
## MetrosCuadrados   0.9796     0.1404   6.978  5.6e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 38.65 on 33 degrees of freedom
## Multiple R-squared:  0.596,  Adjusted R-squared:  0.5838 
## F-statistic: 48.69 on 1 and 33 DF,  p-value: 5.601e-08
confint(model)["MetrosCuadrados",]
##     2.5 %    97.5 % 
## 0.6940008 1.2652478

Responde con su correspondiente margen de error del 95%, ¿cuantos euros incrementa el precio del alquiler por cada habitación?

model<-lm(barrio_sol,formula=Precio~NumDormitorios)
summary(model)
## 
## Call:
## lm(formula = Precio ~ NumDormitorios, data = barrio_sol)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -89.704 -17.010  -5.768  19.490  61.296 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      41.283      8.554   4.826 3.08e-05 ***
## NumDormitorios   39.484      4.078   9.682 3.61e-11 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 31.03 on 33 degrees of freedom
## Multiple R-squared:  0.7396, Adjusted R-squared:  0.7317 
## F-statistic: 93.75 on 1 and 33 DF,  p-value: 3.611e-11
confint(model)["NumDormitorios",]
##    2.5 %   97.5 % 
## 31.18746 47.78095

¿Cual es la probabilidad de encontrar, en el barrio de Sol, un apartamento en alquiler con 3 dormitorios? ¿Cual es el intervalo de confianza de esa probabilidad?

n3 <- nrow(barrio_sol[barrio_sol$TipoPropiedad == 'Apartment' & barrio_sol$NumDormitorios == 3,])
total <- nrow(barrio_sol[barrio_sol$TipoPropiedad == 'Apartment',])
print(paste("La probabilidad de encontrar un piso de dichas caracteristicas es de un:",n3/total))
## [1] "La probabilidad de encontrar un piso de dichas caracteristicas es de un: 0.0967741935483871"
bin_t <- binom.test(n3,total)
bin_t
## 
##  Exact binomial test
## 
## data:  n3 and total
## number of successes = 3, number of trials = 31, p-value = 4.649e-06
## alternative hypothesis: true probability of success is not equal to 0.5
## 95 percent confidence interval:
##  0.02041986 0.25753906
## sample estimates:
## probability of success 
##             0.09677419