# 1. Cargar paquetes necesarios
library(spatstat)
library(spatstat.geom)
library(spatstat.explore)
library(dplyr)
library(ggplot2)
library(sf)
library(tidyr)
# 2. Leer el archivo CSV con ruta completa
archivo <- "C:/Users/Fabio/OneDrive/Desktop/Analisis de informacion geografica y espacial/Actividad 4/Proyectos_de_vivienda_en_Cali.csv"
vivienda_cali <- read.csv(archivo, encoding = "UTF-8")
# 3. Cargar shapefile de cali
comunas <- st_read("C:/Users/Fabio/OneDrive/Desktop/Analisis de informacion geografica y espacial/Casos/cali/Comunas.shp")
## Reading layer `Comunas' from data source
## `C:\Users\Fabio\OneDrive\Desktop\Analisis de informacion geografica y espacial\Casos\cali\Comunas.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 22 features and 4 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 1053868 ymin: 860190.2 xmax: 1068492 ymax: 879441.5
## Projected CRS: MAGNA_Colombia_Cali
head(vivienda_cali)
## long lat oferta Ciudad Zona Estrato Barrio
## 1 76.540 3.4530 3 CALI Oeste 6 NORMANDIA
## 2 76.541 3.4532 6 CALI Oeste 6 NORMANDIA
## 3 76.518 3.3542 2 CALI Sur 5 CIUDAD_BOCHALEMA
## 4 76.524 3.3760 4 CALI Sur 5 LILI
## 5 76.554 3.4575 7 CALI Oeste 6 AGUACATAL
## 6 76.530 3.3435 3 CALI Sur 6 PARCELACIONES PANCE
vivienda <- vivienda_cali
# 4. Definir ventana de observación
# Espacio rectangular que contiene todos los puntos
xrange <- range(vivienda$long)
yrange <- range(vivienda$lat)
ventana <- owin(xrange, yrange)
# 5. Crear patrón de puntos sin marcar
patron <- ppp(x = vivienda$long, y = vivienda$lat, window = ventana)
## Warning: data contain duplicated points
# 6. Test de Chi-cuadrado (quadrat test) para evaluar aleatoriedad espacial
quadrat_test <- quadrat.test.ppp(patron, nx = 4, ny = 4)
## Warning: Some expected counts are small; chi^2 approximation may be inaccurate
print(quadrat_test)
##
## Chi-squared test of CSR using quadrat counts
##
## data: patron
## X2 = 61.143, df = 15, p-value = 3.205e-07
## alternative hypothesis: two.sided
##
## Quadrats: 4 by 4 grid of tiles
# 7. Visualizar patrón y cuadrantes
plot(patron, main = "Patrón espacial de proyectos de vivienda",
cols = "blue", pch = 10)
El Patrón es agregado.
# 10. Densidad kernel (mapa de calor)
densidad_kernel <- density(patron, sigma = 0.01)
plot(densidad_kernel, main = "Mapa de calor de concentración de proyectos")
contour(densidad_kernel, add = TRUE)
# 11. Interpretación del resultado
cat("\n--- INTERPRETACIÓN ---\n")
##
## --- INTERPRETACIÓN ---
if (quadrat_test$p.value < 0.05) {
cat("El patrón NO es aleatorio (p < 0.05).\n")
} else {
cat("No hay evidencia suficiente para rechazar la hipótesis de aleatoriedad.\n")
}
## El patrón NO es aleatorio (p < 0.05).
# 8. Crear patrón de puntos ponderado por oferta
patron_marcado <- ppp(x = vivienda$long, y = vivienda$lat,
window = ventana,
marks = vivienda$oferta)
## Warning: data contain duplicated points
# 8. Función K de Ripley (para ver si hay agrupamiento)
Kest_result <- Kest(patron_marcado, correction = "border")
plot(Kest_result, main = "Función K de Ripley", legend = FALSE)
# 9. Función G de distribución de distancias entre vecinos más cercanos
G_result <- Gest(patron_marcado)
plot(G_result, main = "Función G - Vecino más cercano")