Actividad 1

Evaluación del mercado inmobiliario urbano

Problema

Una empresa inmobiliaria líder en una gran ciudad está buscando comprender en profundidad el mercado de viviendas urbanas para tomar decisiones estratégicas más informadas. La empresa posee una base de datos extensa que contiene información detallada sobre diversas propiedades residenciales disponibles en el mercado. Se requiere realizar un análisis holístico de estos datos para identificar patrones, relaciones y segmentaciones relevantes que permitan mejorar la toma de decisiones en cuanto a la compra, venta y valoración de propiedades.

Base de datos y variables:

library(paqueteMODELOS)
data(vivenda)
## Warning in data(vivenda): data set 'vivenda' not found
str(vivienda)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 8322 obs. of  13 variables:
##  $ id          : num  1147 1169 1350 5992 1212 ...
##  $ zona        : chr  "Zona Oriente" "Zona Oriente" "Zona Oriente" "Zona Sur" ...
##  $ piso        : chr  NA NA NA "02" ...
##  $ estrato     : num  3 3 3 4 5 5 4 5 5 5 ...
##  $ preciom     : num  250 320 350 400 260 240 220 310 320 780 ...
##  $ areaconst   : num  70 120 220 280 90 87 52 137 150 380 ...
##  $ parqueaderos: num  1 1 2 3 1 1 2 2 2 2 ...
##  $ banios      : num  3 2 2 5 2 3 2 3 4 3 ...
##  $ habitaciones: num  6 3 4 3 3 3 3 4 6 3 ...
##  $ tipo        : chr  "Casa" "Casa" "Casa" "Casa" ...
##  $ barrio      : chr  "20 de julio" "20 de julio" "20 de julio" "3 de julio" ...
##  $ longitud    : num  -76.5 -76.5 -76.5 -76.5 -76.5 ...
##  $ latitud     : num  3.43 3.43 3.44 3.44 3.46 ...
##  - attr(*, "spec")=List of 3
##   ..$ cols   :List of 13
##   .. ..$ id          : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ zona        : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ piso        : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ estrato     : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ preciom     : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ areaconst   : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ parqueaderos: list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ banios      : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ habitaciones: list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ tipo        : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ barrio      : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ longitud    : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ latitud     : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   ..$ default: list()
##   .. ..- attr(*, "class")= chr [1:2] "collector_guess" "collector"
##   ..$ delim  : chr ";"
##   ..- attr(*, "class")= chr "col_spec"
##  - attr(*, "problems")=<externalptr>
head(vivienda,10)

Reconocimiento de las variables

A través de Histogramas vamos a realizar reconocimiento de las variables para entender de qué e componen a nivel general

boxplot(x = vivienda$preciom,
        main = "Histograma de precio",
        col = "red") # Precio

boxplot(x = vivienda$areaconst,
        main = "Histograma de área construída",
        col = "yellow") # Area Construida

boxplot(x = vivienda$banios,
        main = "Histograma de Número de baños",
        col = "blue") # Baños

boxplot(x = vivienda$habitaciones,
        main = "Histograma de Número de Habitaciones",
        col = "green") # habitaciones

Resumen y transformación

La tabla cuenta con información de 8,322 viviendas medidas en 12 variables: zona, piso, estrato, preciom, areaconst, parqueaderos, baños, habitaciones, tipo, barrio, longitud y latitud.

Realizamos una revisión de el contenido de estas variables

summary(vivienda)
##        id           zona               piso              estrato     
##  Min.   :   1   Length:8322        Length:8322        Min.   :3.000  
##  1st Qu.:2080   Class :character   Class :character   1st Qu.:4.000  
##  Median :4160   Mode  :character   Mode  :character   Median :5.000  
##  Mean   :4160                                         Mean   :4.634  
##  3rd Qu.:6240                                         3rd Qu.:5.000  
##  Max.   :8319                                         Max.   :6.000  
##  NA's   :3                                            NA's   :3      
##     preciom         areaconst       parqueaderos        banios      
##  Min.   :  58.0   Min.   :  30.0   Min.   : 1.000   Min.   : 0.000  
##  1st Qu.: 220.0   1st Qu.:  80.0   1st Qu.: 1.000   1st Qu.: 2.000  
##  Median : 330.0   Median : 123.0   Median : 2.000   Median : 3.000  
##  Mean   : 433.9   Mean   : 174.9   Mean   : 1.835   Mean   : 3.111  
##  3rd Qu.: 540.0   3rd Qu.: 229.0   3rd Qu.: 2.000   3rd Qu.: 4.000  
##  Max.   :1999.0   Max.   :1745.0   Max.   :10.000   Max.   :10.000  
##  NA's   :2        NA's   :3        NA's   :1605     NA's   :3       
##   habitaciones        tipo              barrio             longitud     
##  Min.   : 0.000   Length:8322        Length:8322        Min.   :-76.59  
##  1st Qu.: 3.000   Class :character   Class :character   1st Qu.:-76.54  
##  Median : 3.000   Mode  :character   Mode  :character   Median :-76.53  
##  Mean   : 3.605                                         Mean   :-76.53  
##  3rd Qu.: 4.000                                         3rd Qu.:-76.52  
##  Max.   :10.000                                         Max.   :-76.46  
##  NA's   :3                                              NA's   :3       
##     latitud     
##  Min.   :3.333  
##  1st Qu.:3.381  
##  Median :3.416  
##  Mean   :3.418  
##  3rd Qu.:3.452  
##  Max.   :3.498  
##  NA's   :3

Revisión del tipo de datos

class(vivienda$zona) # tipo variable zona
## [1] "character"
class(vivienda$piso) # tipo variable piso
## [1] "character"
class(vivienda$estrato) # tipo variable estrato
## [1] "numeric"
class(vivienda$preciom) # tipo variable preciom
## [1] "numeric"
class(vivienda$areaconst) # tipo variable areaconst
## [1] "numeric"
class(vivienda$parqueaderos) # tipo variable parqueaderos
## [1] "numeric"
class(vivienda$banios) # tipo variable baños
## [1] "numeric"
class(vivienda$habitaciones) # tipo variable habitaciones
## [1] "numeric"
class(vivienda$tipo) # tipo variable tipo
## [1] "character"
class(vivienda$barrio) # tipo variable barrio
## [1] "character"
class(vivienda$longitud) # tipo variable longitud
## [1] "numeric"
class(vivienda$latitud) # tipo variable latitud
## [1] "numeric"

Revisión de NA

sum(is.na(vivienda$zona)) # NA en zona
## [1] 3
sum(is.na(vivienda$piso)) # NA en  piso
## [1] 2638
sum(is.na(vivienda$estrato)) # NA en estrato
## [1] 3
sum(is.na(vivienda$preciom)) # NA en preciom
## [1] 2
sum(is.na(vivienda$areaconst)) # NA en areaconst
## [1] 3
sum(is.na(vivienda$parqueaderos)) # NA en parqueaderos
## [1] 1605
sum(is.na(vivienda$banios)) # NA en baños
## [1] 3
sum(is.na(vivienda$habitaciones)) # NA en habitaciones
## [1] 3
sum(is.na(vivienda$tipo)) # NA en tipo
## [1] 3
sum(is.na(vivienda$barrio)) # NA en barrio
## [1] 3
sum(is.na(vivienda$longitud)) # NA en longitud
## [1] 3
sum(is.na(vivienda$latitud)) # NA en latitud
## [1] 3

Se decide no imputar la moda o media en los valores NA ya que puede cambiar la variabilidad de la muestra lo que puede afectar los resultados del PCA.

Base para trabajar

Se cambia el nombre de la base para realizar los ajustes sobre una base nueva

vivienda1 <- vivienda
head(vivienda1,10)

Resumen y transformación de las variables

Se inicia un tratamiento de la base de datos para realizar el modelamiento de los datos. Estos ajustes se detallan a continuación:

Se eliminan las variables que mas NA presentan que son parqueaderos y piso y adicional 3 variables que inicialmente no se espera que aporten al análisis final.

borrar <- c("piso","parqueaderos","barrio", "longitud", "latitud")
vivienda1 <- vivienda1[ ,!(names(vivienda1) %in% borrar)]
head(vivienda1,10)

Se eliminan las filas que tienen datos faltantes

vivienda1 <- vivienda1[complete.cases(vivienda1),]
sum(is.na(vivienda1)) # Conteo de valores faltantes
## [1] 0

Se cambia el nombre de las filas por el ID de los casos y se quita la variable ID de el data frame

rownames(vivienda1) <- vivienda1$id
vivienda1$id <- NULL

Se transforman las variables categóricas en numéricas patra incluirlas en el modelo

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
vivienda1 <- vivienda1 %>% mutate(zona = replace(zona,
                                               zona == "Zona Centro", 1))
vivienda1 <- vivienda1 %>% mutate(zona = replace(zona,
                                               zona == "Zona Norte", 2))
vivienda1 <- vivienda1 %>% mutate(zona = replace(zona,
                                               zona == "Zona Oeste", 3))
vivienda1 <- vivienda1 %>% mutate(zona = replace(zona,
                                               zona == "Zona Oriente",
                                               4))
vivienda1 <- vivienda1 %>% mutate(zona = replace(zona,
                                               zona == "Zona Sur", 5))
vivienda1$zona <- as.numeric(vivienda1$zona)

vivienda1 <- vivienda1 %>% mutate(tipo = replace(tipo,
                                               tipo == "Casa", 1))
vivienda1 <- vivienda1 %>% mutate(tipo = replace(tipo,
                                               tipo == "Apartamento", 2))
vivienda1$tipo <- as.numeric(vivienda1$tipo)

head(vivienda1,10)

Análisis de Componentes Principales

##Reducir la dimensionalidad del conjunto de datos y visualizar la estructura de las variables en componentes principales para identificar características clave que influyen en la variación de precios y preferencias del mercado.