Brief Taller 1

En el taller 01, como grupo realizamos una investigación del mercado inmobiliario a nivel estadístico y espacial de Estación Central, comuna ubicada en el centro de Santiago de Chile. Al estar en ese sector, la actividad económica que predomina en el lugar es el comercio, mientras que al hablar de las viviendas, estas son de bajas tanto en superficies (m2), como en número dormitorios y baños, ademÔs de altos pisos construídos. Junto a esto, obtuvimos ciertas características demogrÔficas, pues en la comuna habitan principalmente jóvenes, con una media de 36 años, y los niveles educacionales eran enseñanza bÔsica y media completa.

En este nuevo estudio de la comuna, buscamos estudiar nuevas características para comprender el mercado inmobiliario en la zona, es por esto, que determinaremos clústeres del nivel educacional, pero comprendiendo también como se comportan las comunas vecinas. Por otro lado, analizaremos la distribución de precios y superficies de las viviendas construidas, la concentración de las que estÔn en ventas, separÔndolas en departamentos y casas y finalmente, la concentración de la nueva oferta en Estación Central. Para todo lo anterior, se realizarÔ nuevamente un anÔlisis estadístico y espacial, pero esta vez en los temas especificados antes, y también, se usarÔn las mismas bases de datos

library(readxl)
library(tidyverse)
library(lubridate)
library(dplyr)
library(data.table)
library(caTools)
library(tidyr)
library(ggplot2)
library(ggthemes)
library(caret)
library(margins)
library(rpart)
library(rpart.plot)
library(factoextra)
library(dbscan)
library(rgdal)
library(KernSmooth)
library(classInt)
library(jtools)
library(moderndive)
library(knitr)
library(GGally)

library(sf)
library(sp)
library(spdep)
library(rgdal)

library(rgeos)
library(tmap)
library(tmaptools)
library(spgwr)

library(grid)
library(gridExtra)
library(ggpubr)

Bases de datos

Base_Venta_propiedades <- readRDS("C:/Users/ext_frjorque/Desktop/Taller 2/Propiedades_RM (1).rds")

Base_Permisos <- readRDS("C:/Users/ext_frjorque/Desktop/Taller 2/Permisos_2017 (3).rds")

Base_Censo <- readRDS("C:/Users/ext_frjorque/Desktop/Taller 2/personas_2017.rds")  #personas 17

Base_viviendas <- readRDS("C:/Users/ext_frjorque/Desktop/Taller 2/viviendas_2017 (1).rds")

zc_censo2017 <- readRDS("C:/Users/ext_frjorque/Desktop/Taller 2/zc_censo2017 (2).rds") # zonas 17
# Install the writexl package if you do not already have it.
# This is a one-time task.
#("writexl")

# Load the writexl package.
#library(writexl)

# Use the write_xlsx() function to create the Excel file.
# It will save the file to R's current working directory.
#write_xlsx(Base_Venta_propiedades, path = "My_writexl_File.xlsx")
# Selección de la comuna de estación central, junto con sus vecinos con quienes comparte un lado o una arista. (Estación central 13106 ,Lo prado 13117 , Quinta Normal 13126, Santiago 13101, Cerrilos 13102 , Maipú 13119 , Pedro Aguierre Cerda 13121 , Pudahuel 13124)



Base_Venta_propiedades <- rename(Base_Venta_propiedades, COMUNA = codigo_comuna)

Base_Venta_propiedades <- (filter(Base_Venta_propiedades,COMUNA == 13106 | COMUNA == 13117 | COMUNA == 13126 | COMUNA == 13101 | COMUNA == 13102 | COMUNA == 13119 | COMUNA == 13121 | COMUNA == 13124 ))


Base_Censo <- (filter(Base_Censo,COMUNA == 13106 | COMUNA == 13117 | COMUNA == 13126 | COMUNA == 13101 | COMUNA == 13102 | COMUNA == 13119 | COMUNA == 13121 | COMUNA == 13124 ))


Base_viviendas <- (filter(Base_viviendas,COMUNA == 13106 | COMUNA == 13117 | COMUNA == 13126 | COMUNA == 13101 | COMUNA == 13102 | COMUNA == 13119 | COMUNA == 13121 | COMUNA == 13124 ))


Base_Permisos <- rename(Base_Permisos, COMUNA = COD_COMUNA)
       
Base_Permisos <- (filter(Base_Permisos,COMUNA == 13106 | COMUNA == 13117 | COMUNA == 13126 | COMUNA == 13101 | COMUNA == 13102 | COMUNA == 13119 | COMUNA == 13121 | COMUNA == 13124 ))


zc_censo2017 <- (filter(zc_censo2017,COMUNA == 13106 | COMUNA == 13117 | COMUNA == 13126 | COMUNA == 13101 | COMUNA == 13102 | COMUNA == 13119 | COMUNA == 13121 | COMUNA == 13124 ))

1. Determinación de clústeres de alto y bajo nivel educacional.

 # Definimos que el jefe de hogar sea el benchmark

Base_Censo <-
  Base_Censo  %>% 
  dplyr::filter(AREA == 1) %>%   # area urbana
  dplyr::filter(P07 == 1) %>%    # jefes de hogar
  mutate( # crear variables
    CODIGO_COMUNA   = COMUNA * 10 ^ 6, 
    DISTRITO_CENSAL = DC * 10 ^ 4,
    CODIGO_AREA     = AREA * 10 ^ 3, 
    ZC_LOC, 
    COD_INE_15 = as.numeric(CODIGO_COMUNA + DISTRITO_CENSAL + CODIGO_AREA + ZC_LOC)
  ) %>% 
  dplyr::select(COD_INE_15, COMUNA, P07, P08, P09, P15, ESCOLARIDAD, P18)

colnames(Base_Censo) <- c("ZONA", "COMUNA", "Parent", "Sexo", "Edad", "Educ_Nivel", "Escolaridad", "Rama_Econ")

tomando como referencia a los jefes de hogar para medir la escolaridad.

jefe_hogar <- Base_Censo %>% 
  dplyr::filter(Escolaridad !=98 & Escolaridad !=99) %>% 
  group_by(ZONA) %>% 
  summarise(
    Escol_prom = mean(Escolaridad)
  ) 

Comunas seleccionadas visualmente, junto con la distribución de la educacion de los jefes de hogar

#Creación de Quintiles
EECC <- zc_censo2017 %>% 
  dplyr::select(COD_INE_15) %>% 
  left_join(jefe_hogar, by = c("COD_INE_15"="ZONA")) %>% 
  dplyr::filter(!is.na(Escol_prom))

# AnÔlisis exploratio visual de la educacion de los jefes de hogar en estación central y sus comunas vecinas
mapa_escolaridad <- tm_shape(EECC) +
  tm_fill("Escol_prom",palette = "Reds", title="", n=5, style = "quantile") +   #n=5 es el default
  tm_borders() +
  tm_layout(legend.position = c("right", "bottom"))+
  tm_layout(main.title = "Escolaridad promedio", title.size = 1.5,main.title.position="left") 

mapa_escolaridad

Clusteres

Transformación a datos espaciales

crs_utm <- "+proj=utm +zone=19 +south +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0"

EECC_sf <- st_as_sf(EECC, zero.policy = TRUE) %>% 
  st_transform(crs_utm) %>% 
  as_Spatial()

Definición de vecinos

neighbours_queen <- poly2nb(EECC_sf)
neighbours_queen
## Neighbour list object:
## Number of regions: 472 
## Number of nonzero links: 2798 
## Percentage nonzero weights: 1.255925 
## Average number of links: 5.927966 
## 5 regions with no links:
## 1 2 3 109 258

Visualización de los vecinos

plot(EECC_sf, border = 'lightgrey')
plot(neighbours_queen, coordinates(EECC_sf), add=TRUE, col='purple')

Moran

Creación de la lista

list_queen <- nb2listw(neighbours_queen,style="W", zero.policy = TRUE)
globalMoran_q <- moran.test(EECC$Escol_prom, list_queen, zero.policy = TRUE) #Test de moran y su significancia
globalMoran_q
## 
##  Moran I test under randomisation
## 
## data:  EECC$Escol_prom  
## weights: list_queen  n reduced by no-neighbour observations
##   
## 
## Moran I statistic standard deviate = 28.404, p-value < 2.2e-16
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic       Expectation          Variance 
##      0.7779939421     -0.0021459227      0.0007543744

Pendiente y determinación

globalMoran_q[["estimate"]][["Moran I statistic"]] #pendiente de la I
## [1] 0.7779939

Visualización de cuadrantes

moran <- moran.plot(EECC$Escol_prom, listw = nb2listw(neighbours_queen, style = "W", zero.policy = TRUE ), zero.policy = TRUE) 

hay autocorrelación. hay poca autocorrelacion negativa

visualización de clusteres

local <- localmoran(x = EECC$Escol_prom, listw = nb2listw(neighbours_queen, style = "W",zero.policy = TRUE),zero.policy = TRUE)

moran.map <- cbind(EECC, local)

#MAPA EXPLORATORIO
tm_shape(moran.map) +
  tm_fill(col = "Ii",
          style = "quantile",
          title = "local moran statistic")

quadrant <- vector(mode="numeric",length=nrow(local)) 

# Centramos la variable de escolaridad en torno a la media
m.zc <- EECC$Escol_prom - mean(EECC$Escol_prom)     
m.local <- local[,1] - mean(local[,1])     

m.zc <- moran$x-  mean(moran$x,na.rm = T) 
.local <- moran$wx-  mean(moran$wx,na.rm = T) 


# Definimos el nivel de significancia
signif <- 0.1

# Construiremos la variable cuadrantes en función del p-value y la I de MorÔn
quadrant[m.zc >0 & m.local>0] <- 4  
quadrant[m.zc <0 & m.local<0] <- 1      
quadrant[m.zc <0 & m.local>0] <- 2
quadrant[m.zc >0 & m.local<0] <- 3
quadrant[local[,5]>signif] <- 0   

GrƔficos

ae1 <- EECC %>% 
  dplyr::select(-COD_INE_15) %>% 
  cbind(EECC, quadrant) %>% 
  mutate(quadrant = as.character(quadrant))


mapa_1 <- ggplot() +
  geom_sf(data= ae1, aes(fill = quadrant)) +
  scale_fill_manual(name = "", labels = c("NS", "LL", "LH", "HL", "HH"),
                    values = c("0" = "white", "1"="blue", "2"= rgb(0,0,1,alpha=0.4), "3"=rgb(1,0,0,alpha=0.4), "4"= "red")) +
  ggtitle('Indice de Moral Local (p=0,1)')

mapa_1

2. Distribución de precios y superficie construida en la comuna.

rm(list=ls())

Base_Venta_propiedades <- readRDS("C:/Users/ext_frjorque/Desktop/Taller 2/Propiedades_RM (1).rds")

Base_Censo <- readRDS("C:/Users/ext_frjorque/Desktop/Taller 2/personas_2017.rds")  #personas 17

Base_Permisos <- readRDS("C:/Users/ext_frjorque/Desktop/Taller 2/Permisos_2017 (3).rds")

Base_viviendas <- readRDS("C:/Users/ext_frjorque/Desktop/Taller 2/viviendas_2017 (1).rds")

zc_censo2017 <- readRDS("C:/Users/ext_frjorque/Desktop/Taller 2/zc_censo2017 (2).rds") # zonas 17
#Filtro Bases de Datos Estación Central:

Base_Venta_propiedades <- filter(Base_Venta_propiedades, codigo_comuna==13106)   #EC_ventas
Base_Permisos <- (filter(Base_Permisos,COD_COMUNA == 13106 ))         #EC_permisos
Base_viviendas <- filter(Base_viviendas, COMUNA == 13106)             #EC_viviendas
Base_Censo <- (filter(Base_Censo,COMUNA == 13106 ))                   #EC_censo
zc_censo2017 <- (filter(zc_censo2017,COMUNA == 13106 ))                 #EC_zonas

#Distribución del precio

ggplot(Base_Venta_propiedades, aes(uf)) + geom_histogram(fill="darkmagenta") 

AnƔlisis del precio promedio

Precio <- Base_Venta_propiedades %>% 
  dplyr::filter(d_casa ==1) %>% 
  group_by(codigo_zona) %>% 
  summarise(
    uf_promedio = mean(uf)
  ) 

Precio <- rename(Precio, COD_INE_15 = codigo_zona )
#Creación de Quintiles
pp <- zc_censo2017 %>% 
  dplyr::select(COD_INE_15) %>% 
  left_join(Precio, by = c("COD_INE_15")) %>% 
  dplyr::filter(!is.na(uf_promedio))

# AnÔlisis exploratio visual de la educacion de los jefes de hogar en estación central y sus comunas vecinas
mapa_precio <- tm_shape(pp) +
  tm_fill("uf_promedio",palette = "Blues", title="", n=6, style = "quantile") +   #n=5 es el default
  tm_borders() +
  tm_layout(legend.position = c("right", "bottom"))+
  tm_layout(main.title = "uf_promedio", title.size = 1.5,main.title.position="left") 

mapa_precio

Superficies

##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   20.00   31.60   40.00   54.67   50.00 1000.00

En el grÔfico 1, es posible entender que existe una concentración de datos en superficies de terreno menores de 100 m2 y, también, existen muchos outliers, mientras que con nuestro grÔfico 2 se confirma esto, pues es notoria la alta frecuencia que existe en los terrenos de menores superficies, a diferencia de los que tienen altas superficies.

Por otra parte, vamos a contabilizar cuƔntas observaciones existen bajo y sobre la media, es decir, 54.67 m2:

En este caso, tenemos 1093 observaciones de los que estƔn bajo los 54.67 m2, mientras que los otros, tienen 258 observaciones, es decir, son pocas las superficies que logran superar la media, lo cual demuestra que la gran mayorƭa construye en superficies que son pequeƱas.

Ahora, entraremos en detalle con los m2 constuidos en las superficies.

##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   20.00   31.60   40.00   47.43   50.00  450.00

Al analizar los metros cuadrados construidos en los terrenos, nuevamente estos se encuentran concentrados en niveles bajos, en este caso, menor a los 50 m2 aproximadamente y tambiƩn, existen muchos outliers.

En el grƔfico 5, podemos notar que las construcciones que estƔn bajo la media, tienen una frecuencia mucho mayor a los del caso contrario, pues existen 943 observaciones para los bajo la media, mientras que para los sobre la media hay 408 observaciones, por lo tanto, hay una diferencia de 535. AdemƔs, el hecho que la gran mayorƭa estƩn bajo los 47.43 m2, significa que las construcciones son bastante pequeƱas, pero observaremos como se distribuyen estos datos en un mapa:

En el mapa, es complicado apreciar la distribución de los m2 en la comuna ya que, como vimos en los grÔficos anteriores, existe una concentración de datos parecidos, por lo tanto, pareciera que la gran mayoría de los datos tienen un color similar.
Para simplificar la visualización, graficaremos los datos respecto a su media:

Es notable que las viviendas que estÔn bajo la media, se encuentran concentrados en una zona de Estación Central, mientras que los que estÔn sobre la media estÔn mÔs dispersos en la comuna. La primera intuición que esto provoca es que las viviendas que tienen m2 inferiores a la media sean edificios, pues la comuna es muy conocida por su gran cantidad de enormes edificios, pero mÔs adelante entraremos en este anÔlisis.

Precios

##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     590    1809    2170    2495    2600   29000

En este caso, los precios estƔn concentrados entre las 1800 y 2600 UF aproximadamente, con una media de 2495 UF y nuevamente, es posible notar gran cantidad de outliers, los cuales son fƔcil de observar en el grƔfico 7.

Para entender como se distribuyen estos precios en Estación Central, los observaremos directamente a través de un mapa:

## Geometry set for 1351 features 
## Geometry type: POINT
## Dimension:     XY
## Bounding box:  xmin: -70.73133 ymin: -33.47867 xmax: -70.67909 ymax: -33.44479
## CRS:           +proj=longlat +datum=WGS84 +no_defs
## First 5 geometries:

Nuevamente, los datos estƔn muy concentrados, es decir, tienen valores similares, lo que logra que no sean fƔcil de observar en el mapa, es por esto que se optarƔ por separarlos respecto a su media:

Al observar los datos, nuevamente los datos que son menores a la media se encuentran concentrados en una zona determinada, que es la misma en donde estƔn los de superficie de terreno menor a su media, mientras que los mayores se distribuyen por toda la comuna, esto quiere decir que, las viviendas que tienen una superficie menor a 47.43 m2, cuestan menos de 2495 UF

3. Concentración de proyectos inmobiliarios en venta, separando el mercado de las casa y departamento

rm(list=ls())

Base_Venta_propiedades <- readRDS("C:/Users/ext_frjorque/Desktop/Taller 2/Propiedades_RM (1).rds")

Base_Censo <- readRDS("C:/Users/ext_frjorque/Desktop/Taller 2/personas_2017.rds")  #personas 17

Base_Permisos <- readRDS("C:/Users/ext_frjorque/Desktop/Taller 2/Permisos_2017 (3).rds")

Base_viviendas <- readRDS("C:/Users/ext_frjorque/Desktop/Taller 2/viviendas_2017 (1).rds")

zc_censo2017 <- readRDS("C:/Users/ext_frjorque/Desktop/Taller 2/zc_censo2017 (2).rds") # zonas 17
#Filtro Bases de Datos Estación Central:

Base_Venta_propiedades <- filter(Base_Venta_propiedades, codigo_comuna==13106)   #EC_ventas
Base_Permisos <- (filter(Base_Permisos,COD_COMUNA == 13106 ))         #EC_permisos
Base_viviendas <- filter(Base_viviendas, COMUNA == 13106)             #EC_viviendas
Base_Censo <- (filter(Base_Censo,COMUNA == 13106 ))                   #EC_censo
zc_censo2017 <- (filter(zc_censo2017,COMUNA == 13106 ))                 #EC_zonas

Relación precio y tipo de vivienda

Base_Venta_propiedades$d_casa<- haven::as_factor(Base_Venta_propiedades$d_casa)

comparacion_precio <- ggplot(data = Base_Venta_propiedades,
            mapping = aes(x = uf, fill = d_casa, color = d_casa))



comparacion_precio + geom_density(alpha = 0.5)+
  labs(y = "tipo de vivienda", 
       x = "uf",
       title = "Relación  precio y tipo de vivienda") + theme_classic()

Relación m2 y tipo de vivienda

comparacion_m2 <- ggplot(data = Base_Venta_propiedades,
            mapping = aes(x = m2_const, fill = d_casa, color = d_casa))

comparacion_m2 + geom_density(alpha = 0.5)+
  labs(y = "tipo de vivienda", 
       x = "m2_const",
       title = "Relación  m2_const y tipo de vivienda") + theme_classic()

Cruce uf, m2, tipo de vivienda

ggplot() + geom_point(data = Base_Venta_propiedades, aes(x = uf, y = m2_const, shape = d_casa, color = d_casa)) 

Mapa casa

ggplot(data= zc_censo2017) + 
  geom_sf(color= "black") + 
  geom_sf(data=EC_ventas_sf, 
          aes( shape=as.factor(d_casa == 1), 
               color=as.factor(d_casa == 0))) + 
  labs(title="Mapa 6: Concentración de Casa y departamento Estación Central",
       shape="Casa",
       color="Departamento")