# llamado a las librerias
library(paqueteMODELOS)
library(knitr)
library(kableExtra)
library(dplyr) 
library(naniar)
library(DescTools)
library(factoextra)
library(gridExtra)
library(StatMatch)
library(cluster)
library(clustMixType)
library(ggplot2)
library(plotly)
library(ade4)
library(FactoMineR)
library(tidyr)

0. DESCRIPCIÓN DE LA NECESIDAD

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.

0.1. RETOS

El reto principal consiste en realizar un análisis integral y multidimensional de la base de datos para obtener una comprensión del mercado inmobiliario urbano. Se requiere aplicar diversas técnicas de análisis de datos, incluyendo:

1. 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 oferta del mercado.

2. Análisis de Conglomerados: Agrupar las propiedades residenciales en segmentos homogéneos con características similares para entender las dinámicas de las ofertas específicas en diferentes partes de la ciudad y en diferentes estratos socioeconómicos.

3. Análisis de Correspondencia: Examinar la relación entre las variables categóricas (tipo de vivienda, zona y barrio), para identificar patrones de comportamiento de la oferta en mercado inmobiliario.

4. Visualización de resultados: Presentar gráficos, mapas y otros recursos visuales para comunicar los hallazgos de manera clara y efectiva a la dirección de la empresa.

El informe final debe incluir análisis detallados de los resultados obtenidos, las conclusiones clave y las recomendaciones específicas para guiar las decisiones estratégicas de la empresa inmobiliaria. Se espera que este análisis de datos proporcione ventajas competitivas en el mercado, optimizando la inversión y maximizando los beneficios en un entorno altamente competitivo y en constante cambio.

0.2 BASE DE DATOS A EMPLEAR

La siguiente es la base de datos a emplear:

vivienda<-data.frame(vivienda)

1. ANÁLISIS EXPLORATORIO DE DATOS

1.1. DESCRIPCIÓN DE LA BÁSE DE DATOS

En la siguiente tabla se representa los principales valores estadísticos de las variables que hacen parte de la base de datos.

str(vivienda) # descripciÓn de la BD
## '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 ...
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

Del anterior análisis exploratorio y descriptivo se identifica lo siguiente:

  • Cantidad de datos: La base de datos está compuesta de 13 variables y 8322 registros, donde 4 variables son de tipo texto y el resto numéricas.

  • Datos a eliminar: Se identifican las variables que deberían ser numéricas con su respectivo tipo, exceptuando la variable piso, la cual debería ser numérica, pero aparece tipo “chr”.

  • Variables que no son necesarias La variable ID no aporta en este análisis estadístico, ya que es una variable para identificar las observaciones.

1.2. DATOS FALTANTES

En la siguiente tabla se encuentran los datos faltantes por variable:

# Obtiene el numero de datos faltantes por campo
faltantes <- colSums(is.na(vivienda)) %>% as.data.frame() # suma los campos faltantes por cada columna del data.frame
Grafica_faltantes<-gg_miss_var(vivienda,show_pct=TRUE) # grafico de datos faltantes

Se puede concluir de los datos faltantes que:

  • **Registros sin información:* Para las variables id, zona, estrato, preciom areaconst, banios, habitaciones, tipo, barrio, longitud, latitud, se identifica hay 3 observaciones que no cuentan con ningún tipo de registro en dichas variables.

  • **Variables con más faltantes* La variable piso y parquea tienen la gran mayoría de datos faltantes, 31.69% y 19.28% respectivamente, los cuales son muy representativos para la base de datos.

1.3. LIMPIEZA DE DATOS

1.3.1. ELIMINACIÓN DE REGISTROS SIN DATOS

Las siguientes son las observaciones (Según su ID) que no cuentan con ningún tipo de información:

which(is.na(vivienda$id))# se conulta que variables faltantes hay por campo id
## [1] 8320 8321 8322
vivienda<-vivienda[-which(is.na(vivienda$id)),]

Por lo que se procede a eliminarlas de la base de datos, la cual queda con el siguiente tamaño:

# str(vivienda)

dim(vivienda)
## [1] 8319   13

1.3.2. ELIMINACIÓN DE VARIABLES

BARRIO

Esta variable es de tipo “chr”, la cual requiere de un gran esfuerzo para realizar la validación de cada uno de los registros, adicionalmente se requiere de un conocimiento muy específico del negocio para identificar si la clasificación de la misma es adecuado. Es por esta razón que se procede a eliminar esta variable, ya que se considera que para lo requerido en este trabajo, no aporta mucha información.

vivienda<-vivienda[,-11]

1.3.3. TRANSFORMACIÓN DE VARIABLES

PISO-TIPO DE VARIABLE

La variable piso en la base de datos original es tipo “chr”, se procede a transformarla a “num” (numérica), dado que esta variable es categórica-ordinal.

vivienda$piso<-as.numeric(vivienda$piso)
str(vivienda)
## 'data.frame':    8319 obs. of  12 variables:
##  $ id          : num  1147 1169 1350 5992 1212 ...
##  $ zona        : chr  "Zona Oriente" "Zona Oriente" "Zona Oriente" "Zona Sur" ...
##  $ piso        : num  NA NA NA 2 1 1 1 1 2 2 ...
##  $ 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" ...
##  $ longitud    : num  -76.5 -76.5 -76.5 -76.5 -76.5 ...
##  $ latitud     : num  3.43 3.43 3.44 3.44 3.46 ...
#table(vivienda$piso)

1.3.4. IMPUTACIÓN DE DATOS

Como se relacionó en el numeral 1.2. la variable piso (31.69%) y areacons (19.28%) tienen una proporción importante de datos faltantes, por lo que se procede a hacer imputación.

Teniendo en cuenta que se cuenta con la variable tipo y zona, la imputación se hará para cada una de las zonas y tipo de vivienda, tal como se observa en la siguiente tabla y sus valores de medida de centralidad empleados.

resumen_zona_piso <- vivienda  %>%
  group_by(zona, tipo) %>%
  summarise(
    Promedio_piso = round(mean(piso,na.rm=TRUE),0),
    Mediana_piso = round(median(piso,na.rm=TRUE),0),
    moda= round(Mode(as.numeric(piso),na.rm=TRUE),0),
    Max_piso = round(max(piso,na.rm=TRUE),0),
    Min_piso = round(min(piso,na.rm=TRUE),0),
    Desviacion_Estandar_piso = round(sd(piso,na.rm=TRUE),0)
  )
resumen_zona_parqueaderos <- vivienda %>%
  group_by(zona, tipo) %>%
  summarise(
    Promedio_parqueaderos = round(mean(parqueaderos,na.rm=TRUE),0),
    Mediana_parqueaderos = round(median(parqueaderos,na.rm=TRUE),0),
    Max_parqueaderos = round(max(parqueaderos,na.rm=TRUE),0),
    Min_parqueaderos = round(min(parqueaderos,na.rm=TRUE),0),
    Desviacion_Estandar_parqueaderos = round(sd(parqueaderos,na.rm=TRUE),0))
resumen_zona_piso
## # A tibble: 10 × 8
## # Groups:   zona [5]
##    zona         tipo        Promedio_piso Mediana_piso  moda Max_piso Min_piso
##    <chr>        <chr>               <dbl>        <dbl> <dbl>    <dbl>    <dbl>
##  1 Zona Centro  Apartamento             5            4     5       11        1
##  2 Zona Centro  Casa                    2            1     1        4        1
##  3 Zona Norte   Apartamento             5            4     3       12        1
##  4 Zona Norte   Casa                    2            2     2        7        1
##  5 Zona Oeste   Apartamento             5            5     3       12        1
##  6 Zona Oeste   Casa                    3            2     2        7        1
##  7 Zona Oriente Apartamento             3            2     1        5        1
##  8 Zona Oriente Casa                    2            2     1       10        1
##  9 Zona Sur     Apartamento             4            4     5       12        1
## 10 Zona Sur     Casa                    2            2     2       10        1
## # ℹ 1 more variable: Desviacion_Estandar_piso <dbl>
resumen_zona_parqueaderos
## # A tibble: 10 × 7
## # Groups:   zona [5]
##    zona        tipo  Promedio_parqueaderos Mediana_parqueaderos Max_parqueaderos
##    <chr>       <chr>                 <dbl>                <dbl>            <dbl>
##  1 Zona Centro Apar…                     1                    1                1
##  2 Zona Centro Casa                      1                    1                6
##  3 Zona Norte  Apar…                     1                    1                4
##  4 Zona Norte  Casa                      2                    2               10
##  5 Zona Oeste  Apar…                     2                    2                7
##  6 Zona Oeste  Casa                      2                    2                7
##  7 Zona Orien… Apar…                     1                    1                3
##  8 Zona Orien… Casa                      1                    1                6
##  9 Zona Sur    Apar…                     1                    1               10
## 10 Zona Sur    Casa                      2                    2               10
## # ℹ 2 more variables: Min_parqueaderos <dbl>,
## #   Desviacion_Estandar_parqueaderos <dbl>

De los anteriores resultados, se puede observar que el promedio y la mediana para la variables parqueadero son las mismas. Del mismo modo se obtiene la moda para la variable piso, ya que esta es una variable categorica ordinal,que indica el nivel en el que se encuentra la vivienda.

Luego, se realiza la imputación de los faltantes para piso y parqueaderos, donde el piso es imputado por la moda y el parqueadero por la mediana.

vivienda <- vivienda %>%
    group_by(zona,tipo) %>%
    mutate(piso = ifelse(is.na(piso), Mode(as.numeric(piso),na.rm = TRUE), piso)) %>% 
    mutate(parqueaderos = ifelse(is.na(parqueaderos), median(as.numeric(parqueaderos), na.rm = TRUE),parqueaderos))

VARIABLE TIPO

Se realiza un conteo agrupado por zona tipo y piso para determinar si existe un valor ilogico en el tipo de vivienda, por ejemplo, se espera que una casa no este ubicada en un nivel superior al cuarto piso.

resumen_zona_tipo_piso <- vivienda  %>%
  group_by(zona, tipo,piso) %>%
  summarise(
n=n()
  )
resumen_zona_tipo_piso
## # A tibble: 75 × 4
## # Groups:   zona, tipo [10]
##    zona        tipo         piso     n
##    <chr>       <chr>       <dbl> <int>
##  1 Zona Centro Apartamento     1     1
##  2 Zona Centro Apartamento     2     2
##  3 Zona Centro Apartamento     3     1
##  4 Zona Centro Apartamento     4     4
##  5 Zona Centro Apartamento     5    14
##  6 Zona Centro Apartamento    11     2
##  7 Zona Centro Casa            1    78
##  8 Zona Centro Casa            2    14
##  9 Zona Centro Casa            3     7
## 10 Zona Centro Casa            4     1
## # ℹ 65 more rows

PISO-DATOS ATIPICOS

Como se puede observar, algunas viviendas tipo casa se encuentran en pisos como 5, 6, 7 e incluso hasta 10. Para este trabajo las casas solo podran ir hasta un 4 piso. Por lo tanto, se va a reemplazar el tipo de vivienda por apartamento para aquellas casas que esten ubicadas en un piso mayor a el 4 piso.

vivienda<- vivienda %>% 
mutate(tipo=ifelse(piso>4 & tipo=="Casa","Apartamento",tipo))

nuevamente se realiza un conteo agrupado para verificar los cambios.

resumen_zona_tipo_piso <- vivienda  %>%
  group_by(zona, tipo,piso) %>%
  summarise(
n=n()
  )
resumen_zona_tipo_piso
## # A tibble: 68 × 4
## # Groups:   zona, tipo [10]
##    zona        tipo         piso     n
##    <chr>       <chr>       <dbl> <int>
##  1 Zona Centro Apartamento     1     1
##  2 Zona Centro Apartamento     2     2
##  3 Zona Centro Apartamento     3     1
##  4 Zona Centro Apartamento     4     4
##  5 Zona Centro Apartamento     5    14
##  6 Zona Centro Apartamento    11     2
##  7 Zona Centro Casa            1    78
##  8 Zona Centro Casa            2    14
##  9 Zona Centro Casa            3     7
## 10 Zona Centro Casa            4     1
## # ℹ 58 more rows

Como se puede observar ya no existen casas ubicadas en un nivel superior al 4 piso.vuelven a consultar si existen datos faltantes en el Dataset y se realiza el calculo de estadisticos de centralidad y variabilidad para observar si hubo algun cambio significativo.

resumen_zona_piso <- vivienda  %>%
  group_by(zona, tipo) %>%
  summarise(
    Promedio_piso = round(mean(piso,na.rm=TRUE),0),
    Mediana_piso = round(median(piso,na.rm=TRUE),0),
    moda= round(Mode(as.numeric(piso),na.rm=TRUE),0),
    Max_piso = round(max(piso,na.rm=TRUE),0),
    Min_piso = round(min(piso,na.rm=TRUE),0),
    Desviacion_Estandar_piso = round(sd(piso,na.rm=TRUE),0),
  )

resumen_zona_parqueaderos <- vivienda %>%
  group_by(zona, tipo) %>%
  summarise(
    Promedio_parqueaderos = round(mean(parqueaderos,na.rm=TRUE),0),
    Mediana_parqueaderos = round(median(parqueaderos,na.rm=TRUE),0),
    Max_parqueaderos = round(max(parqueaderos,na.rm=TRUE),0),
    Min_parqueaderos = round(min(parqueaderos,na.rm=TRUE),0),
    Desviacion_Estandar_parqueaderos = round(sd(parqueaderos,na.rm=TRUE),0)
  )

faltantes <- colSums(is.na(vivienda)) %>% as.data.frame() # suma los campos faltantes por cada columna del data.frame
resumen_zona_piso
## # A tibble: 10 × 8
## # Groups:   zona [5]
##    zona         tipo        Promedio_piso Mediana_piso  moda Max_piso Min_piso
##    <chr>        <chr>               <dbl>        <dbl> <dbl>    <dbl>    <dbl>
##  1 Zona Centro  Apartamento             5            5     5       11        1
##  2 Zona Centro  Casa                    1            1     1        4        1
##  3 Zona Norte   Apartamento             4            3     3       12        1
##  4 Zona Norte   Casa                    2            2     2        4        1
##  5 Zona Oeste   Apartamento             4            3     3       12        1
##  6 Zona Oeste   Casa                    2            2     2        4        1
##  7 Zona Oriente Apartamento             2            2     1       10        1
##  8 Zona Oriente Casa                    2            1     1        4        1
##  9 Zona Sur     Apartamento             5            5     5       12        1
## 10 Zona Sur     Casa                    2            2     2        4        1
## # ℹ 1 more variable: Desviacion_Estandar_piso <dbl>
resumen_zona_parqueaderos
## # A tibble: 10 × 7
## # Groups:   zona [5]
##    zona        tipo  Promedio_parqueaderos Mediana_parqueaderos Max_parqueaderos
##    <chr>       <chr>                 <dbl>                <dbl>            <dbl>
##  1 Zona Centro Apar…                     1                    1                1
##  2 Zona Centro Casa                      1                    1                6
##  3 Zona Norte  Apar…                     1                    1                4
##  4 Zona Norte  Casa                      2                    2               10
##  5 Zona Oeste  Apar…                     2                    2                7
##  6 Zona Oeste  Casa                      2                    2                7
##  7 Zona Orien… Apar…                     1                    1                3
##  8 Zona Orien… Casa                      1                    1                6
##  9 Zona Sur    Apar…                     1                    1               10
## 10 Zona Sur    Casa                      2                    2               10
## # ℹ 2 more variables: Min_parqueaderos <dbl>,
## #   Desviacion_Estandar_parqueaderos <dbl>
faltantes
##              .
## id           0
## zona         0
## piso         0
## estrato      0
## preciom      0
## areaconst    0
## parqueaderos 0
## banios       0
## habitaciones 0
## tipo         0
## longitud     0
## latitud      0

Finalmente, se logra ver que ya no existen datos faltantes en el Dataset, adicionalmente ya no existen viviendas tipo casa en un nivel superior al 4 piso.

2. APLICACIÓN DE METODOS MULTIVARIADOS

2.1. ANALISIS DE COMPONENTES PRINCIPALES (PCA)

NORMALIZACIÓN DE DATOS

Se procede a normalizar los datos de las variables numericas seleccionadas: precio, area, parqueaderos, banios y habitaciones.

viviendaPCA<- vivienda[,-c(1,2,3,4,10,11,12)]
viviendaZ= as.data.frame(scale(viviendaPCA[,1:5]))# Se normalizan las variables numericas.
head(viviendaZ) # primeros 6 registros
##      preciom  areaconst parqueaderos      banios habitaciones
## 1 -0.5595498 -0.7339949   -0.7120692 -0.07793773    1.6406840
## 2 -0.3465670 -0.3842568   -0.7120692 -0.77811479   -0.4147626
## 3 -0.2552886  0.3152194    0.2415212 -0.77811479    0.2703863
## 4 -0.1031580  0.7349051    1.1951116  1.32241640   -0.4147626
## 5 -0.5291236 -0.5940997   -0.7120692 -0.77811479   -0.4147626
## 6 -0.5899759 -0.6150839   -0.7120692 -0.07793773   -0.4147626

APLICACIÓN DE PCA

componentes<-prcomp(viviendaZ) #Se aplica PCA
componentes
## Standard deviations (1, .., p=5):
## [1] 1.7902709 0.9355834 0.6196102 0.5856678 0.4389648
## 
## Rotation (n x k) = (5 x 5):
##                    PC1         PC2         PC3        PC4        PC5
## preciom      0.4719599  0.39550662  0.33917430 -0.2238936  0.6750265
## areaconst    0.4823039 -0.03931911  0.50690960  0.6124692 -0.3657337
## parqueaderos 0.4306228  0.44569125 -0.74028202  0.2351713 -0.1122512
## banios       0.4859816 -0.17504067  0.02669928 -0.7054197 -0.4846162
## habitaciones 0.3507459 -0.78278259 -0.28155485  0.1477521  0.4038873

Al aplicar PCA, se obtienen 5 componentes (PC), de acuerdo con la cantidad de variables de entrada al método. En la siguiente gráfica se expresa la varianza explicada de cada uno de los PC. Por medio de dichos datos se podrá realizar la disminución de variables para el modelo.

fviz_eig(componentes, addlabels = TRUE) + ggtitle("Varianza Explicada por los Componentes Principales")# grafica de varianza explicada

La siguiente es la matriz de vectores propios la cual tiene las coordenadas de cada uno de los vectores .

#matriz de cargas variables o vectores propios (contiene los vectores propios)
MVP<-componentes$rotation
MVP
##                    PC1         PC2         PC3        PC4        PC5
## preciom      0.4719599  0.39550662  0.33917430 -0.2238936  0.6750265
## areaconst    0.4823039 -0.03931911  0.50690960  0.6124692 -0.3657337
## parqueaderos 0.4306228  0.44569125 -0.74028202  0.2351713 -0.1122512
## banios       0.4859816 -0.17504067  0.02669928 -0.7054197 -0.4846162
## habitaciones 0.3507459 -0.78278259 -0.28155485  0.1477521  0.4038873

Finalmente, se muestran las coordenadas de los datos originales transformadas mediante la metodología PCA.

# Coordenadas en el espacio de los componentes principales
# combinaciones lineales de las variables escaladas
DataPCA<-componentes$x
head(DataPCA) # imprime los 6 primeros registros tranformados
##             PC1         PC2        PC3         PC4        PC5
## [1,] -0.3871400 -1.78046524 -0.4987454 -0.19433454  0.6710876
## [2,] -1.1791532  0.02154676  0.3108052  0.16240592  0.1960941
## [3,] -0.1477625 -0.08117055 -0.2024971  0.89586612  0.1715686
## [4,]  1.3175972  0.55614752 -0.3950917 -0.23988158 -1.2809483
## [5,] -1.3665207 -0.04240479  0.1425153  0.07475691  0.1496101
## [6,] -1.0650881 -0.18820663  0.1299329 -0.41838958 -0.2231093

Es importante revisar la contribución de cada una de las variables a cada componente. A continuación se muestra la contribución de cada variable a cada componente.

g1<-fviz_contrib(componentes, choice = "var", axes = 1, title = "PC1")
g2<-fviz_contrib(componentes, choice = "var", axes = 2, title = "PC2")
g3<-fviz_contrib(componentes, choice = "var", axes = 3, title = "PC3")
g4<-fviz_contrib(componentes, choice = "var", axes = 4, title = "PC4")
g5<-fviz_contrib(componentes, choice = "var", axes = 5, title = "PC5")


grid.arrange(g1, g2, g3, g4, g5, nrow = 2, ncol = 3)

Para complementar el análisis, se realiza el circulo de correlación de las variables el cual explica la correlación entre variables y el aporte a las componentes a través de vectores.

g6<-fviz_pca_var(componentes, 
                 col.var = "contrib",
                 gradient.cols= c("#FF7F00",  "#034D94"),
                 repel=TRUE,
                
)
g6

CONCLUSIÓN PCA:

De acuerdo con lo analizado en las anteriores imágenes, se identifica que los componentes PC1 y PC2 son los que más contribuyen a la variabilidad (64.1% y 17.5% respectivamente). La contribución total de ambas variables es de 86.6%.

2.2. ANÁLISIS DE CONGLOMERADOS

2.2.1. PREPARACIÓN DE LOS DATOS

Para poder realizar un analisis adecuado, se aplica la metodología de One Hot Encoding a la variable zona, el cual hará la conversión de variable tipo “chr” a variable binomial. La siguiente es la forma en la que se realiza la conversión.

zonas<- model.matrix(~ zona - 1, data = vivienda) # aplica on hot encoding variable zona
colnames(zonas)<-c("Centro","Norte","Oeste","Oriente","Sur") # aplica nombres a las columnas
tipo<- model.matrix(~ tipo - 1, data = vivienda)# aplica on hot encoding variable tipo
colnames(tipo)<-c("Apartamento","Casa") # aplica nombres a las columnas
vivienda2<-vivienda[,-c(1,2,10,11,12)] # elimina las columas mencionadas del data frame
vivienda2<-cbind(zonas,tipo,vivienda2) # une las columnas on hot enconding con la el data frame principal

Posteriormente se normalizan las variables:

normalizado<-scale(vivienda2[,c(10,11,12,13,14)])
vivienda2z<-as.data.frame(cbind(vivienda2[,-c(10,11,12,13,14)],normalizado))

Para determinar el numero de clusters se utilizo el siguiente codigo:

Nota: por efectos de rendimiento el codigo se ejecuto una unica vez y se guardo el resultado como una imagen que se muestra a continuación.

# Determinar el número óptimo de clusters
# fviz_nbclust(vivienda2z, pam, method = "silhouette")

IMAGEN PREVIAMENTE CREADA

knitr::include_graphics("C:/Julio/Calculo K.png")

De acuerdo a los resultados, se indica que los closter ótimos son K=2.

La agrupación de K-Prototipos es una extensión de la agrupación de K-Medias en la que se puede manejar datos tanto numéricos como categóricos. El algoritmo funciona asignando puntos de datos numéricos al centroide más cercano utilizando la distancia euclidiana, y puntos de datos categóricos al modo más cercano utilizando una distancia de coincidencia simple.

# se definen las variables categoricas como factor
vivienda$zona=as.factor(vivienda$zona)
vivienda$estrato=as.factor(vivienda$estrato)
vivienda$tipo=as.factor(vivienda$tipo)
vivienda$piso=as.factor(vivienda$piso)
 
# se hace el proceso de clusterig
kproto_result <- kproto(vivienda[,-c(1,11,12)], k = 2)
## # NAs in variables:
##         zona         piso      estrato      preciom    areaconst parqueaderos 
##            0            0            0            0            0            0 
##       banios habitaciones         tipo 
##            0            0            0 
## 0 observation(s) with NAs.
## 
## Estimated lambda: 39122.06
# se imprime el resultado del clustering
head(kproto_result$cluster,n=20)
##  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 
##  2  2  2  2  2  2  2  2  2  1  1  1  1  2  2  2  2  2  2  2
# se agrega el cluster a la bd vivienda
vivienda$cluster <- as.factor(kproto_result$cluster)
vivienda
## # A tibble: 8,319 × 13
## # Groups:   zona, tipo [10]
##       id zona   piso  estrato preciom areaconst parqueaderos banios habitaciones
##    <dbl> <fct>  <fct> <fct>     <dbl>     <dbl>        <dbl>  <dbl>        <dbl>
##  1  1147 Zona … 1     3           250        70            1      3            6
##  2  1169 Zona … 1     3           320       120            1      2            3
##  3  1350 Zona … 1     3           350       220            2      2            4
##  4  5992 Zona … 2     4           400       280            3      5            3
##  5  1212 Zona … 1     5           260        90            1      2            3
##  6  1724 Zona … 1     5           240        87            1      3            3
##  7  2326 Zona … 1     4           220        52            2      2            3
##  8  4386 Zona … 1     5           310       137            2      3            4
##  9  1209 Zona … 2     5           320       150            2      4            6
## 10  1592 Zona … 2     5           780       380            2      3            3
## # ℹ 8,309 more rows
## # ℹ 4 more variables: tipo <fct>, longitud <dbl>, latitud <dbl>, cluster <fct>

En la siguiente gráfica se representa cada uno de los closter para las variables precio y zóna. Se puede identificar que el closter 1, la mayoría de los datos de preciom están por encima del rango 600-700, mientras que las del closter 2 están por debajo del mismo rango.

g7<-ggplot(vivienda, aes(x = zona , y=preciom  , color = cluster)) +
geom_point(size = 2) +
geom_text(aes(label = cluster), vjust = -.8) + # Agregar etiquetas del clúster
theme_classic()+
  ggtitle("Cluster Preciom-Zona")
g7

En la siguiente gráfica se puede observar el comportamiento del closter, incluyendo la variable tipo. Para el tipo apartamento y casa, se identifica que los closter 1 y 2 tienen un comportamiento muy similar a lo señalado en la conclusión de la gráfica Cluster preciom-zona.

g8 <- plot_ly(vivienda, 
                 x = ~zona, 
                 y = ~tipo, 
                 z = ~preciom, 
                 color = ~factor(cluster),
                 type = 'scatter3d',
                 mode = 'markers+text',
                 text = ~cluster,
                 textposition = 'top center',
                 marker = list(size = 5)) %>%
  layout(scene = list(
    xaxis = list(title = 'Zona'),
    yaxis = list(title = 'tipo'),
    zaxis = list(title = 'precio')
  ),
  title = "Cluster Preciom-Zona-tipo")
g8

2.2.3 DESCRIPCIÓN DE CLOSTER

Posteriormente, se realiza un analisis descriptivo agrupado por el cluster generado.

resumen_cluster_precio <- vivienda %>%
  group_by(cluster) %>%
  summarise(
    Promedio_precio = round(mean(preciom,na.rm=TRUE),0),
    Mediana_precio = round(median(preciom,na.rm=TRUE),0),
    Max_precio = round(max(preciom,na.rm=TRUE),0),
    Min_precio = round(min(preciom,na.rm=TRUE),0),
    Desviacion_precio= round(sd(preciom,na.rm=TRUE),0)
  )

resumen_cluster_area <- vivienda %>%
  group_by(cluster) %>%
  summarise(
    Promedio_area = round(mean(areaconst,na.rm=TRUE),0),
    Mediana_area = round(median(areaconst,na.rm=TRUE),0),
    Max_area = round(max(areaconst,na.rm=TRUE),0),
    Min_area = round(min(areaconst,na.rm=TRUE),0),
    Desviacion_arear = round(sd(areaconst,na.rm=TRUE),0)
  )

resumen_cluster_precio
## # A tibble: 2 × 6
##   cluster Promedio_precio Mediana_precio Max_precio Min_precio Desviacion_precio
##   <fct>             <dbl>          <dbl>      <dbl>      <dbl>             <dbl>
## 1 1                  1004            900       1999        255               324
## 2 2                   307            290        730         58               142
resumen_cluster_area
## # A tibble: 2 × 6
##   cluster Promedio_area Mediana_area Max_area Min_area Desviacion_arear
##   <fct>           <dbl>        <dbl>    <dbl>    <dbl>            <dbl>
## 1 1                 362          310     1745      100              189
## 2 2                 133          104     1365       30               87
ggplot(vivienda, aes(x = cluster  , y = preciom)) +
  geom_boxplot() +
  labs(x = "Cluster", y = "Valor", title = "Boxplot de precio por cluster")

ggplot(vivienda, aes(x = cluster  , y = areaconst)) +
  geom_boxplot() +
  labs(x = "Cluster", y = "Valor", title = "Boxplot de area por cluster")

2.2.3. CONCLUSIONES DEL CLUSTER

  • El Cluster 1 agrupa las variables con mayor valor comercial en el mercado. En las gráficas: cluster preciom-zona y boxplot por cluster se puede identificar el comportamiento de los precios de las viviendas, los cuales varían entre 255 millones hasta los 1999, con una mediana de 900 millones y SD de 324 millones. Por lo que se podría concluir que en el CLuster 2 se agruparon las viviendas de mayor valor comercial.

  • El Cluster 2 agrupa variables con menor valor comercial respecto al cluster 1. En la gráfica Cluster precio-zona se puede identificar el comportamiento de los precios de las viviendas, los cuales varían entre 58 millones y 730 millones, con mediana de 290 y SD de 142 millones.

2.3. ANÁLISIS DE CORRESPONDENCIA

**2.3.1. CREACIÓN DE TABLAS DE CONTINGENCIA

Para poder analizar la relación entre las variables categóricas, se emplea el análisis de correspondencia. para esto se crean las tablas de contingencia para las combinaciones posibles entre las variables categóricas del dataset: zona, tipo y estrato.

# Crear tablas de contingencia para todas las combinaciones posibles

tabla1 <- table(vivienda$zona, vivienda$tipo)

tabla2 <- table(vivienda$zona, vivienda$estrato)

tabla3 <- table(vivienda$zona, vivienda$piso)

tabla4 <- table(vivienda$tipo, vivienda$estrato)

tabla5 <- table(vivienda$tipo, vivienda$piso)

tabla6 <- table(vivienda$estrato, vivienda$piso)

# Imprimir las tablas
print("Tabla 1: Zona vs Tipo")
## [1] "Tabla 1: Zona vs Tipo"
print(tabla1)
##               
##                Apartamento Casa
##   Zona Centro           24  100
##   Zona Norte          1199  721
##   Zona Oeste          1035  163
##   Zona Oriente          63  288
##   Zona Sur            2790 1936
print("Tabla 2: Zona vs Estrato")
## [1] "Tabla 2: Zona vs Estrato"
print(tabla2)
##               
##                   3    4    5    6
##   Zona Centro   105   14    4    1
##   Zona Norte    572  407  769  172
##   Zona Oeste     54   84  290  770
##   Zona Oriente  340    8    2    1
##   Zona Sur      382 1616 1685 1043
print("Tabla 3: Zona vs Piso")
## [1] "Tabla 3: Zona vs Piso"
print(tabla3)
##               
##                   1    2    3    4    5    6    7    8    9   10   11   12
##   Zona Centro    79   16    8    5   14    0    0    0    0    0    2    0
##   Zona Norte    177  665  598  129  117   33   33   39   32   27   33   37
##   Zona Oeste     86  188  460   99   84   80   57   43   41   28   20   12
##   Zona Oriente  217   63   54    8    8    0    0    0    0    1    0    0
##   Zona Sur      490 1598  712  366  975  132  114  129   73   74   29   34
print("Tabla 4: Tipo vs Estrato")
## [1] "Tabla 4: Tipo vs Estrato"
print(tabla4)
##              
##                  3    4    5    6
##   Apartamento  641 1408 1770 1292
##   Casa         812  721  980  695
print("Tabla 5: Tipo vs Piso")
## [1] "Tabla 5: Tipo vs Piso"
print(tabla5)
##              
##                  1    2    3    4    5    6    7    8    9   10   11   12
##   Apartamento  445  512 1308  545 1198  245  204  211  146  130   84   83
##   Casa         604 2018  524   62    0    0    0    0    0    0    0    0
print("Tabla 6: Estrato vs Piso")
## [1] "Tabla 6: Estrato vs Piso"
print(tabla6)
##    
##       1   2   3   4   5   6   7   8   9  10  11  12
##   3 391 438 335  96 177   2   2   7   0   3   2   0
##   4 215 609 418 178 410  56  64  71  44  38  14  12
##   5 277 854 564 209 381 104  86  80  53  58  39  45
##   6 166 629 515 124 230  83  52  53  49  31  29  26

En las anteriores tablas se muestra la frecuencia con que ocurren combinaciones específicas de valores entre cada una de las posibles combinaciones de variables.

2.3.2. PRUEBA DE CHI CUADRADO

Para identificar si existe una asociación significativa entre cada uno de los pares de las variables categóricas relacionadas en el anterior numeral, se emplea la prueba de Chi-Cuadrado.

Las hipótesis son:

  • Ho: Las Variables son independientes
  • Ha: Las variables no son independientes.
pruebat1<-chisq.test(tabla1)
pruebat2<-chisq.test(tabla2)
pruebat3<-chisq.test(tabla3)
pruebat4<-chisq.test(tabla4)
pruebat5<-chisq.test(tabla5)
pruebat6<-chisq.test(tabla6)

En la siguiente tabla se observan los resultados de la prueba de chi-cuadrado:

resultados_chi2 <- data.frame(
  Variables = c("Zona vs Tipo", "Zona vs Estrato", "Zona vs Piso", 
                "Tipo vs Estrato", "Tipo vs Piso", "Estrato vs Piso"),
  P_Value = c(pruebat1$p.value, pruebat2$p.value, pruebat3$p.value, 
              pruebat4$p.value, pruebat5$p.value, pruebat6$p.value)
)

# Ver el dataframe
print(resultados_chi2)
##         Variables       P_Value
## 1    Zona vs Tipo 3.209837e-150
## 2 Zona vs Estrato  0.000000e+00
## 3    Zona vs Piso  0.000000e+00
## 4 Tipo vs Estrato  2.075534e-48
## 5    Tipo vs Piso  0.000000e+00
## 6 Estrato vs Piso 1.187029e-107

CONCLUSIÓN

Dado los valores de las pruebas de chi-cuadrado, se puede concluir que no existe suficiente evidencia para aceptar la Ho, por tal razón se concluye que todos los pares de variables del numeral 2.3.1. no son independientes.

2.3.3. PORCENTAJE DE VARIANZA EXPLICADO

En las siguientes tablas y graficas podemos identificar el porcentaje de varianza explicado de cada uno de los pares de variables analizados.

2.3.3.1. ANALISIS DE CORRESPONDENCIA ZONA-TIPO

# Análisis de Correspondencias 1
resultados_ac1 <- CA(tabla1)
resultados_ac1
## **Results of the Correspondence Analysis (CA)**
## The row variable has  5  categories; the column variable has 2 categories
## The chi square of independence between the two variables is equal to 700.1651 (p-value =  3.209837e-150 ).
## *The results are available in the following objects:
## 
##    name              description                   
## 1  "$eig"            "eigenvalues"                 
## 2  "$col"            "results for the columns"     
## 3  "$col$coord"      "coord. for the columns"      
## 4  "$col$cos2"       "cos2 for the columns"        
## 5  "$col$contrib"    "contributions of the columns"
## 6  "$row"            "results for the rows"        
## 7  "$row$coord"      "coord. for the rows"         
## 8  "$row$cos2"       "cos2 for the rows"           
## 9  "$row$contrib"    "contributions of the rows"   
## 10 "$call"           "summary called parameters"   
## 11 "$call$marge.col" "weights of the columns"      
## 12 "$call$marge.row" "weights of the rows"
valores_prop1 <- resultados_ac1$eig
valores_prop1
##       eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.08416458                    100                               100

2.3.3.2. ANALISIS DE CORRESPONDENCIA ZONA-ESTRATO

# Análisis de Correspondencias 2

resultados_ac2 <- CA(tabla2)

resultados_ac2
## **Results of the Correspondence Analysis (CA)**
## The row variable has  5  categories; the column variable has 4 categories
## The chi square of independence between the two variables is equal to 3830.435 (p-value =  0 ).
## *The results are available in the following objects:
## 
##    name              description                   
## 1  "$eig"            "eigenvalues"                 
## 2  "$col"            "results for the columns"     
## 3  "$col$coord"      "coord. for the columns"      
## 4  "$col$cos2"       "cos2 for the columns"        
## 5  "$col$contrib"    "contributions of the columns"
## 6  "$row"            "results for the rows"        
## 7  "$row$coord"      "coord. for the rows"         
## 8  "$row$cos2"       "cos2 for the rows"           
## 9  "$row$contrib"    "contributions of the rows"   
## 10 "$call"           "summary called parameters"   
## 11 "$call$marge.col" "weights of the columns"      
## 12 "$call$marge.row" "weights of the rows"
valores_prop2 <- resultados_ac2$eig
valores_prop2
##       eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.32215213              69.965515                          69.96551
## dim 2 0.12745096              27.680002                          97.64552
## dim 3 0.01084108               2.354483                         100.00000

2.3.3.3. ANALISIS DE CORRESPONDENCIA ZONA-PISO

# Análisis de Correspondencias 3
resultados_ac3 <- CA(tabla3)

resultados_ac3
## **Results of the Correspondence Analysis (CA)**
## The row variable has  5  categories; the column variable has 12 categories
## The chi square of independence between the two variables is equal to 2035.171 (p-value =  0 ).
## *The results are available in the following objects:
## 
##    name              description                   
## 1  "$eig"            "eigenvalues"                 
## 2  "$col"            "results for the columns"     
## 3  "$col$coord"      "coord. for the columns"      
## 4  "$col$cos2"       "cos2 for the columns"        
## 5  "$col$contrib"    "contributions of the columns"
## 6  "$row"            "results for the rows"        
## 7  "$row$coord"      "coord. for the rows"         
## 8  "$row$cos2"       "cos2 for the rows"           
## 9  "$row$contrib"    "contributions of the rows"   
## 10 "$call"           "summary called parameters"   
## 11 "$call$marge.col" "weights of the columns"      
## 12 "$call$marge.row" "weights of the rows"
valores_prop3 <- resultados_ac3$eig
valores_prop3
##         eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.1401995467             57.3082082                          57.30821
## dim 2 0.0814038931             33.2747955                          90.58300
## dim 3 0.0223410068              9.1321484                          99.71515
## dim 4 0.0006968556              0.2848479                         100.00000

2.3.3.4. ANALISIS DE CORRESPONDENCIA TIPO-ESTRATO

# Análisis de Correspondencias 4

resultados_ac4 <- CA(tabla4)
resultados_ac4
## **Results of the Correspondence Analysis (CA)**
## The row variable has  2  categories; the column variable has 4 categories
## The chi square of independence between the two variables is equal to 224.5591 (p-value =  2.075534e-48 ).
## *The results are available in the following objects:
## 
##    name              description                   
## 1  "$eig"            "eigenvalues"                 
## 2  "$col"            "results for the columns"     
## 3  "$col$coord"      "coord. for the columns"      
## 4  "$col$cos2"       "cos2 for the columns"        
## 5  "$col$contrib"    "contributions of the columns"
## 6  "$row"            "results for the rows"        
## 7  "$row$coord"      "coord. for the rows"         
## 8  "$row$cos2"       "cos2 for the rows"           
## 9  "$row$contrib"    "contributions of the rows"   
## 10 "$call"           "summary called parameters"   
## 11 "$call$marge.col" "weights of the columns"      
## 12 "$call$marge.row" "weights of the rows"
valores_prop4 <- resultados_ac4$eig
valores_prop4
##       eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.02699353                    100                               100

2.3.3.5. ANALISIS DE CORRESPONDENCIA TIPO-PISO

# Análisis de Correspondencias 5
resultados_ac5 <- CA(tabla5)
resultados_ac5
## **Results of the Correspondence Analysis (CA)**
## The row variable has  2  categories; the column variable has 12 categories
## The chi square of independence between the two variables is equal to 3699.679 (p-value =  0 ).
## *The results are available in the following objects:
## 
##    name              description                   
## 1  "$eig"            "eigenvalues"                 
## 2  "$col"            "results for the columns"     
## 3  "$col$coord"      "coord. for the columns"      
## 4  "$col$cos2"       "cos2 for the columns"        
## 5  "$col$contrib"    "contributions of the columns"
## 6  "$row"            "results for the rows"        
## 7  "$row$coord"      "coord. for the rows"         
## 8  "$row$cos2"       "cos2 for the rows"           
## 9  "$row$contrib"    "contributions of the rows"   
## 10 "$call"           "summary called parameters"   
## 11 "$call$marge.col" "weights of the columns"      
## 12 "$call$marge.row" "weights of the rows"
valores_prop5 <- resultados_ac5$eig
valores_prop5
##       eigenvalue percentage of variance cumulative percentage of variance
## dim 1  0.4447264                    100                               100

2.3.3.6. ANALISIS DE CORRESPONDENCIA ESTRATO-PISO

# Análisis de Correspondencias 6
resultados_ac6 <- CA(tabla6)

resultados_ac6
## **Results of the Correspondence Analysis (CA)**
## The row variable has  4  categories; the column variable has 12 categories
## The chi square of independence between the two variables is equal to 611.3571 (p-value =  1.187029e-107 ).
## *The results are available in the following objects:
## 
##    name              description                   
## 1  "$eig"            "eigenvalues"                 
## 2  "$col"            "results for the columns"     
## 3  "$col$coord"      "coord. for the columns"      
## 4  "$col$cos2"       "cos2 for the columns"        
## 5  "$col$contrib"    "contributions of the columns"
## 6  "$row"            "results for the rows"        
## 7  "$row$coord"      "coord. for the rows"         
## 8  "$row$cos2"       "cos2 for the rows"           
## 9  "$row$contrib"    "contributions of the rows"   
## 10 "$call"           "summary called parameters"   
## 11 "$call$marge.col" "weights of the columns"      
## 12 "$call$marge.row" "weights of the rows"
valores_prop6 <- resultados_ac6$eig
valores_prop6
##        eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.059394631              80.820845                          80.82084
## dim 2 0.011570233              15.744117                          96.56496
## dim 3 0.002524384               3.435038                         100.00000

CONCLUSIONES

  • Zona - Tipo: Se identifica una sola dimensión para la correspondencia de ambas variables, por lo que dicha dimensión puede explicar el comportamiento de ambas variables. Es posible que estas variables tengan una relación clara. Dado que solo se cuenta con una dimensión, no se genera gráfica de CA factor map.

  • Zona - Estrato: Esta correspondencia se explica en 3 dimensiones, de las cuales las 2 primeras son suficientes para explicar el 97% de la varianza entre ambas variables. Es importante resaltar que los estratos 3 se relacionan principalmente con la zona oriente y centro, mientras que la zona oeste con el estrato 6 y las zonas sur y norte con los estratos 5 y 6.

  • Zona - Piso: Esta correspondencia se explica en 4 dimensiones, de las cuales las 2 primeras podrían explicar el 90% de la varianza. Las 3 primeras el 99% de la varianza. Se identifica que la zona norte y oeste se relacionan principalmente con los pisos 3, 6, 7, 9, 10, 11 y 12, la zona sur con los pisos 2, 4, 5 y 8. Y las zonas oriente y centro con el piso 1.

  • tipo-estrato: Se identifica una sola dimensión para la correspondencia de ambas variables, por lo que dicha dimensión puede explicar el comportamiento de ambas variables. Es posible que estas variables tengan una relación clara. Dado que solo se cuenta con una dimensión, no se genera gráfica de CA factor map.

  • Tipo-Piso: Se identifica una sola dimensión para la correspondencia de ambas variables, por lo que dicha dimensión puede explicar el comportamiento de ambas variables. Es posible que estas variables tengan una relación clara. Dado que solo se cuenta con una dimensión, no se genera gráfica de CA factor map.

  • Estato-Piso: Se identifican 3 dimensiones para la correspondencia entre ambas variables, de las cuales las 2 primeras pueden explicar el 96% de la varianza entre ambas. El estrato 3 tiene una correspondencia cercana al piso 1, mientras que el 4 con los pisos 4, 5, 7,8 y 9; y los estratos 6 y 7 con los pisos 2, 3 6, 9 , 11 y 12.

3. ANÁLISIS DE RESULTADOS

3.1. CONCLUSIONES GENERALES

  • Se realizó un análisis de componentes principales, el cual podría emplearse para explicar el 86% de la varianza entre las variables parqueaderos, preciom, areaconst, banios y habitaciones. Es importante relacionar que este análisis se realizó sobre dichas variables dado que este aplica para solo para las variables tipo numéricas.

  • Se realizó un análisis de conglomerados, para identificar los tipos de observaciones que tienen una mayor relación entre si. Se identificaron 2 tipos de Closter óptimos, los cuales se podrían explicar adecuadamente con lo siguiente: El Closter 1 se da principalmente en variables con un preciom que varían entre 255 millones hasta los 1999, con una mediana de 900 millones y SD de 324 millones; el Closter 2 con precios que varían entre 58 millones y 730 millones, con mediana de 290 y SD de 142 millones.

  • Se identifica que las variables zona, tipo, estrato y piso tienen una dependencia entre estas, dados los resultados de la prueba de chí-cuadrado.

3.2. RECOMENDACIONES

  • Teniendo en cuenta que los precios de las viviendas es un factor decisivo a la hora de que un cliente tome una decisión, es importante tener en cuenta los resultados descritos en el numeral 2.2. de este informe, ya que se presentan dos tipos de Closter los cuales pueden ser explicados de acuerdo con el precio del inmueble. Adicionalmente se presenta una gráfica la cual podría ser empleada para realizar un análisis más exhaustivo a la hora de definir un nicho de mercado y zona sobre la cual plantear las estrategias operativas de mercadeo y venta.

  • Es importante que se tenga presente los resultados de correspondencia y conglomerados, dado que en este se presenta de forma estadística la relación entre las diferentes variables según el tipo de variable. Esto con el fin de poder definir estrategias de mercado según las características de cada vivienda con relación a las características que esta tiene.