library(readr)
library(dplyr)
library(tidyverse)  
library(sf)
library(sp)
library(spdep)
library(rgdal)
library(rgeos)
library(tmap)
library(tmaptools)
library(spgwr)
library(grid)
library(gridExtra)
library(raster)
library(viridis)
library(spatstat)
library(leaflet)
library(readxl)
#scrap
library(rvest)
library(httr)
library(XML)
library(data.table)
library(devtools)

options(warn = -1, 
        scipen=999, # evitar notacion cientifica
        stringsAsFactors = FALSE)


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

Bases, incluyendo scrapping

setwd('C:/Users/ext_frjorque/Desktop/Analitica espacial/Taller 3') 

Base_Scrapping <- read_excel("Base_Scrapping_GEO.xlsx")

Base_Venta_propiedades <- readRDS("Propiedades_RM (1).rds")

Base_zonas <- readRDS("zc_censo2017 (2).rds")

Base_Censo <- readRDS("personas_2017.rds")  #personas 17

Filtramos por Estacion central las otras bases a trabajar

Base_Scrapping <- rename(Base_Scrapping, longitud = Longitude)
Base_Scrapping <- rename(Base_Scrapping, latitud = Latitude)

Base_Venta_propiedades <- rename(Base_Venta_propiedades, COMUNA = codigo_comuna)

Base_Venta_propiedades <- (filter(Base_Venta_propiedades,COMUNA == 13106))

Base_Censo <- (filter(Base_Censo,COMUNA == 13106))

Base_zonas <- (filter(Base_zonas,COMUNA == 13106))

Espcializamos las bases de datos

Base_Scrapping <- st_as_sf(Base_Scrapping, coords = c('longitud','latitud'), crs = 4326, agr = 'identity')

Base_Venta_propiedades <- st_as_sf(Base_Venta_propiedades, coords = c('longitud','latitud'), crs = 4326, agr = 'identity')

Creacion de la medida de variacion UF(M2)

Base_Scrapping$precio <- Base_Scrapping$precio/33000   # transformamos pesos a UF (aproximado)
           
           
# Indicador para la base scapping
Base_Scrapping$precio <- as.numeric(Base_Scrapping$precio)
Base_Scrapping$UF_M2 <- Base_Scrapping$precio/Base_Scrapping$area_total


# Indicador para la BBDD original
Base_Venta_propiedades$UF_M2 <- Base_Venta_propiedades$uf/Base_Venta_propiedades$m2_const
ae <- Base_zonas %>%     # Ya filtrado para Estacion Central
  dplyr::filter(AREA == 1)

grafo_base <-
  ae %>% 
  ggplot() +
  geom_sf(fill = NA) +
  theme_bw()
Base_Scrapping <- st_make_valid(Base_Scrapping) %>%  #corrige vƩrtices duplicados o geometrƭas "invalidas"
    st_join( # cruce de datos por operacion geografica
      transmute( # seleccion de variables a asignar
        ae, # poligonos area de estudio
        COD_INE_15 # seleccionamos codigo de zona
      ),
      join = st_intersects, # asignaremos por interseccion
      left = FALSE # filtra valores donde no hubo interseccion
    )

#2. Unir y hacer un ESDA en la base de datos original a través de estudiar la localización a estaciones de metro, Ôreas verdes, educación y cualquier otro elemento que puedan considerar relevante en su comuna de estudia.

Generamos area de estudio (ae)

ae <- Base_zonas %>%     # Ya filtrado para Estacion Central
  dplyr::filter(AREA == 1)

grafo_base <-
  ae %>% 
  ggplot() +
  geom_sf(fill = NA) +
  theme_bw()

Complementos BBDD

Ciclovias <- st_read("Ciclovias.shp")
## Reading layer `Ciclovias' from data source 
##   `C:\Users\ext_frjorque\Desktop\Analitica espacial\Taller 3\Ciclovias.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 878 features and 8 fields
## Geometry type: MULTILINESTRING
## Dimension:     XY
## Bounding box:  xmin: -73.25704 ymin: -53.18382 xmax: -68.90344 ymax: -18.42773
## Geodetic CRS:  WGS 84
Ciclovias <- (filter(Ciclovias, CUT_SIEDU == 13106))  

  
Colegios <- st_read("Colegios.shp")
## Reading layer `Colegios' from data source 
##   `C:\Users\ext_frjorque\Desktop\Analitica espacial\Taller 3\Colegios.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 4660 features and 13 fields
## Geometry type: POINT
## Dimension:     XY
## Bounding box:  xmin: -78.82864 ymin: -54.9348 xmax: -67.60534 ymax: -18.19582
## Geodetic CRS:  WGS 84
Colegios <- (filter(Colegios, COD_COM_RB == 13106))  

Concesion_Sanitaria <- st_read("Concesion_Sanitaria.shp")
## Reading layer `Concesion_Sanitaria' from data source 
##   `C:\Users\ext_frjorque\Desktop\Analitica espacial\Taller 3\Concesion_Sanitaria.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 367 features and 12 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -73.83751 ymin: -53.30726 xmax: -68.89493 ymax: -18.39995
## Geodetic CRS:  WGS 84
Ed_inicial <-  st_read("Ed_Inicial.shp")
## Reading layer `Ed_Inicial' from data source 
##   `C:\Users\ext_frjorque\Desktop\Analitica espacial\Taller 3\Ed_Inicial.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 2311 features and 44 fields
## Geometry type: POINT
## Dimension:     XY
## Bounding box:  xmin: -73.79403 ymin: -53.18278 xmax: -68.92593 ymax: -18.42897
## Geodetic CRS:  WGS 84
Ed_inicial <- (filter(Ed_inicial, COD_COMUN == 13106))    


Metro <-  st_read("Metro.shp")
## Reading layer `Metro' from data source 
##   `C:\Users\ext_frjorque\Desktop\Analitica espacial\Taller 3\Metro.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 117 features and 10 fields
## Geometry type: POINT
## Dimension:     XY
## Bounding box:  xmin: -70.75738 ymin: -33.60937 xmax: -70.54485 ymax: -33.36651
## Geodetic CRS:  WGS 84
Metro <- (filter(Metro, nombre == "ESTACION CENTRAL" | nombre == "UNIVERSIDAD DE SANTIAGO" | nombre == "SAN ALBERTO HURTADO" | nombre == "ECUADOR" | nombre == "LAS REJAS" | nombre == "PAJARITOS" ))

Paraderos <- st_read("Paraderos.shp")
## Reading layer `Paraderos' from data source 
##   `C:\Users\ext_frjorque\Desktop\Analitica espacial\Taller 3\Paraderos.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 27076 features and 6 fields
## Geometry type: POINT
## Dimension:     XY
## Bounding box:  xmin: -73.79084 ymin: -53.18406 xmax: -68.90461 ymax: -18.42763
## Geodetic CRS:  WGS 84
Parques <- st_read("Parques.shp")
## Reading layer `Parques' from data source 
##   `C:\Users\ext_frjorque\Desktop\Analitica espacial\Taller 3\Parques.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 1856 features and 16 fields
## Geometry type: POLYGON
## Dimension:     XY
## Bounding box:  xmin: -73.80183 ymin: -53.18216 xmax: -68.91595 ymax: -18.4272
## Geodetic CRS:  WGS 84
Parques <- (filter(Parques,CUT == 13106))  

Plazas <- st_read("Plazas.shp")
## Reading layer `Plazas' from data source 
##   `C:\Users\ext_frjorque\Desktop\Analitica espacial\Taller 3\Plazas.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 22235 features and 16 fields
## Geometry type: POLYGON
## Dimension:     XY
## Bounding box:  xmin: -73.79706 ymin: -53.18867 xmax: -68.89847 ymax: -18.42497
## Geodetic CRS:  WGS 84
Plazas <- (filter(Plazas,CUT == 13106))


Salud <- st_read("Salud.shp")
## Reading layer `Salud' from data source 
##   `C:\Users\ext_frjorque\Desktop\Analitica espacial\Taller 3\Salud.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 848 features and 31 fields
## Geometry type: POINT
## Dimension:     XY
## Bounding box:  xmin: -73.79259 ymin: -53.18052 xmax: -68.92335 ymax: -18.42689
## Geodetic CRS:  WGS 84
Salud <- (filter(Salud,CUT_ == 13106))

Intersecatamos las que no tenia codigo

Paraderos <- st_make_valid(Paraderos) %>%  #corrige vƩrtices duplicados o geometrƭas "invalidas"
    st_join( # cruce de datos por operacion geografica
      transmute( # seleccion de variables a asignar
        ae, # poligonos area de estudio
        COMUNA # seleccionamos codigo de zona
      ),
      join = st_intersects, # asignaremos por interseccion
      left = FALSE # filtra valores donde no hubo interseccion
    ) 

Concesion_Sanitaria <- st_make_valid(Concesion_Sanitaria) %>%  #corrige vƩrtices duplicados o geometrƭas "invalidas"
    st_join( # cruce de datos por operacion geografica
      transmute( # seleccion de variables a asignar
        ae, # poligonos area de estudio
        COMUNA # seleccionamos codigo de zona
      ),
      join = st_intersects, # asignaremos por interseccion
      left = FALSE # filtra valores donde no hubo interseccion
    ) 

Generamos distancias pata todas las propiedades dadas los distintos recursos (Metro, ciclovĆ­as, colegios)

# Distancia a Metro
M1 <- st_distance(Base_Venta_propiedades, Metro)
Base_Venta_propiedades$DIST_METRO <- apply(M1, 1, min)
# inluir dummy desde los 500 y tratar con otra desde los 700

# Distancia a CiclovĆ­a 
M2 <- st_distance(Base_Venta_propiedades, Ciclovias)
Base_Venta_propiedades$DIST_CICLOVIA<- apply(M2, 1, min)

# Distancia a Colegios 
M3 <- st_distance(Base_Venta_propiedades, Colegios)
Base_Venta_propiedades$DIST_COLEGIO <- apply(M3, 1, min)

# Distancia a Paraderos
M4 <- st_distance(Base_Venta_propiedades, Paraderos)
Base_Venta_propiedades$DIST_PARADEROS <- apply(M4, 1, min)

# Distancia a un Parque
M5 <- st_distance(Base_Venta_propiedades, Parques)
Base_Venta_propiedades$DIST_PARQUES <- apply(M5, 1, min)


# dividir en 1000, para tenerlo en kilometros. 

ESDA

#Base_Venta_propiedades <- Base_Venta_propiedades %>% 
 # mutate(
  #  ln_uf = log(uf),
 #   ufm2 = uf/m2_const,
 #   d_casa = factor(d_casa),
#    d_proyecto = factor(d_proyecto),
#    codigo_zona = factor(codigo_zona),
 #   codigo_comuna = factor(COMUNA),
 #   m2_const_2 = m2_const*m2_const
#  )
ggplot(data=Base_Venta_propiedades,aes(x=m2_const,y=uf, colour = COMUNA)) +
  geom_point()+
  geom_smooth(method='lm', se = TRUE)+
  labs(x = 'Construcción [m²]',
       y = 'UF/m²',
       title = 'Valor en función de la distancia al borde costero',
       subtitle = 'Fuente: Elaboración propia') 

Promedio de distancias a los distintos elementos

summary(Base_Venta_propiedades)
##        ID              uf           m2_const       sup_terreno     
##  Min.   :  277   Min.   :  590   Min.   : 20.00   Min.   :  20.00  
##  1st Qu.:12012   1st Qu.: 1809   1st Qu.: 31.60   1st Qu.:  31.60  
##  Median :12350   Median : 2170   Median : 40.00   Median :  40.00  
##  Mean   :11370   Mean   : 2495   Mean   : 47.43   Mean   :  54.67  
##  3rd Qu.:12690   3rd Qu.: 2600   3rd Qu.: 50.00   3rd Qu.:  50.00  
##  Max.   :24666   Max.   :29000   Max.   :450.00   Max.   :1000.00  
##   dormitorios         baƱos       estacionamientos    bodegas      
##  Min.   : 1.000   Min.   :1.000   Min.   :0.0000   Min.   :0.0000  
##  1st Qu.: 1.000   1st Qu.:1.000   1st Qu.:0.0000   1st Qu.:0.0000  
##  Median : 2.000   Median :1.000   Median :0.0000   Median :0.0000  
##  Mean   : 1.737   Mean   :1.251   Mean   :0.3331   Mean   :0.0903  
##  3rd Qu.: 2.000   3rd Qu.:1.000   3rd Qu.:1.0000   3rd Qu.:0.0000  
##  Max.   :10.000   Max.   :6.000   Max.   :6.0000   Max.   :3.0000  
##      d_casa          d_proyecto       codigo_zona              COMUNA     
##  Min.   :0.00000   Min.   :0.00000   Min.   :13106011001   Min.   :13106  
##  1st Qu.:0.00000   1st Qu.:0.00000   1st Qu.:13106101002   1st Qu.:13106  
##  Median :0.00000   Median :0.00000   Median :13106101004   Median :13106  
##  Mean   :0.08734   Mean   :0.01258   Mean   :13106104866   Mean   :13106  
##  3rd Qu.:0.00000   3rd Qu.:0.00000   3rd Qu.:13106111003   3rd Qu.:13106  
##  Max.   :1.00000   Max.   :1.00000   Max.   :13106141002   Max.   :13106  
##  codigo_region          geometry        UF_M2          DIST_METRO      
##  Min.   :13    POINT        :1351   Min.   : 11.08   Min.   :   8.425  
##  1st Qu.:13    epsg:4326    :   0   1st Qu.: 48.43   1st Qu.: 334.584  
##  Median :13    +proj=long...:   0   Median : 54.86   Median : 446.683  
##  Mean   :13                         Mean   : 56.27   Mean   : 515.453  
##  3rd Qu.:13                         3rd Qu.: 61.07   3rd Qu.: 660.561  
##  Max.   :13                         Max.   :583.93   Max.   :2475.813  
##  DIST_CICLOVIA       DIST_COLEGIO      DIST_PARADEROS      DIST_PARQUES   
##  Min.   :   1.569   Min.   :   7.762   Min.   :  0.1947   Min.   :   0.0  
##  1st Qu.: 142.722   1st Qu.: 188.125   1st Qu.: 58.3346   1st Qu.: 839.3  
##  Median : 243.943   Median : 260.446   Median : 95.1068   Median :1048.8  
##  Mean   : 281.691   Mean   : 268.517   Mean   :106.2049   Mean   :1018.0  
##  3rd Qu.: 382.578   3rd Qu.: 354.339   3rd Qu.:141.0035   3rd Qu.:1199.9  
##  Max.   :1155.921   Max.   :1129.343   Max.   :525.3725   Max.   :2505.5

Para ver como se comportan los elementos dentro de la comuna

grafo_base +
  geom_sf(data = Base_Venta_propiedades, color = alpha("Purple", 0.9)) +
  geom_sf(data = Metro, color = alpha("red", 3), size = 2) +
  ggtitle('Distribución de departamento y su distancia a Estaciones de Metro')

#Distancia promedio al metro 515.453 metros. 

Dispersion de la distancia al metro

ggplot(Base_Venta_propiedades, aes(x=DIST_METRO)) + geom_histogram(binwidth=100, fill='purple', col='black') + theme_light()

Distribucion espacial del precio de las viviendas, con su distancia a lineas de metro, y paraderos.

Precio_zona <- 
  Base_Venta_propiedades %>% 
  group_by(codigo_zona) %>% 
  summarise(Precio_promedio = mean(uf))

Precio_zona$geometry <- NULL


Precio_zona <- 
  Precio_zona %>% 
  left_join(Base_zonas, by = c("codigo_zona"="COD_INE_15"))

Precio_zona <- st_as_sf(Precio_zona)


Precio_zona %>% 
  ggplot() + # inicia grafico
  geom_sf(aes(fill = Precio_promedio), colour = NA) + 
  geom_sf(data=Base_Venta_propiedades, color= 'orange') +
  scale_fill_viridis() +
  labs( title= "Distribución viviendas en zonas con sus precios promedios", subtitle = 'Fuente: Censo 2017')

Pregunta 3

Cada código de zona deberia incorporar la informacion de la distancia al metro, parque, etc. Cuando hay heterogeneidad entre zonas censales hay efectos que no se rescatan en los efectos fijos. Los que son propios de la zona, hacinamiento, parques, escolaridad, estÔn en el efecto fijo.

ggplot(data=Base_Venta_propiedades,aes(x=DIST_METRO, y=uf)) +
  geom_point()+
  geom_smooth(method='lm', se = TRUE)+
  labs(x = 'DIST_METRO',
       y = 'uf',
       title = 'Valor en función de la DIST_METRO',
       subtitle = 'Fuente: Elaboración propia') 

ggplot(data=Base_Venta_propiedades,aes(x=DIST_CICLOVIA, y=uf)) +
  geom_point()+
  geom_smooth(method='lm', se = TRUE)+
  labs(x = 'DIST_CICLOVIA',
       y = 'uf',
       title = 'Valor en función de la DIST_CICLOVIA',
       subtitle = 'Fuente: Elaboración propia') 

ggplot(data=Base_Venta_propiedades,aes(x=DIST_COLEGIO, y=uf)) +
  geom_point()+
  geom_smooth(method='lm', se = TRUE)+
  labs(x = 'DIST_COLEGIO',
       y = 'uf',
       title = 'Valor en función de la DIST_COLEGIO',
       subtitle = 'Fuente: Elaboración propia') 

Promedio distancia al metro

Promedio de areas verdes/m2

Promedio distnacia a una ciclovia

Distancia promedio a colegios

Cantidad de Jardines / habitantes