Geoestatística

Análise de dados de superfície contínua para o estado do Piauí em relação aos níveis de pH

1 Descrição

     Os dados utilizados são referentes ao nível de pH na aguá no estado do Piauí caracterizado em uma escala que vai de 0 a 14, onde acima de 7 a água tende a ser mais alcalina, pH igual a 7 é considerada neutra e ideal para o consumo, já para níveis abaixo de 7 a água tende a ser mais ácida.

1.1 Pacotes Utilizados

library(geoR)
library(MASS)
library(moments)
library(fBasics)
library(akima)
library(readxl)
library(skimr)
library(terra)
library(readxl)
library(knitr)
library(classInt)

1.2 Importação e vizualização dos dados

# Importação
dados_ph = read_xlsx("dados_ph.xlsx")
dados_geral = read_xlsx("Dados_Apresenta.xlsx")
borda = read.table('bord.txt')

# Ajustes
df_base = cbind(dados_geral[,1:5],dados_ph)
#polygon(borda)

geosolo <- as.geodata(df_base, coords.col=c(2,3), data.col=6)
geosolo$borders <- with(borda, cbind(V1,V2))
attach(geosolo)

# Vizualização
kable(head(df_base,10), align = "l",
      caption = "10 primeiras observações")
10 primeiras observações
Amostra X…2 Y…3 X…4 Y…5 pH (H2O)
1 468784.8 9157565 78.13823 365.7161 4.215
2 460290.1 9136197 69.64356 344.3485 4.400
3 733695.1 9071127 343.04847 279.2777 3.800
4 789261.3 8962017 398.61471 170.1680 5.155
5 783996.7 8965400 393.35009 173.5506 5.450
6 772256.5 8981080 381.60990 189.2307 5.430
9 828691.8 9002033 438.04523 210.1842 4.970
10 797553.6 8997781 406.90702 205.9318 4.995
11 759188.4 8996550 368.54182 204.7013 5.770
12 728055.0 8999282 337.40840 207.4325 5.510

2 Descritivas

     Primeiramente iremos realizar uma descritiva básica da variável pH:

2.1 Resumo

summary(geosolo)
## Number of data points: 243 
## 
## Coordinates summary
##        X...2   Y...3
## min 420797.9 8806076
## max 985985.9 9686916
## 
## Distance summary
##         min         max 
##    120.1225 968602.3272 
## 
## Borders summary
##            V1      V2
## min  390646.6 8791849
## max 1012045.0 9696707
## 
## Data summary
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## 3.110000 3.792500 4.550000 4.715905 5.412500 8.565000

     Verificamos assim, que a média dos dados de pH foi igual 4.715905, esta medida descritiva iremos utilizar no processo de krigagem mais adiante. Ainda podemos verificar que em relação as coordenadas temos do mínimo para o máximo:

  • X: [420797.9 : 985985.9]
  • Y: [8806076 : 9686916]

     A distância mínima encontrada foi de 120.1225 e a máxima de 968602.3272, como iremos utilizar 1/3 da distância para a construção do variograma, iremos ter utilizar a distância no valor 322867.4.

2.2 Descritiva Espacial

plot(geosolo, low=T,lam=0)

     Podemos obervar que nos gráficos 2 e 3, não existe uma evidência clara de efeitos de tendência sobre as coordenadas Y e as coordenadas X, respectivamente. No primeiro gráfico é apresentado a relação da variável pH com base nas coordenadas X e Y, enquanto que pelo quarto gráfico vemos uma distribição quase uniforme nos dados da variável entre 1.2 e 1.7.

     Podemos ainda verificar por uma mapa onde podemos verificar as maiores e menores níveis de pH no estado do Piauí, com base em um intervalo mais aproximado da escala de pH:

points(geosolo, pt.div=c(3,4,6,8,9), col = c("red","yellow","green3","blue3"),
       xlab="Coord X", ylab="Coord Y",
       x.leg=250000,
       y.leg=9650000)

     Verificamos que pelo mapa de pontos, na parte sudeste do estado há uma maior concentração de níveis de pH considerados neutro com uma escala entre 6 e 8, assim também como no norte do estado que possuem alguns pontos nesta escala. Ainda região sudeste, verificamos que é a única região do estado a possuir pontos evidenciando níveis mais altos de pH, ou seja, águas mais alcalinas.

     Na região norte e centro do estado vemos uma maior concentração de níveis que variam entre 4 a 6, ou seja, razoavelmente ácidas, possivelmente uma maior concetração de águas advindas pela chuva. Já na região sul do estado vemos uma maior distribuição de pontos com níveis mais báixos, ou seja, uma região que possui águas moderadamente alcalinas.

     Outro mapa que podemos mostrar é o com base nos quintis, portanto:

points(geosolo, pt.div="quintiles",
       xlab="Coord X", ylab="Coord Y",
       x.leg=250000,
       y.leg=9650000)

2.2.1 Verificando os efeitos quanto aos níveis de tendência

plot(geosolo, low = T, trend = "1st")

plot(geosolo, low = T, trend = "2nd")

     Aqui podemos notar que mesmo aplicando diferentes níveis de tendência não houve nenhuma melhora significativa na tendência quanto as coordenada X e Y, com isso, iremos continuar as análises com base apenas no modelo sem efeito de tendência.

2.3 Variogramas

par(mfrow=c(2,2))
var1 = variog(geosolo, coords = coords , max.dist=322867.4)
## variog: computing omnidirectional variogram
var2 = variog(geosolo, coords = coords , option="cloud")
## variog: computing omnidirectional variogram
var3 = variog(geosolo, coords = coords ,uvec=seq(0,322867.4,l=50))
## variog: computing omnidirectional variogram
env.var = variog.mc.env(geosolo, obj.v=var3, nsim=40) 
## variog.env: generating 40 simulations by permutating data values
## variog.env: computing the empirical variogram for the 40 simulations
## variog.env: computing the envelops
plot(var1)
plot(var2)
plot(var3)
plot(var3, env=env.var)

     Podemos notar que em determinados intervalos de distância, há evidencias para uma dependencia espacial, como nos intervalos de 0 a mais ou menos 70000, de 80000 a uns 250000 e assim por diante.Ainda assim, pelo último plot da simulação de envelope, podemos considerar que existe evidências de dependência espacial.

3 Ajustes de modelo com base no chute inicial

     Para a construção dos modelos com base nos parâmetros estimados, iremos utilizar um chute incial com os seguintes valores:

  • sigmasq = 1.31
  • phi = 83679.35
  • tausq = 0.24

todos esses valores foram considerados através de um ajuste visual com base na função eyefit().

3.1 Estimação dos parâmetros

     Utilizando os cov.models:

  • spherical
  • matern
  • wave
  • exponential
  • gaussian

onde no último modelo wave, será realizado alguns ajustes extras afim de verificar um melhor ajuste. Portanto, teremos os seguintes ajustes:

# Estimação dos Parâmetros
pH.ml0 <- list()
pH.ml0$matern <- likfit(geosolo,  ini=c(1.31, 83679.35), nug=0.24,cov.model = "matern")
## ---------------------------------------------------------------
## likfit: likelihood maximisation using the function optim.
## likfit: Use control() to pass additional
##          arguments for the maximisation function.
##         For further details see documentation for optim.
## likfit: It is highly advisable to run this function several
##         times with different initial values for the parameters.
## likfit: WARNING: This step can be time demanding!
## ---------------------------------------------------------------
## likfit: end of numerical maximisation.
pH.ml0$exp <- likfit(geosolo,  ini=c(1.31, 83679.35), nug=0.24,cov.model = "exponential")
## kappa not used for the exponential correlation function
## ---------------------------------------------------------------
## likfit: likelihood maximisation using the function optim.
## likfit: Use control() to pass additional
##          arguments for the maximisation function.
##         For further details see documentation for optim.
## likfit: It is highly advisable to run this function several
##         times with different initial values for the parameters.
## likfit: WARNING: This step can be time demanding!
## ---------------------------------------------------------------
## likfit: end of numerical maximisation.
pH.ml0$gaus <- likfit(geosolo,  ini=c(1.31, 83679.35), nug=0.24,cov.model = "gaussian")
## kappa not used for the gaussian correlation function
## ---------------------------------------------------------------
## likfit: likelihood maximisation using the function optim.
## likfit: Use control() to pass additional
##          arguments for the maximisation function.
##         For further details see documentation for optim.
## likfit: It is highly advisable to run this function several
##         times with different initial values for the parameters.
## likfit: WARNING: This step can be time demanding!
## ---------------------------------------------------------------
## likfit: end of numerical maximisation.
pH.ml0$spher <- likfit(geosolo,  ini=c(1.31, 83679.35), nug=0.24,cov.model = "spherical")
## kappa not used for the spherical correlation function
## ---------------------------------------------------------------
## likfit: likelihood maximisation using the function optim.
## likfit: Use control() to pass additional
##          arguments for the maximisation function.
##         For further details see documentation for optim.
## likfit: It is highly advisable to run this function several
##         times with different initial values for the parameters.
## likfit: WARNING: This step can be time demanding!
## ---------------------------------------------------------------
## likfit: end of numerical maximisation.
pH.ml0$wave <- likfit(geosolo,  ini=c(1.31, 83679.35), nug=0.24,cov.model = "wave")
## kappa not used for the wave correlation function
## ---------------------------------------------------------------
## likfit: likelihood maximisation using the function optim.
## likfit: Use control() to pass additional
##          arguments for the maximisation function.
##         For further details see documentation for optim.
## likfit: It is highly advisable to run this function several
##         times with different initial values for the parameters.
## likfit: WARNING: This step can be time demanding!
## ---------------------------------------------------------------
## likfit: end of numerical maximisation.
summary(pH.ml0$matern)
## Summary of the parameter estimation
## -----------------------------------
## Estimation method: maximum likelihood 
## 
## Parameters of the mean component (trend):
##   beta 
## 4.7988 
## 
## Parameters of the spatial component:
##    correlation function: exponential
##       (estimated) variance parameter sigmasq (partial sill) =  0.5305
##       (estimated) cor. fct. parameter phi (range parameter)  =  83679
##    anisotropy parameters:
##       (fixed) anisotropy angle = 0  ( 0 degrees )
##       (fixed) anisotropy ratio = 1
## 
## Parameter of the error component:
##       (estimated) nugget =  0.251
## 
## Transformation parameter:
##       (fixed) Box-Cox parameter = 1 (no transformation)
## 
## Practical Range with cor=0.05 for asymptotic range: 250680.9
## 
## Maximised Likelihood:
##    log.L n.params      AIC      BIC 
## "-254.9"      "4"  "517.8"  "531.8" 
## 
## non spatial model:
##    log.L n.params      AIC      BIC 
## "-363.7"      "2"  "731.4"  "738.4" 
## 
## Call:
## likfit(geodata = geosolo, ini.cov.pars = c(1.31, 83679.35), nugget = 0.24, 
##     cov.model = "matern")
pH.ml0$matern$nospatial$AIC.ns
## [1] 731.412
AIC = (sapply(pH.ml0, AIC))
BIC = c(pH.ml0$matern$BIC,pH.ml0$exp$BIC,pH.ml0$gaus$BIC,pH.ml0$spher$BIC,pH.ml0$wave$BIC)

compar = rbind(AIC,BIC)

kable(compar, caption = "Comparação das métricas entre os modelos espaciais")
Comparação das métricas entre os modelos espaciais
matern exp gaus spher wave
AIC 517.8430 517.8430 527.1301 554.7706 521.5143
BIC 531.8153 531.8153 541.1023 568.7428 535.4865

     Podemos verificar que dois modelos registraram os melhores AIC’s e BIC’s entre os demais e sendo iguais entre si, portanto, por critério de escolha iremos continuar as análises utilizando o modelo com base na função de correlação matern.

AIC_NS = c(pH.ml0$matern$nospatial$AIC.ns, pH.ml0$exp$nospatial$AIC.ns,
        pH.ml0$gaus$nospatial$AIC.ns,
        pH.ml0$spher$nospatial$AIC.ns,
        pH.ml0$wave$nospatial$AIC.ns)

BIC_NS = c(pH.ml0$matern$nospatial$BIC.ns, pH.ml0$exp$nospatial$BIC.ns,
        pH.ml0$gaus$nospatial$BIC.ns,
        pH.ml0$spher$nospatial$BIC.ns,
        pH.ml0$wave$nospatial$BIC.ns)

compar_ns = rbind(AIC_NS,BIC_NS)

colnames(compar_ns) = c("matern","exp","gaus","spher","wave")

kable(compar_ns, caption = "Comparação das métricas entre os modelos não espaciais")
Comparação das métricas entre os modelos não espaciais
matern exp gaus spher wave
AIC_NS 731.4120 731.4120 731.4120 731.4120 731.4120
BIC_NS 738.3981 738.3981 738.3981 738.3981 738.3981

     Com base na tabela acima, podemos verificar que as métricas AIC e BIC para os modelos não espcaciais são idênticas.

4 Krigagem

     Realizando processo de krigagem para o modelo matern:

4.1 Grid para predição espacial

GR <- pred_grid(geosolo$borders, by=10000)
gr0 <- GR[.geoR_inout(GR, geosolo$borders),]
points(geosolo)
points(GR, pch=".",cex=1.5)

4.2 Predição espacial

KC <- krige.control(type="SK",obj.model = pH.ml0$matern)
geosolo.kc <- krige.conv(geosolo, loc=gr0, krige=KC)
## krige.conv: results will be returned only for prediction locations inside the borders
## krige.conv: model with constant mean
## krige.conv: Kriging performed using global neighbourhood
image(geosolo.kc, GR,
      geosolo$borders,
      col=terrain.colors(200),
      x.leg=c(858233, 1200000), y.leg=c(8859000, 8910972),cex=0.7)

     Portanto, conforme o que já vinha sido apresentado anteriormente, vemos que na região sudeste existe a maior intensidade de níveis mais elevados de pH com valores de 6 a mais.

4.3 Predição espacial com base na raiz de variância

image(geosolo.kc, loc=GR,
      bor=geosolo$borders, col=terrain.colors(21),
      val=sqrt(geosolo.kc$krige.var),
      x.leg=c(858233, 1250000), y.leg=c(8859000, 8910972),cex=0.6)

     Com base neste mapa verificamos uma maior concentração na parte sul, nordeste do estado.

4.4 Simulação

     Utilizando a média = 4.715905:

OC <- output.control(thres=4.715905,
                     quantile=c(0.1, 0.9))

geosolo.kc <- krige.conv(geosolo, loc=gr0, krige=KC, out=OC)
## krige.conv: results will be returned only for prediction locations inside the borders
## krige.conv: model with constant mean
## krige.conv: sampling from the predictive distribution (conditional simulations)
## krige.conv: Kriging performed using global neighbourhood

4.4.1 Mapa de probabilidade

image(geosolo.kc, loc=GR, bor=geosolo$borders, col=terrain.colors(21), 
      val=1-geosolo.kc$prob,x.leg=c(858233, 1200000), y.leg=c(8859000, 8910972),cex=0.7)

     Aqui notamos que nas regiões norte, nordeste e sudeste existem as maiores probabilidades de incidência de níveis mais alto de pH, principalmente na faixa litorânea ao norte e na parte sudeste.

4.4.2 Mapa 90º percentil e 10º percentil

image(geosolo.kc, loc=GR, bor=geosolo$borders, col=terrain.colors(21), 
      val=geosolo.kc$quantile$q90,x.leg=c(858233, 1200000), y.leg=c(8859000, 8910972),cex=0.7)
title("90º percentil")

     Aqui podemos veririficar a representação espacial dos dados chamados de “baixos confiáveis”, valores que representam 10% dos dados mais altos da variável em estudo, com isso, verificamos a parte leste do estado abriga a maior quantidade com níveis mais altos e na parte norte do estado vemos uma concentração mais baixa e dispersa dos valores mais altos.

image(geosolo.kc, loc=GR, bor=geosolo$borders, col=terrain.colors(21), 
      val=geosolo.kc$quantile$q10,x.leg=c(858233, 1200000), y.leg=c(8859000, 8910972),cex=0.7)
title("10º percentil")

     Neste mapa a vizualização se dará com base nos chamados “altos confiáveis”.

5 Conclusão

     Com base no que foi analizado, as regiões mais ao note e ao leste foram as que mais possuiam os níveis de pH mais altos, dentro dentro desses níveis, também englobavam aquele considerado neutro. Já as demais regiões possuiam níveis mais baixos de pH, podendo ser consideradas regiões com águas mais ácidas.

     Foi também encontrado evidências para uma dependência espacial nos dados, porém, sem evidências conclusivas sobre a tendência em relação as coordenadas X e Y.