Ayudantía 3 - Estadística Espacial
Carga de librerías
library(spdep)
## Loading required package: sp
## Loading required package: Matrix
library(akima)
library(geoR)
## --------------------------------------------------------------
## Analysis of Geostatistical Data
## For an Introduction to geoR go to http://www.leg.ufpr.br/geoR
## geoR version 1.7-5.1 (built on 2015-04-15) is now loaded
## --------------------------------------------------------------
data(oldcol)
attach(COL.OLD)
summary(CRIME)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.1783 20.0500 34.0000 35.1300 48.5900 68.8900
Test de hipótesis para la normalidad
par(mfrow = c(1,2))
hist(CRIME)
qqnorm(CRIME)
qqline(CRIME, col = 2)

shapiro.test(CRIME)
##
## Shapiro-Wilk normality test
##
## data: CRIME
## W = 0.9722, p-value = 0.2956
Test de hipótesis para la normalidad
par(mfrow = c(2,2))
hist(X)
qqnorm(X)
qqline(X, col = 2)
shapiro.test(X)
##
## Shapiro-Wilk normality test
##
## data: X
## W = 0.96967, p-value = 0.2349
hist(Y)
qqnorm(Y)
qqline(Y, col = 2)

shapiro.test(Y)
##
## Shapiro-Wilk normality test
##
## data: Y
## W = 0.96468, p-value = 0.1475
Interpolación
par(mfrow=c(1,2))
int.crime <- interp.new(Y, X, CRIME)
image(int.crime, ylab="X (latitud)", xlab="Y (longitud)",
main ="Interpolación para CRIME")
contour(int.crime, ylab="X (latitud)", xlab="Y (longitud)",
main = "Curvas de Nivel para CRIME")

Descriptivos geoestadísticos
obj <- cbind(X, Y, CRIME)
CRIME.geo <- as.geodata(obj, coords.col = 1:2, data.col = 3)
plot(CRIME.geo)

summary(CRIME.geo)
## Number of data points: 49
##
## Coordinates summary
## X Y
## min 24.25 24.96
## max 51.24 44.07
##
## Distance summary
## min max
## 0.7421561 27.0128174
##
## Data summary
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.1783 20.0500 34.0000 35.1300 48.5900 68.8900
maxd = summary(CRIME.geo)$distances.summary[[2]] #distancia maxima
Variograma empírico
par(mfrow=c(1,2))
CRIME.var <- variog(CRIME.geo, uvec = seq(0, maxd/2, l = 12))
## variog: computing omnidirectional variogram
plot(CRIME.var)
CRIME.var.c <- variog(CRIME.geo, uvec = seq(0, maxd/2, l = 12), bin.cloud = T)
## variog: computing omnidirectional variogram
plot(CRIME.var.c,bin.cloud=T)

Variograma direccional
par(mfrow = c(1,1))
vario.4 <- variog4(CRIME.geo, max.dist = maxd/2)
## variog: computing variogram for direction = 0 degrees (0 radians)
## tolerance angle = 22.5 degrees (0.393 radians)
## variog: computing variogram for direction = 45 degrees (0.785 radians)
## tolerance angle = 22.5 degrees (0.393 radians)
## variog: computing variogram for direction = 90 degrees (1.571 radians)
## tolerance angle = 22.5 degrees (0.393 radians)
## variog: computing variogram for direction = 135 degrees (2.356 radians)
## tolerance angle = 22.5 degrees (0.393 radians)
## variog: computing omnidirectional variogram
plot(vario.4, omnidirectional = T, legend = F)

Modelos geoespaciales
CRIME.var.fit <- variofit(vario = CRIME.var, #variograma empírico
ini.cov.pars = c(375, 13), #valores escogidos al observar el var.empirico
cov.model = "matern") #modelo de variograma
## variofit: covariance model used is matern
## variofit: weights used: npairs
## variofit: minimisation function used: optim
#c("matern", "exponential", "gaussian", "cauchy", "spherical", "cubic",
#"wave", "circular", "powered.exponential", "gneiting")
plot(CRIME.var, main="Variograma empírico y ajuste teórico")
lines.variomodel(cov.model = "matern",
cov.pars = CRIME.var.fit$cov.pars,
nug = CRIME.var.fit$nugget,
kappa = CRIME.var.fit$kappa,
max.dist = maxd/2,
col = 2)

#param_eye <- eyefit(CRIME.var)
#CRIME.var.fit <- variofit(vario = CRIME.var,
# ini.cov.pars = param_eye)
Predicción espacial
delta <- 5
min1 <- summary(CRIME.geo)$coords.summary[1,1]-delta
#El 20 es para que las mediciones del borde aparezcan al graficar
min2 <- summary(CRIME.geo)$coords.summary[1,2]-delta
max1 <- summary(CRIME.geo)$coords.summary[2,1]+delta
max2 <- summary(CRIME.geo)$coords.summary[2,2]+delta
loci <- expand.grid(seq(min1, max1, delta), seq(min2, max2, delta))
kconv <- krige.conv(geodata = CRIME.geo,
locations = loci,
krige = krige.control(obj.m = CRIME.var.fit))
## krige.conv: model with constant mean
## krige.conv: Kriging performed using global neighbourhood
contour(kconv,
filled = TRUE,
coords.data = CRIME.geo$coords,
color = terrain.colors,
main = "Estimación en el dominio usando Kriging")

contour(kconv,
val=sqrt(kconv$krige.var),
filled = TRUE,
coords.data = CRIME.geo$coords,
color = terrain.colors,
main = "Estimación de la Varianza en el dominio usando Kriging")
