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)
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 ))
# 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")
jefe_hogar <- Base_Censo %>%
dplyr::filter(Escolaridad !=98 & Escolaridad !=99) %>%
group_by(ZONA) %>%
summarise(
Escol_prom = mean(Escolaridad)
)
#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
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()
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')
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
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
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")
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
## 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.
## 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
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))
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")