Você está na página 1de 54

Avaliação da incerteza espacial

• Incerteza : desconhecimento dos valores reais da


variável em estudo em localizações não
amostradas.
• Redução do nível de incerteza : coleta de amostras
adicionais. O nível de incerteza nunca será zero para
um número finito de amostras . Minimizar o erro que
se comete por causa de sua presença
• Quantificação da incerteza : distribuição estatística
que descreve as freqüências de resultados em locais
não amostradas.
QUANTIFICAÇÃO DA INCERTEZA
 N
Função de Distribuição  Configuração espacial
 Valores dos dados
Modelo F [u;z|(n)]  Fenômeno em estudo

1. Krigagem Indicativa 2. Simulação


Incerteza Local: N e γI (h) Incerteza Global: Simulações

F(z1) F(z2) F(z3) F(z4)

Z1 Z2 Z3 Z4

F(z5) F(z6) F(z7) F(z8)

Z5 Z6 Z7 Z8

F(z9) F(z10) F(z11) F(z12)

Z9 Z10 Z11 Z12


Características da Krigagem vs. Simulação

Incerteza Local: Krigagem Incerteza Global: Simulações


  Reprodução do histograma
Suavização de detalhes
locais amostral
  Reprodução da função de
Suavização não uniforme:
configuração dos dados Covariância

(Semivariograma)
Superestimativa de valores
 Valores de dados honrados
baixos e subestimativa de
valores altos em suas localizações
Serão apresentados duas formas
para realização da krigagem
indicativa.
i) Por construção das FDA
ii) Por simulação (mais rápido)
1. Krigagem Indicativa
1. Mapeamento de risco de ocorrência de uma variável contínua
acima de determinado ponto de corte (cutoff)
2. Mapeamento de variáveis categóricas. Ex. uso da terra, tipos
de solos,...
3. Predição da variação espacial da probabilidade da variável
estar dentro de um determinado critério.
4. Critério: definido como a variável sendo igual ou maior do um
valor limite (threshold)
Variáveis Indicativas

1 se z (u α ) ≤ z k
1. Variável contínua i (u α ; z k ) =
0 caso contrário
Semivariograma indicativo para o valor de corte zk :

∑[i(u α ; zk )-i(u α +h; zk )]


N (h )
1 2
γI (h, z k ) =
2 N (h) α =1

• Mede o quanto dois valores z separados por um vetor h


estão em lados opostos do valor de corte zk. Em outras
palavras, mede a frequencia de transição entre duas classe
de valores z em função de h. γQuanto
I (h, z k )maior menos
conectados no espaço são os pequenos ou grandes valores.

2. Variável categórica
1 se s (u α ) = sk
i (u α ; sk ) =
0 caso contrário

sk conjunto de K possíveis estados ou categorias


Semivariograma indicativo para a categoria sk :

∑[i(u α ;sk )-i(u α +h;sk )]


N (h )
1 2
γI (h, sk ) =
2 N (h) α =1

Variograma indicativo: mede qual a freqüência com que duas


localizações separadas por um vetor h pertencem a diferentes
categorias sk ' ≠ sk

. Quanto menor 2γI (h, sk ) melhor a conectividade espacial da categoria

1 0
1 1 (ocorre o evento (argila)
?
?
0 (não ocorre o evento (areia)

1 0
Variancia = 0 Variancia > 0
Aproximação indicativa no modelamento da incerteza local
• A função F (u; zk (n)) é modelada para um conjunto de K valores
limites zk, que discretizam a faixa de variação de z

[
F (u; z k (n)) = Prob Z (u) ≤ z k (n) ] k = 1,..., K
A resolução da fdac é então aumentada pela interpolação dentro de
cada classe (zk;zk+1] e extrapolação alés dos dois valores extremos, z1
e zk
• A estimação geoestatística não-paramétrica dos valores da fdac é
baseada na interpretação da probabilidade condicionalF (u; zk (n))
como a esperança condicional de uma variável aleatória
indicativa:

[ ] 1 se z (u α ) ≤ z k
F (u; z k (n)) = E I (u;z k (n) I (u α ; zk ) = 0 caso contrário
Os valores da fdac podem ser obtidos por krigagem ordinária de I (u ; z k )
PROCEDIMENTO
1. Fazer a codificação de cada observação em um vetor de K valores indicativos
1 se z (u α ) ≤ z k
I (u α ; z k ) =
0 caso contrário

OBS. O numero de classes deve ser escolhido de modo que as K+1 classes
tenham aproximadamente frequencias iguais. Recomenda-se usar mais de 5
classes e menos de 15.
2. Calcular os semivariogramas experimentais para cada ponto de
corte zk e, em seguida, fazer o modelamento dos mesmos.
3. Em cada localização não amostrada u,
– Estimar os K valores da fdac usando, por exemplo, a krigagem
ordinaria indicativa, i.e,
F (u; z k (n)) KIO = [I (u;z k ]*KIO
n (u )

= ∑ λα (u;z k ) I (u α ;z k )
α =1
– Interpolar ou extrapolar os valores da fdac para construir um modelo
continuo para a fdac, que permita recuperar a probabilidade de
qualquer ponto z..
Exemplo 10.1. : Para a variável Cd dos dados Jura, fazer o
mapeamento dos valores que ultrapassam o maximo valor permitido
de 0,8 ppm.

1. Foram considerados os seguintes pontos de corte


Zc Cdf (Quantil) Comando no EXCEL
0.8 0.34 =ORDEM.PORCENTUAL(E2:E260;N4;3)
1.07 0.50
1.38 0.60 F(x) 1
1.88 0.80
2.26 0.90

0.
0.34 0.50 0.60 0.80 0.90

OBS. No programa R, esses resultados (quantis) são obtidos


automaticamente
### R.3.5.1
rm(list=ls()) # limpar a area de trabalho
#### Exemplo 10.1. Por constução das FDA’s.
#Carregar pacotes
library(geoR)
library(gstat)
library(lattice)
library(sp)
library(MASS)

#Definir a area de trabalho


# CORRIGIR PARA O ENDEREÇO DO SEU COMPUTADOR

setwd("D:/Cursos_UFPA/2021_4/IntroGeo/Classroom")
dir()

#setwd(choose.dir()) # outra forma de acessar a area de


trabalho
############ Krigagem Indicativa ###########
### Objetivos: Construção de Mapas de riscos ###
### e Mapas Temáticos ###
#####################################################
## Modo 1. Por constução das FDA’s.
#Carregar pacotes
library(geoR)
library(gstat)
library(lattice)
library(sp)
library(MASS)

###### Variável selecionada: Cadmio


##### Valor máximo permitido (Zc = 0.8 ppm)
### Selecionar a variavel Cadmio
Geo <- read.table("jura.txt", head=T)
Geo[1:3,]
Cd <- as.geodata(Geo,coords.col = 1:2, data.col = 5)
# Analise variografica
variogCd <- variog(Cd, uvec = seq(0, 2, length = 20),
option = "bin")

par(mfrow = c(1,2)) # set up the graphics


plot(variogCd,type="l",main="Semivariograma
experimental",cex.main=0.8)

#Semivariograma unidirecional e modelo ajustado(geoR)


plot(variogCd, xlab = "Distância", ylab =
"Semivariância",pch=19)
lines.variomodel(cov.model = "spherical" , cov.pars =
rbind(c(0.35,0.2),c(0.26,1.3)), nugget = 0.25,
max.dist = 2, lwd = 2, col = "red")
text(1,0, "MODELO:0,25+0,35Sph(h/0,2) \n
+0,26Sph(h/1,3)",cex=0.6)
title("Semivariograma Experimental \n e modelo
ajustado",cex.main = 0.8)
## Ajuste automático usando mínimos quadrados ponderados
locin <- matrix(c(0.35,0.26,0.2,1.3), ncol=2)
locin
Cd.ols <- variofit(variogCd, ini=locin, nugget=0.25,
min="optim")
Cd.ols
plot(variogCd)
lines(Cd.ols, lty=2,
col="blue", lwd=3)

Cd.ols
Model: matern
parameter estimates:
Co Sill
tausq sigmasq phi
0.4753 0.3881 0.3980

Practical Range with


cor=0.05 for asymptotic
range: 1.192286
##Krigagem indicativa
#Definir grid (malha)
x <- seq(0,5.5,l=100)
y <- seq(0, 6, l=120)
locCd <- expand.grid(x=x,y=y)
summary(locCd)

## Krigagem Indicativa: predição de probabilidades e quantis


## Probabilidade de Cd ser maior que 0.8 ppm em cada ponto
OC <- output.control(thres=0.8, quan=c(0.34,0.50,0.60,0.80,0.90))
Cd.kc <- krige.conv(Cd,loc=locCd,
krige=krige.control(obj=Cd.ols),output=OC)

# examinando o objeto retornado pela função names(Cd.kc)


Zp<-Cd.kc$pred # valores preditos
Zv<-Cd.kc$krige.var # variancia
Zprob=Cd.kc$prob # probabilidades estimados do valor ser menor
que 0.8 nos pontos selecionados
Zc=1-Cd.kc$prob # probabilidades estimados do valor ser maior que
0.8 nos pontos selecionados
Ztype=Cd.kc$mean # E-type (médias)
Zq=Cd.kc$quant # quantis
#Salvando os resultados em uma tabela
ki <- cbind(Zp,Zv,Zc,Zprob,Ztype,Cd.kc$quant)

kind<-cbind(locCd,ki)
names(kind)
write.table(kind,"tkind.dat")

###Mapas
#Definição da escala de cores
rgb.palette <-
colorRampPalette(c("darkblue","blue","green",
"yellow","orange","red","red"),space = "rgb")
#Mapa de probabilidades Zc>0.8
image(Cd.kc, border=jbor, loc=locCd,
val=Zc,col = rgb.palette(15))
legend.krige(x.leg=c(-0.4,-0.05),
y.leg=c(3,6),Zc,col= rgb.palette(15), vert=TRUE)
title("Cadmio: Prob Zc>0.8")
# Mapa dos valores médios (E-type)
image(Cd.kc,border=jbor,loc=locCd,val=Ztype,col= rgb.palette(15))
legend.krige(x.leg=c(-0.4,-.05),y.leg=c(3,6),Ztype, col =
rgb.palette(15),vert=TRUE)
title("Cadmio: E-type")
# Mapa dos valores medianos (quantil-0.5)
Zmed=Cd.kc$quant[,2]
image(Cd.kc, border=jbor,loc=locCd,val=Zmed,col= rgb.palette(15))
legend.krige(x.leg=c(-0.4,-0.05)y.leg=c(3,6),Zmed,col=rgb.palette
(15), vert=TRUE)
title("Cadmio: Mediana")
CONSTRUÇÃO DE MAPAS POR SIMULAÇÃO
Simulação estocástica
Método capaz de gerar realizações equiprováveis
das variáveis com as seguintes características:
 reproduzem o histograma representativo do
domínio amostrado
 reproduzem a função de covariância C(h)
representativa do domínio da amostragem
 honram os valores das amostras nas suas
coordenadas
 apresentam uma maneira para quantificação da
incerteza.
SIMULAÇÃO

Simulação Realizações equiprováveis


Incerteza Flutuações entre as realizações
Principais Algoritmos de Simulação
Monte Carlo – método de aplicação geral
Seqüencial (Gaussiana) – Condicional aos dados
originais e simulados
p-Field – Condicional aos dados originais.
Annealing – Perturbação de imagem original até
ajustar um modelo desejado.
Simulação Seqüencial Gaussiana
1- Determinar o histograma representativo da
amostra;

2- Efetuar a normalização;

3- Verificar se a nova distribuição


pode ser aceita como multinormal;
4- Definir um caminho aleatório que passe
por todos os pontos a serem simulados;

6 23 14 32 26 10 9 29 16

18 2 28 5 40 22 34 4 8

42 15 3 38 30 35 39 17 25

21 12 36 43 37 45 1 31 13

7 19 41 11 24 33 44 20 27
5- Simulação do primeiro ponto: seleção aleatória de
um valor Z* a partir da distribuição F(u;z|(n))
definida por krigagem simples para o primeiro ponto
do caminho aleatório.
6- Selecionar aleatoriamente um valor dessa fdc.

2ks
mks

? Z*
7- Adicionar o valor simulado ao conjunto de dados
condicionantes;
8- Passar para o próximo ponto a ser simulado e
repetir o procedimento até que todos os pontos sejam
simulados  2
ks
mks

?
Z*
#### MODO ALTERNATIVO PARA KRIGAGEM INDICATIVA ###
### Mapa de Risco : Cadmio com uso de SIMULAÇAO ###
## Mais rapido do que por Função de Distribuição Acumulada
## Programa gstat

#Exemplo 10.2
### 2. Gaussian kriging
# Create a gstat object of Cadmio data
Cd.gstat <- gstat(id="Cd",formula=Cd~1, data=Geo,
nmax=50,nmin = 10)

# Calculate variogram
coordinates(Geo) <- ~x+y
varCd<-variogram(Cd~1, cutoff=2, width=2/20, Geo)
plot(varCd,type="b", lty=1, col="black",main="Cadmio")

vmCd <- vgm(0.35,"Sph",0.2, add.to =


vgm(0.26,"Sph",1.3),nugget=0.25)
plot(varCd,vmCd,type="b",lty=1,lwd=2,
col="black",main="Cadmio")
Cd.gstat <- gstat(Cd.gstat,model=vmCd,fill.all=T)
jura.grid <- expand.grid(seq(0,5.5,l=105),
seq(0,6,l=120))
names(jura.grid) <- c("x","y")
gridded(jura.grid) = ~x+y
summary(jura.grid)
length(jura.grid) # 12600 (120*105)

n.sim = 100 # numero de simulacoes


Cd.cs <- predict(Cd.gstat,jura.grid,nsim=n.sim)

#### Se der erro na primeira tentativa


#### Por favor, volte para ### 2. Gaussian kriging
(rode novamente) ####

# Now plot four realizations


spplot(Cd.cs[1:4],at=brks,col.regions=bluepal(30))
#Turn the simulation data into a 12600 x n.sim matrix
sim.matrix <-
matrix(rep(0,12600*n.sim),nrow=12600,ncol=n.sim)
# Create empty matrix
dim(sim.matrix) #1260 li x 100 colunas(simulacoes)
dim(Cd.cs)
for (i in 1:n.sim){sim.matrix[,i] <- Cd.cs[[i]]} #
Turn each map into a column of sim.matrix
sim.matrix[1:5,1:4]
### 4.1 Mapa de risco para Cd > 0.8 ppm
### Calcular pct of each map above 0.8 ppb Cd > 0.8 ppm

pct.08 <- apply(sim.matrix > 0.8,1,mean)


summary(pct.08)
hist(pct.08)
map.08 <-
data.frame(pct.08,x=jura.grid$x,y=jura.grid$y)
gridded(map.08)<-~x+y
Exemplo 10.3 Fazer o mapeamento do Uso da terra do banco Jura
utilizando krigagem indicativa.

#### Exemplo 10.3


#Carregar pacotes
rm(list=ls()) # limpar a area de trabalho
#Carregar pacotes
library(geoR)
library(gstat)
library(lattice)
library(sp)

#Definir a area de trabalho


setwd("D:/Cursos_UFPA/2021_3/IntroGeo2021/ClassRoom")

## lendo arquivo com bordas da área de estudo


jbor <- read.table("jurabor.txt", head=T)
jbor[1:5,]
#1. Acrescenta no arquvo Geo variáveis "dummy"
# para identificar cada uso da terra (Landuse)

Geo[1:5,]
# Uso da Terra Nome da variavel (Landuse)
# Floresta: Flore(1)
# Pasto : Pasto(2)
# Prado : Prado(3)
# lavoura : Lavoura(4)

# Criação de variaveis dummies para cada categoria.


Geo$Flore <- ifelse(Geo$Landuse==1,1,0)
Geo$Pasto <- ifelse(Geo$Landuse==2,1,0)
Geo$Prado <- ifelse(Geo$Landuse==3,1,0)
Geo$Lavoura <- ifelse(Geo$Landuse==4,1,0)

Geo[1:5,]

Geo[1:5,13:16]
# Flore coluna 13
# Pasto coluna 14
# Prado coluna 15
# Lavoura coluna 16
###Semivariograma experimental da variavel Floresta
Flore <- as.geodata(Landuse, coords.col = 1:2,data.col= 4)

par(mfrow = c(1,2)) # set up the graphics


v.flor <- variog(Flore, uvec = seq(0, 2, length = 20),
option = "bin")
plot(v.flor, xlab = "Distância", ylab = "Semivariância",
main="Semivariograma Floresta",type="b", col = "black")

#Semivariograma unidirecional e modelo ajustado


plot(v.flor, xlab = "Distância", ylab = "Semivariância")
lines.variomodel(cov.model = "spherical" , cov.pars =
rbind(c(0.04,0.5),c(0.08,1.4)),nugget=0.01,max.dist= 2,
lwd = 2, col = "red")
text(1,0.01, "MODELO: 0.01 + 0.04 Sph(h/0,5) + 0.08 Sph
(h/1,4)")
title("Semivariograma Experimental e modelo ajustado")
# Ajuste usando mínimos quadrados ponderados
locin <- matrix(c(0.04,0.08,0.5,1.4), ncol=2)
flor.ols <- variofit(v.flor, ini=locin, nugget=0.01, min="optim")
plot(v.flor)
lines(flor.ols, lty=1, col="red")
title("Semivariograma
ajustado Floresta")
###Semivariograma experimental da variavel Pasto
Pasto <- as.geodata(Landuse, coords.col =1:2,data.col = 5)

par(mfrow = c(1,2)) # set up the graphics


v.pas <- variog(Pasto, uvec = seq(0, 2, length = 20),
option = "bin")
plot(v.pas, xlab = "Distância", ylab = "Semivariância",
main = "Semivariograma Floresta", type = "b", col =
"black")

#Semivariograma unidirecional e modelo ajustado


plot(v.pas, xlab = "Distância", ylab = "Semivariância")
lines.variomodel(cov.model = "spherical" , cov.pars =
rbind(c(0.17,0.4)), nugget = 0.01, max.dist = 2, lwd =
2, col = "red")
text(1,0.01, "MODELO: 0.01 + 0.17 Sph(h/0,4)")
title("Semivariograma Experimental e modelo ajustado")
# Ajuste usando mínimos quadrados ponderados
pas.ols <- variofit(v.pas, ini=c(0.17,0.4), nugget=0.01,
min="optim")
plot(v.pas)
lines(pas.ols, lty=1, col="red")
title("Semivariograma
ajustado Pasto")
###Semivariograma experimental da variavel Prado
Prado <- as.geodata(Landuse, coords.col= 1:2, data.col =6)

par(mfrow = c(1,2))
v.pra <- variog(Prado, uvec = seq(0, 2, length = 20),
option = "bin")
plot(v.pra, xlab = "Distância", ylab = "Semivariância",
main = "Semivariograma Prado", type = "b", col =
"black")

#Semivariograma unidirecional e modelo ajustado


plot(v.pra, xlab = "Distância", ylab = "Semivariância")
lines.variomodel(cov.model = "spherical" , cov.pars =
rbind(c(0.23,0.4)), nugget = 0.01, max.dist = 2, lwd =
2, col = "red")
text(1,0.01, "MODELO: 0.01 + 0.23 Sph(h/0,4)")
title("Semivariograma Experimental e modelo ajustado")
#Semivariograma unidirecional e modelo ajustado
plot(v.pra, xlab = "Distância", ylab = "Semivariância")
lines.variomodel(cov.model = "spherical" , cov.pars =
rbind(c(0.23,0.4)), nugget = 0.01, max.dist = 2, lwd = 2, col =
"red")
text(1,0.01, "MODELO: 0.01 + 0.23 Sph(h/0,4)")
title("Semivariograma Experimental e modelo ajustado")
###Semivariograma experimental da variavel Lavoura
Lavoura <- as.geodata(Landuse,coords.col=1:2, data.col =7)

par(mfrow = c(1,2))
v.lav <- variog(Lavoura, uvec = seq(0, 2, length = 20),
option = "bin")
plot(v.lav, xlab = "Distância", ylab = "Semivariância",
main = "Semivariograma Lavoura", type = "b", col =
"black")

#Semivariograma unidirecional e modelo ajustado


plot(v.lav, xlab = "Distância", ylab = "Semivariância")
lines.variomodel(cov.model = "spherical" , cov.pars =
rbind(c(0.020,0.4)), nugget = 0.001, max.dist = 2, lwd =
2, col = "red")
text(1,0.001, "MODELO: 0.001 + 0.020 Sph(h/0,4)")
title("Semivariograma Experimental e modelo ajustado")
# Ajuste usando mínimos quadrados ponderados
lav.ols <- variofit(v.lav, ini=c(0.020,0.4),nugget=0.00,min=
"optim")
plot(v.lav)
lines(lav.ols, lty=1, col="red")
title("Semivariograma
ajustado Lavoura")
##Krigagem indicativa
#Definir grid (malha)
x <- seq(0,5.5,l=100)
y <- seq(0, 6, l=120)
locn <- expand.grid(x=x,y=y)
summary(locn)

kc.flor <- krige.conv(Flore, loc=locn,


krige=krige.control(obj=flor.ols))
summary(kc.flor)

kc.pas <- krige.conv(Pasto, loc=locn,


krige=krige.control(obj=pas.ols))
summary(kc.pas)

kc.pra <- krige.conv(Prado, loc=locn,


krige=krige.control(obj=pra.ols))
summary(kc.pra)

kc.lav <- krige.conv(Lavoura, loc=locn,


krige=krige.control(obj=lav.ols))
summary(kc.lav)
#Mapas da cada categoria
par(mfrow = c(2,2))
flor<-kc.flor$predict
image(kc.flor, border=jbor, loc=locn, val=flor,col=rainbow(9))
legend.krige(x.leg=c(-0.4,-0.05),
y.leg=c(2.5,5.5),flor,col=rainbow(9), vert=TRUE)
title("Floresta")

pas<-kc.pas$predict
image(kc.pas, border=jbor, loc=locn, val=pas,col=rainbow(9))
legend.krige(x.leg=c(-0.4,-0.05),
y.leg=c(2.5,5.5),pas,col=rainbow(9), vert=TRUE)
title("Pasto")

pra<-kc.pra$predict
image(kc.pra, border=jbor, loc=locn, val=pra,col=rainbow(9))
legend.krige(x.leg=c(-0.4,-0.05),
y.leg=c(2.5,5.5),pra,col=rainbow(9), vert=TRUE)
title("Prado")

lavo<-kc.lav$predict
image(kc.lav, loc=locn,border=jbor,val=lavo,col=rainbow(9))
legend.krige(x.leg=c(-0.4,-0.05),
y.leg=c(2.5,5.5),val=lavo,col=rainbow(8), vert=TRUE)
title("Lavoura")
###Mapas de probabilidade
#Construção das tabelas com valores preditos
prob <- cbind(kc.flor$predict,kc.pas$predict,kc.pra$predict,kc.
lav$predict)
colnames(prob) <- c("Floresta", "Pasto", "Prado", "Lavoura")
#Renomeando as colunas de cada categoria
max <- max.col(prob) #categoria que apresentou valor máximo de
probabilidade
mapa <- cbind(locn,max) #Tabela com localização e valor máximo
colnames(mapa) <- c("X","Y","Prob") #Renomeando as colunas da
tabela
summary(mapa)

class(mapa) <- "kriging" # definindo a classe das variaveis


mapa$predict <- mapa$Prob # redefinindo o valor "Prob"
mapa$coords <- cbind(mapa$X,mapa$Y) #redefinindo as coordenadas

#Mapa de probabilidades por classes


par(cex = 1.2) #definfindo o tamanho dos caracteres
image(mapa, locations = locn, borders=jbor, xlab="W-E", ylab="S-
N", col = rainbow(4))
legend(-0.5, 5.5,c("Floresta", "Pasto", "Prado","Lavoura"), fill
= rainbow(4))

Você também pode gostar