EVIDENCIA 1

##LEER LIBRERIAS

library(readr)
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
library(cluster)
library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
library(rpart)
library(rpart.plot)
library(party)
## Loading required package: grid
## Loading required package: mvtnorm
## Loading required package: modeltools
## Loading required package: stats4
## Loading required package: strucchange
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## Loading required package: sandwich
## 
## Attaching package: 'party'
## The following object is masked from 'package:dplyr':
## 
##     where
library(gmodels)

##LEER LA BASE DE DATOS #Empezamos importando la base de datos llamada “Datos bienens y raicez CDMX, la cua contiene información sobre:

#CARACTERÍSTICAS DE LA ALCALDIA: Contiene información sobre el comportamiento de la población y caracterísitcas que no disponen las viviendas; todo esto con cantidades de porcentajes.

#CARACTERÍSTICAS DEL DEPARTAMENTO: Contiene información sobre amenidades y características que contienen las casas; pero algo muy importante es que tambien viene el precio, algo que se pronosticara en lo siguiente.

df <- read.csv("C:/Users/User-1/OneDrive/Escritorio/TRABAJO/TEC 5to/Minería de datos/Datos bienes y raices CDMX.csv")

###PARTE 1 K-MEANS ##ESTABLECER LAS VARIABLES PARA LOS CLUSTERS #Debido a que contenemos una base de datos con dos características diferentes entre si, se tomo la desición de realizar el Método K-Means para las características de alcaldía, debido a que los datos se encuentran muy heterogeneos. #Es por eso que realizaremos el método en los sigueintes pasos:

##Paso 1 #Seleccionamos las variables que se necesitan y las escalamos, lo cual quiere decir que las vamos a estandarizar.

# Seleccionar las columnas numéricas
datos <- df %>% select(X1,X2,X3,X4,X5,X6,X7,X8,X9,X10)

# Escalar las columnas numéricas = ESTANDARIZAR VARIABLES
df_scaled <- scale(datos)

##Paso 2 ## IDENTIFICAR Y ELIMINAR OUTLIERS #Se identifican los datos outliers, con el fin de obtener valores o pronosticos más concretos.Así que se realiza una formula, para posteriormente…

df_IQR <- apply(datos, 2, IQR)
lower_lim <- colMeans(datos) - 1.5 * df_IQR
upper_lim <- colMeans(datos) + 1.5 * df_IQR

#..Aplicarla en cada columna, con el fin de identificar que datos son atípicos en cada una de ellas.

# Aplicar fórmula a cada columna
outliers_index <- sapply(1:ncol(datos), function(i) {
  x <- datos[, i]
  lower <- lower_lim[i]
  upper <- upper_lim[i]
  x < lower | x > upper
})

#Posteriormente se remplazan los valores por NA para así poder eliminar las filas que contengan el valor NA.

# Reemplazar outliers por NA
datos[outliers_index] <- NA

# Eliminar filas con al menos un NA
df_sin_outliers <- na.omit(datos)
df_final <- scale(df_sin_outliers)

BOXPLOTS PARA CONFIRMAR ELIMINACIÓN DE OUTLIERS

#Ya que se obtuvo la base de datos sin valores atípicos, realizaremos un Boxplot, para visualizar el cambio entre ellas.

##Boxplot Original #Contiene la base de datos que contiene los datos atípicos.

boxplot(df_scaled, main = "Boxplot Original", col = "pink", outline = TRUE)

##Boxplot sin Outliers #Contiene la base de datos sin los datos atípicos.

boxplot(df_final, main = "Boxplot sin Outliers", col = "lightgreen", outline = TRUE)

##Paso 3 ##CREAR LA GRÁFICA DEL MÉTODO DE CODO #Ya que tenemos la base de datos que no tiene outliers “df_final”, se empieza a realizar el Método de Codo, el cual ayuda a identificar el número de centroides indicado para crear los clusters.

# Ajustar el modelo k-means para diferentes valores de k

# Para reproducibilidad
set.seed(123)

# Inicializar vector para almacenar los valores de WCSS
wcss <- vector()

# Se elige 10 para seleccionar los posibles clusters
max_k <- 10 
for (k in 1:max_k) {
  if (k <= nrow(unique(df_final))) {
    kmeans_model <- kmeans(df_final, centers = k, nstart = 25)
    wcss[k] <- kmeans_model$tot.withinss
  } else {
    wcss[k] <- NA 
  }
}

# Graficar el método del codo
par(mar = c(4, 4, 1, 1)) 
plot(1:max_k, wcss, type = "b", xlab = "Número de Clusters", ylab = "WCSS", main = "Método del Codo", pch = 19, frame = FALSE)

##Paso 4 ##CREAMOS LOS CLUSTERS EN BASE A LA GRÁFICA DEL Método de Codo #Despues de realizar el Método de codo, nos dirigimos a realizar los clusters o agrupaciones por medio de K-means, el cual tendra un númeor de 4 centroides. #Para así obtener una matriz que demuestra el impacto que tiene cada cluster en cada variable y así poder obtener una descripción de como serían las agrupaciones de cada cluster dependiendo del número que tenga el cluster.

# Establecer una semilla para la reproductibilidad
set.seed(123)

# Realizar K-means con 4 clusters
kmeans_result <- kmeans(df_final, centers = 4)
kmeans_result$centers
##           X1         X2         X3         X4         X5         X6         X7
## 1  0.8314662 -0.3586445  0.9675389  0.9367994  0.8660707  0.9438233  0.9911373
## 2 -2.1990960  1.2947616 -1.6554356 -2.0452878 -1.6800239 -2.0291144 -0.3598556
## 3 -0.4570202 -0.6789151 -1.2698971 -0.5760280 -0.3647032 -0.9194508 -0.9685340
## 4 -0.5268283  0.7432203 -0.3393433 -0.6650092 -0.7865922 -0.4432939 -0.9294905
##           X8         X9        X10
## 1  0.9553635  0.7290993  0.9695844
## 2 -1.0169981 -0.9373571 -1.4709905
## 3 -0.6602166  0.6868164 -0.1516592
## 4 -0.9090248 -1.4764223 -1.1662997

###DEFINICIÓN DE CADA CLUSTER

##Cluster 1: ALCALDÍAS CON EXCASOS RECURSOS

#Este cluster contiene a una población que carece mucho de los recursos báscios, como lo es en el tema de la educación, este grupo tiene a la mayor población de 15 años analfabeta, apesar de que la gente de 6 a 14 años que no asiste a la escuela, no es la más grande a comparación de otros grupos, pero apartir de los 15 a 24 años la población pasa a ser la que tiene más personas que no asisten a la escuela, dando como resultado el mayor número de personas que no terminaron la escuela a comparación de otros grupos; pero al hablar del tema de los servicios básicos como la salud, nos damos cuenta que sigue siendo el grupo con mayor población sin acceso a los servicios. Pero en el tema de la vivienda, vemos que es el que presenta los valores más altos a comparación de todos los clusters que se realizaron, destacando en mayor población con hacinamiento en las viviendas, mayor número de casas sin acceso a agua y energía electrica, y para la tecnolgía las viviendas con mayor porcentaje de personas que no disponen de un celular o de una computadora.

##Cluster 2:ALCALDÍA CON RECURSOS ALTOS

#El cluster número dos es el que presenta el mejor escenario ante otros; como se puede ver en el ámbito académico, es el grupo que tiene a la gente menos analfabeta, a pesar de que la población de 6 a 14 años que no asiste a la escuela es la número uno ante otros, pero cuando estan en la edad de 15 a 24 años son los que menor población tienen en no asistir a la escuela, convirtiendose asi en la población con menor índice de personas que no terminaron la escuela. #Y al igual que se demuestra con lo académico, lo podemos ver en los recursos básicos de vivienda demostrando que es el que tiene menor hacinamiento de vivienda ante otros, y la mayoría de las viviendas cuentan con acceso a recursos como el agua y la energía electrica, conviertiendose en una población que dispone de mas computadoras y celulares; por ende siendo de las poblaciones con un mejor impacto en todas las áreas tendra un mejor acceso a los servicios de salud.

##Cluster 3: ALCALDÍA CON RECURSOS MEDIOS EN CRECIMIENTO

#El tercer cluster cuenta con genete analfabeta, pero no tan grande como a comparación de los otros grupos, es por eso que en el nivel de educación se identifican como un índice muy bajo en personas que de 6 a 24 años no asisten a la escuela, dando como resultado un valor menor de las personas que no terminaron la escuela.Al hablar de los servicios básicos de vivienda, podemos ver que tienen un menor número de viviendas que no disponen de agua ni energía eléctrica, teniendo un menor hacinamiento ante otras alcaldías; y al tener en cuenta el acceso a la tecnología no tienen acceso a los celulares, pero que si dispone de computadoras.

##Cluster 4: ALCALDIA CON RECURSOS MEDIOS #El ultimo cluster cuenta con población analfabeta pero no tiene tanta a comparación del primero, asi que al hablar de educación si cuenta con personas de 6 a 24 años que no asiste a la escuela, pero no es mucha a coparación de los otros grupos de alcaldias, demostrando que tienen pocas personas que no terminaron la escuela; y al mencionar los factores de los recursos básicos como la salud, se demuestra que pocas personas no tienen acceso a los servicios de salud, pero en vivienda cuentan con un menor hacinamiento y tienen acceso a los servicios de agua y energía electrica, demostrando que son de las poblaciones que más aparatos electrónicos como el celular y la computadora tienen.

##TRANSPONEMOS LOS DATOS PARA PODER CREAR EL GRÁFICO #Ya que tenemos la matríz, procedemos a transponer los datos para un mejor uno se la tabla y así poder obtener el gráfico.

# Transponer la matriz para que las filas representen variables y las columnas representen centros de clústeres
centros_transpuestos <- t(kmeans_result$centers)
centros_transpuestos
##              1          2          3          4
## X1   0.8314662 -2.1990960 -0.4570202 -0.5268283
## X2  -0.3586445  1.2947616 -0.6789151  0.7432203
## X3   0.9675389 -1.6554356 -1.2698971 -0.3393433
## X4   0.9367994 -2.0452878 -0.5760280 -0.6650092
## X5   0.8660707 -1.6800239 -0.3647032 -0.7865922
## X6   0.9438233 -2.0291144 -0.9194508 -0.4432939
## X7   0.9911373 -0.3598556 -0.9685340 -0.9294905
## X8   0.9553635 -1.0169981 -0.6602166 -0.9090248
## X9   0.7290993 -0.9373571  0.6868164 -1.4764223
## X10  0.9695844 -1.4709905 -0.1516592 -1.1662997

##GRÁFICO DE CLUSTERS DE K-MEANS #Se obtiene el gráfico de los Clusters y se visualiza el comportamiento entre ellos.

# Crear un vector de colores para diferenciar cada clúster
colores <- c("heat.colors"(10))

# Graficar un barplot para cada centro de clúster
barplot(centros_transpuestos, beside = TRUE, col = colores, 
        legend.text = rownames(kmeans_result$centers), ylim = c(min(centros_transpuestos), max(centros_transpuestos)),
        main = "Centros de Clústeres de K-means", 
        ylab = "Valores", 
        xlab = "Clusters")

# Añadir una leyenda para identificar cada clúster
legend("topright", legend = paste("Clúster", 1:nrow(kmeans_result$centers)), fill = colores)

#Finalmente ya obtivimos los Clusters y su comportamiento que tienen en cada característica, tanto visual como en texto, procedemos a realizar la parte de la siguiente fase,

PARTE 2- ARBOLES DE DESICIONES

#Ya que tenemos los clusters creados, realizaremos un análisis de cada uno de ellos por medio del Método del Arbol.

#Para eso tenemos que cambiar todas las columnas restantes que son parte de las caracterísitcas del departamente de caracter a factor.

df$Colonia <- as.factor(df$Colonia)
df$Cocina_equip <- as.factor(df$Cocina_equip)
df$GimnaSio <- as.factor(df$GimnaSio)
df$Amueblado <- as.factor(df$Amueblado)
df$Alberca <- as.factor(df$Alberca)
df$Terraza <- as.factor(df$Terraza)
df$Elevador <- as.factor(df$Elevador)
df$Estacionamiento <- as.factor(df$Estacionamiento)

str(df)
## 'data.frame':    658 obs. of  23 variables:
##  $ Alcaldia       : chr  "La Magdalena Contreras" "Tlahuac" "Cuajimalpa" "Tlahuac" ...
##  $ Colonia        : Factor w/ 312 levels "Acacias","Agricola Pantitlan",..: 215 303 20 113 151 141 178 95 262 153 ...
##  $ X1             : num  1.86 1.54 1.55 1.54 1.54 1.54 0.61 1.34 2.3 1.02 ...
##  $ X2             : num  5.62 4.5 5.76 4.5 4.5 4.5 5.57 5.68 4.57 6.37 ...
##  $ X3             : num  47.8 46.6 44.4 46.6 46.6 ...
##  $ X4             : num  21.7 20.1 18.9 20.1 20.1 ...
##  $ X5             : num  32.2 26.8 24.4 26.8 26.8 ...
##  $ X6             : num  4.54 5.04 4.17 5.04 5.04 5.04 1.06 3.19 6.81 2.28 ...
##  $ X7             : num  0.71 0.96 0.43 0.96 0.96 ...
##  $ X8             : num  0.17 0.1 0.06 0.1 0.1 0.1 0.03 0.03 0.17 0.04 ...
##  $ X9             : num  9.56 9.61 6.68 9.61 9.61 9.61 4.5 6.98 8.25 8.15 ...
##  $ X10            : num  50.1 52.8 39.6 52.8 52.8 ...
##  $ Cocina_equip   : Factor w/ 2 levels "No","Si": 2 2 2 1 1 1 2 2 2 2 ...
##  $ GimnaSio       : Factor w/ 2 levels "No","Si": 2 1 2 1 1 1 2 2 1 1 ...
##  $ Amueblado      : Factor w/ 2 levels "No","Si": 1 1 1 1 1 1 1 1 1 1 ...
##  $ Alberca        : Factor w/ 2 levels "No","Si": 1 1 1 1 1 1 1 1 1 1 ...
##  $ Terraza        : Factor w/ 2 levels "No","Si": 2 1 2 1 1 1 2 2 1 1 ...
##  $ Elevador       : Factor w/ 2 levels "No","Si": 2 1 2 1 1 1 2 2 1 1 ...
##  $ m2_construido  : int  150 51 305 42 50 80 163 144 50 64 ...
##  $ Banos          : num  2 1 3 1 1 1 2 2.5 1 1 ...
##  $ Recamaras      : int  3 2 3 2 2 2 3 3 2 2 ...
##  $ Estacionamiento: Factor w/ 7 levels "0","1","2","3",..: 3 2 4 2 2 2 3 3 2 1 ...
##  $ Precio         : int  6500 1200 17500 1046 1195 388 12738 7150 2950 950 ...

##UNION DE LOS CLUSTERS A LA BASE DE DATOS PRINCIPAL #Anteriormente se realizo una seleccion de variables para llevar acabo el método de K-means, pero ahora estos resultados que son los clusters, los uniremos a la base de datos original para así poder crear un arbol de desiciones.

df$clusters <- kmeans_result$cluster[match(1:nrow(df), row(df))]
summary(df)
##    Alcaldia                         Colonia          X1              X2       
##  Length:658         Santa Fe            : 29   Min.   :0.350   Min.   :3.810  
##  Class :character   Polanco             : 22   1st Qu.:0.960   1st Qu.:4.980  
##  Mode  :character   San Angel           : 13   Median :1.400   Median :5.620  
##                     Miguel Hidalgo      : 11   Mean   :1.356   Mean   :5.371  
##                     San Jeronimo Lindice: 11   3rd Qu.:1.550   3rd Qu.:5.680  
##                     Lomas Estrella      : 10   Max.   :2.800   Max.   :6.780  
##                     (Other)             :562                                  
##        X3              X4              X5              X6       
##  Min.   :31.70   Min.   : 6.07   Min.   :18.46   Min.   :0.480  
##  1st Qu.:40.21   1st Qu.:15.50   1st Qu.:23.74   1st Qu.:1.830  
##  Median :42.85   Median :18.21   Median :25.42   Median :3.190  
##  Mean   :42.34   Mean   :17.24   Mean   :26.25   Mean   :3.395  
##  3rd Qu.:46.56   3rd Qu.:20.05   3rd Qu.:28.25   3rd Qu.:4.540  
##  Max.   :51.23   Max.   :23.46   Max.   :32.20   Max.   :8.530  
##                                                                 
##        X7               X8                X9              X10       
##  Min.   : 0.030   Min.   :0.02000   Min.   : 3.170   Min.   :15.15  
##  1st Qu.: 0.110   1st Qu.:0.03000   1st Qu.: 6.335   1st Qu.:35.22  
##  Median : 0.300   Median :0.05000   Median : 8.150   Median :39.65  
##  Mean   : 1.022   Mean   :0.07801   Mean   : 7.825   Mean   :40.16  
##  3rd Qu.: 0.710   3rd Qu.:0.10000   3rd Qu.: 9.560   3rd Qu.:50.08  
##  Max.   :10.210   Max.   :0.23000   Max.   :13.060   Max.   :63.97  
##                                                                     
##  Cocina_equip GimnaSio Amueblado Alberca  Terraza  Elevador m2_construido  
##  No: 62       No:474   No:644    No:546   No:340   No:300   Min.   : 34.0  
##  Si:596       Si:184   Si: 14    Si:112   Si:318   Si:358   1st Qu.: 58.0  
##                                                             Median : 72.5  
##                                                             Mean   :103.3  
##                                                             3rd Qu.:120.0  
##                                                             Max.   :500.0  
##                                                                            
##      Banos         Recamaras     Estacionamiento     Precio        
##  Min.   :1.000   Min.   :1.000   0 : 43          Min.   :     1.0  
##  1st Qu.:1.000   1st Qu.:2.000   1 :384          1st Qu.:   861.8  
##  Median :1.000   Median :2.000   2 :163          Median :  1934.0  
##  Mean   :1.685   Mean   :2.318   3 : 54          Mean   :  4283.8  
##  3rd Qu.:2.000   3rd Qu.:3.000   4 : 11          3rd Qu.:  5542.0  
##  Max.   :5.000   Max.   :5.000   5 :  2          Max.   :128524.0  
##                                  Si:  1                            
##     clusters    
##  Min.   :1.000  
##  1st Qu.:1.000  
##  Median :2.000  
##  Mean   :2.268  
##  3rd Qu.:4.000  
##  Max.   :4.000  
##  NA's   :240

##SE CREA EL ARBOL DE DESICIÓN DEL PRIMER CLUSTER #Empezamos a realizar el arbol de desiciones 1 que nos ayudará a conocer que caracteríticas tiene el cluster número 1. #Y esto se realizará con todos los clusters, hasta conocer las características de cada uno.

arbol_1 <- df %>% filter (clusters == 1) %>%
select(Cocina_equip,GimnaSio,Amueblado,Alberca,Terraza,Elevador,m2_construido,Banos,Recamaras,Estacionamiento,Precio)
arbol_cluster1 <- rpart(arbol_1$Precio ~ .,data=arbol_1)
rpart.plot(arbol_cluster1, extra = 1)

#Para el cluster número 1 tenemos 195 valores, de los cuales parten de un precio inicial de 4266, donde se va dividiendo el nodo inicial en base a los metros cuadrados construidos mayores a 92 m2, el cual se convierte en un nodo final la opción de si, donde se encuentran 140 valores con un precio de 1643. #Pero al continuar analizando los nodos intermedios de la opción “NO”, podemos observar que va incrementando el precio gradualmente, todo esto dependiendo de si cuenta con alberca y el número de metros cuadrados construidos que sean menor o igual a 148. #Por ende tenemos 4 nodos finales: #1- 140 viviendas con un precio aproximado de 1643, con metros construidos menores a 91 m2 #2- 32 viviendas con un precio aproximado de 6361, con metros construidos mayores a 91 m2 y no tienen alberca #3- 16 viviendas con un precio aproximado de 14000, con metros construidos menores o iguales a 148 m2 y si tienen alberca #4- 7 viviendas con un precio aproximado de 24000, con metros construidos mayores a 148 m2 y si tienen alberca

#Recordemos que el color del arbol de desición muestra una ruta optima para poder alcanzar una predicción más esperada, lo cual significa que el color más fuerte tiene un mayor impacto, entonces es más alto el precio.

#SE CREA EL ARBOL DE DESICIÓN DEL SEGUNDO CLUSTER

arbol_2 <- df %>% filter (clusters == 2)%>%
select(Cocina_equip,GimnaSio,Amueblado,Alberca,Terraza,Elevador,m2_construido,Banos,Recamaras,Estacionamiento,Precio)
arbol_cluster2 <- rpart(arbol_2$Precio ~ .,data=arbol_2)
rpart.plot(arbol_cluster2, extra = 1)

#Para el cluster número 2 tenemos 30 valores, de los cuales parten de un precio inicial de 4235, donde se va dividiendo el nodo inicial en base a los metros cuadrados construidos mayores a 108 m2; con este arbol podemos visualizar que ya cuenta con los nodos finales

#Por ende tenemos 2 nodos finales: #1- 23 viviendas con precio aproximado de 1526, con metros construidos menores a 108 m2 #2- 7 viviendas con precio aproximado de 13000, con metros construidos mayores a 108 m2

#Recordemos que el color del arbol de desición muestra una ruta optima para poder alcanzar una predicción más esperada, lo cual significa que el color más fuerte tiene un mayor impacto, entonces es más alto el precio.

#SE CREA EL ARBOL DE DESICIÓN DEL TERCER CLUSTER

arbol_3 <- df %>% filter (clusters == 3)%>%
select(Cocina_equip,GimnaSio,Amueblado,Alberca,Terraza,Elevador,m2_construido,Banos,Recamaras,Estacionamiento,Precio)
arbol_cluster3 <- rpart(arbol_3$Precio ~ .,data=arbol_3)
rpart.plot(arbol_cluster3, extra = 1)

#Para el cluster número 3 tenemos 79 valores, de los cuales parten de un precio inicial de 4796, donde se va dividiendo el nodo inicial en base a los metros cuadrados construidos mayores a 123 m2, seguido de los nodos intermedios con características como el estacionamiento y los metros cosntriudos mayores a 239 m2

#Por ende tenemos 4 nodos finales: #1- 49 viviendas con un precio aproximado de 1300, con metros construidos menores a 123 y que cuentan con 1 estacionamiento. #2- 9 viviendas con un precio aproximado de 4871, con metros construidos menores a 123 y que no cuentan con 1 estacionamiento. #3- 12 viviendas con un precio aproximado de 11000, con metros construidos menores a 239. #4- 9 viviendas con un precio aproximado de 16000, con metros construidos mayores a 239.

#Recordemos que el color del arbol de desición muestra una ruta optima para poder alcanzar una predicción más esperada, lo cual significa que el color más fuerte tiene un mayor impacto, entonces es más alto el precio.

#SE CREA EL ARBOL DE DESICIÓN DEL CUARTO CLUSTER

arbol_4 <- df %>% filter (clusters == 4)%>%
select(Cocina_equip,GimnaSio,Amueblado,Alberca,Terraza,Elevador,m2_construido,Banos,Recamaras,Estacionamiento,Precio)
arbol_cluster4 <- rpart(arbol_4$Precio ~ .,data=arbol_4)
rpart.plot(arbol_cluster4, extra = 1)

#Para el cluster número 4 tenemos 114 valores, de los cuales parten de un precio inicial de 4250, donde se va dividiendo el nodo inicial en base a los metros cuadrados construidos mayores a 137 m2, seguido de los nodos intermedios con características como la terraza y metros cuadrados construidos menores a 84 m2 y mayores a 256 m2.

#Por ende tenemos 5 nodos finales: #1- 46 viviendas con un precio aproximado de 912, con metros construidos menores a 84 m2 y que no cuentan con terraza. #2- 18 viviendas con un precio aproximado de 2494, con metros construidos menores a 84 m2 y que cuentan terraza. #3- 23 viviendas con un precio aproximado de 4411, con metros construidos mayores a 84 m2 #4- 20 viviendas con un precio aproximado de 9542, con metros construidos menores a 256 m2 #5- 7 viviendas con un precio aproximado de 15000, con metros construidos mayores a 256 m2

#Recordemos que el color del arbol de desición muestra una ruta optima para poder alcanzar una predicción más esperada, lo cual significa que el color más fuerte tiene un mayor impacto, entonces es más alto el precio.