Variograma

O variograma ( 2 γ ( x , y ) {\displaystyle 2\gamma (x,y)} ) é uma função que mede a variação do valor de uma variável em relação às restantes da mesma amostragem. Embora seja, de facto, uma derivação da medição de dispersão estatística variância é comumente utilizado em estatística espacial devido a contextualizar esta medição com a dimensão espacial considerando, geralmente mas não obrigatoriamente, a distância entre amostras e/ou a orientação delas.

Definição

Se μ = E ( Z ) {\displaystyle \mu =E(Z)} é o valor esperado (média) de uma dada amostragem Z {\displaystyle Z} então a sua dispersão estatística pode ser calculada com a variância:

var ( Z ) = E ( ( Z μ ) 2 ) {\displaystyle \operatorname {var} (Z)=\operatorname {E} ((Z-\mu )^{2})}

No entanto esta medição não nos dá qualquer informação sobre a sua dispersão espacial pelo que é utilizado o método do variograma para, re-amostrando as populações de acordo com a distância entre pares de pontos, calcular a variância considerando apenas os pares de amostras que se encontram a uma distância h {\displaystyle h} . Assim o variograma é dado pela seguinte fórmula:

2 γ ( x , x + h ) = var ( Z ( x ) Z ( x + h ) ) = E ( | ( Z ( x ) E ( x ) ) ( Z ( x + h ) E ( x + h ) ) | 2 ) {\displaystyle 2\gamma (x,x+h)={\text{var}}(Z(x)-Z(x+h))=E\left(|(Z(x)-E(x))-(Z(x+h)-E(x+h))|^{2}\right)\quad }

Onde o valor de γ ( x , x + h ) {\displaystyle \gamma (x,x+h)} é chamado de semi-variograma (o semi-variograma é também muitas vezes, no campo da geoestatística, designado variograma). Se assumirmos que a média é constante por todo o campo espacial considerado então o variograma é:

2 γ ( x , x + h ) = 1 N ( h ) N ( h ) [ Z ( x ) Z ( x + h ) ] 2 {\displaystyle 2\gamma (x,x+h)={\frac {1}{N(h)}}\sum _{N(h)}[Z(x)-Z(x+h)]^{2}\quad }

Onde o N ( h ) {\displaystyle N(h)} é o número de pares de pontos à distância de h {\displaystyle h} . Repare-se que ao fazer este cálculo para re-amostragens de pontos com diferentes distâncias h {\displaystyle h} é possível fazer uma previsão da variância espacial expectável para a amostragem Z {\displaystyle Z} . O critério da distância não é o único que pode ser utilizado na caracterização espacial da variância (variograma), também a orientação pode ser usada na re-amostragem da mesma população. Se a orientação de uma direção sobre um dado referencial for dada pelos ângulos " α {\displaystyle \alpha } , β {\displaystyle \beta } " então a re-amostragem para o cálculo do valor do variograma só poderá ter em conta pares de pontos que se encontrem com uma orientação espacial em relação ao referencial usado de " α {\displaystyle \alpha } , β {\displaystyle \beta } " à distància de h {\displaystyle h} . Quando a orientação das re-amostragens para o cálculo do variograma é desconsiderada, este é comumente designado por variograma omni-direcional caso contrário trata-se de um variograma direcional com orientação " α {\displaystyle \alpha } , β {\displaystyle \beta } ".

Variograma experimental

O variograma experimental (ou variograma empírico) é calculado a partir dos valores amostrais da variável consoante a distância e a direcção consideradas, visualizando o resultado por meio de um gráfico de dispersão. Assumindo que re-amostramos uma dada população Z {\displaystyle Z} e calculámos o valor do semi-variograma para as distâncias de h 1 {\displaystyle h_{1}} , h 2 {\displaystyle h_{2}} , h 3 {\displaystyle h_{3}} , h 4 {\displaystyle h_{4}} e h 5 {\displaystyle h_{5}} , obtemos a previsão experimental da variação espacial da população Z {\displaystyle Z} .

Importa referir que calcular o variograma de todos os pares de amostras a uma distância h {\displaystyle h} ou calcular o valor esperado (média) dos vários variogramas individuais é equivalente:

E [ γ ( h ) ] = 1 2 | N ( h ) | ( i , j ) N ( h ) E [ | Z ( x i ) Z ( x j ) | 2 ] = 1 2 | N ( h ) | ( i , j ) N ( h ) 2 γ ( x j x i ) {\displaystyle E[\gamma (h)]={\frac {1}{2|N(h)|}}\sum _{(i,j)\in N(h)}E[|Z(x_{i})-Z(x_{j})|^{2}]={\frac {1}{2|N(h)|}}\sum _{(i,j)\in N(h)}2\gamma (x_{j}-x_{i})}

Devido a vários factores (nomeadamente a escassez de dados) muitas vezes se dão tolerância aos critérios de cálculo do variograma (distância e orientação). Assim um par de amostras que se encontre suficientemente perto de ter uma distância h {\displaystyle h} entra para o cálculo do valor do variograma desse mesmo h {\displaystyle h} ( h ± Δ h {\displaystyle h\pm \Delta h} ). Igualmente podemos dizer que um par de amostras que encontre suficiente perto de ter uma orientação " α {\displaystyle \alpha } , β {\displaystyle \beta } " entra para o cálculo do valor do variograma dessa mesma orientação " α {\displaystyle \alpha } , β {\displaystyle \beta } " (" α ± Δ α {\displaystyle \alpha \pm \Delta \alpha } , β ± Δ β {\displaystyle \beta \pm \Delta \beta } "). Na figura abaixo podemos ver como vários pontos próximos das suas distâncias h {\displaystyle h} (a verde) são usados no cálculo do variograma final (a preto).

Outros critérios são usados no cálculo do variograma experimental, dependendo do objectivo ou software utilizado, como por exemplo:

  • distância mínima considerada (cutoff distance).
  • distância máxima considerada (cutoff distance).
  • limite angular (bandwidth).
  • número de classes (number of lags).
  • tamanho da classe (lag distance).
  • tolerância ao tamanho da classe (lag tolerance).

Em termos gerais podemos dizer que o variograma experimental corresponde ao variograma real calculado a partir dos dados implicando, necessariamente, tratar-se de uma análise discreta dos dados pelo que não é possível saber o valor de variograma para todas as distâncias h {\displaystyle h} .

Modelos de variograma

Em alguns campos, como é o caso da geoestatística (geralmente ao utilizar-se métodos como, por exemplo, a krigagem) é necessário conseguir-se calcular o valor do variograma para qualquer distância o que leva a ter de se ajustar um modelo matemático aos dados experimentais. Isto é feito em recurso ao um patamar imposto pelo utilizador (que, regra geral, é igual à variância da amostragem). Este patamar aparece como uma linha no variograma experimental e irá fazer com que modelo ajustado não exceda o limite imposto convergindo para o mesmo:

Embora muitos modelos matemáticos possam ser ajustados a um variograma experimental os mais usados são (Soares, 2006)[1]:

  • Modelo exponencial:
γ ( h ) = C 0 + C 1 [ 1 e ( 3 h / a ) ] {\displaystyle \gamma (h)=C_{0}+C_{1}[1-e^{(-3h/a)}]\qquad }
  • Modelo esférico:
γ ( h ) = { C 0 + C 1 [ 1.5 h a 0.5 ( h a ) 3 ] , p a r a h a C , p a r a h > a {\displaystyle \gamma (h)=\left\{{\begin{matrix}C_{0}+C_{1}[1.5{\frac {h}{a}}-0.5({\frac {h}{a}})^{3}],&para\quad h\leq a\\C,&para\quad h>a\end{matrix}}\right.}
  • Modelo gaussiano:
γ ( h ) = C 0 + C 1 [ 1 e ( 3 h 2 / a 2 ) ] {\displaystyle \gamma (h)=C_{0}+C_{1}[1-e^{(-3h^{2}/a^{2})}]\qquad }

0 ajuste do modelo é feito com base em três parâmetros:

  • Efeito pepita (nugget effect, C 0 {\displaystyle C_{0}} ).
  • Patamar (sill, C = C 0 + C 1 {\displaystyle C=C_{0}+C_{1}} ).
  • Amplitude (range, a {\displaystyle a} ).

Em teoria o valor do variograma é nulo, γ ( h ) = 0 {\displaystyle \gamma (h)=0} , quando h = 0 {\displaystyle h=0} , no entanto na prática existe uma diferença no valor para o mais pequeno h {\displaystyle h} pelo qual possa ser quantificado γ ( h ) {\displaystyle \gamma (h)} . Quando este valor é elevado então assume-se existir uma grande variabilidade à pequena escala implicando que γ ( h ) {\displaystyle \gamma (h)} não tende para zero quando h {\displaystyle h} tende para zero. São nestes casos que importa ajustar o modelo ao variograma experimental considerando o efeito a pequenas escalas dado pela constante C 0 {\displaystyle C_{0}} designada por efeito pepita. Na figura seguinte pode-se ver um modelo esférico ( v e r d e {\displaystyle {\color {Green}verde}} ), exponencial ( a z u l {\displaystyle {\color {Blue}azul}} ) e gaussiano ( p u r p u r a {\displaystyle {\color {Purple}purpura}} ) ajustados a um variograma experimental com a mesma amplitude e efeito pepita nulo (origem dos modelos estão no ponto "0,0").

Algoritmo do variograma (Python)

A implementação bidimensional que se segue é feita na linguagem Python (versão 2.7.2) com recurso à biblioteca NumPy tendo por esse motivo o seguinte cabeçalho de importações (está considerado também a biblioteca matplotlib usada para visualização):

from __future__ import division
import numpy as np
import matplotlib.pyplot as plt

De notar que o código seguinte introduzido em três funções não segue todas os parâmetros geralmente utilizados pelos softwares de geoestatística. A título de exemplo num variograma a direção de 90º é igual à direção de -90º o que não está previsto nesta implementação. Serve apenas como demonstração do cálculo de uma variograma experimental e posterior adequação de um modelo.

def variograma_experimental(dados):
    angulos = np.zeros((dados.shape[0],dados.shape[0]))
    distancias = np.zeros((dados.shape[0],dados.shape[0]))
    angulos[:,:]=np.NAN
    distancias[:,:]=np.NAN
    semivariancias = np.zeros((dados.shape[0],dados.shape[0]))
    for i in xrange(dados.shape[0]-1):
        angulos[i,i:]=np.arctan2((dados[i:,1]-dados[i,1]),(dados[i:,0]-dados[i,0]))
        distancias[i,i:]=np.sqrt((dados[i:,0]-dados[i,0])**2+(dados[i:,1]-dados[i,1])**2)
        semivariancias[i,i:]=((dados[i:,2]-dados[i,2])**2)/2
    angulos = (angulos*180)/np.pi
    for i in xrange(angulos.shape[0]):
        for j in xrange(angulos.shape[1]):
            if angulos[i,j]<0:
                angulos[i,j] = angulos[i,j] +180
    return angulos, distancias,semivariancias
    
def variograma_direcional(angulos,distancias,semivariancias,direcao,tolerancia,classes):
    ind = np.where((angulos > direcao - tolerancia) & (angulos < direcao + tolerancia))
    distancias_direcionais = distancias[ind]
    semivariancias_direcionais = semivariancias[ind]
    hist = np.histogram(distancias_direcionais,classes)
    resultado = np.zeros((classes-1,2))
    for i in xrange(classes-1):
        ind2 = np.where((distancias_direcionais > hist[1][i]) & (distancias_direcionais < hist[1][i+1]))
        resultado[i,0]=hist[1][i]+(hist[1][1]-hist[1][0])/2
        resultado[i,1]=np.mean(semivariancias_direcionais[ind2])
    return resultado
    
def modelo_variograma(resultado,amplitude,patamar):
    plt.scatter(resultado[:,0],resultado[:,1],color='green',s=130)
    vector_patamar=np.zeros(resultado.shape[0])
    vector_patamar[:]=patamar
    vector_distancia=resultado[:,0].copy()
    vector_distancia[0]=0
    vector_distancia[-1]=vector_distancia[-1]+(vector_distancia[-1]-vector_distancia[-2])
    plt.plot(vector_distancia,vector_patamar,color='red',linewidth=3)
    modelo = patamar*(1-np.e**(-3*np.linspace(0,vector_distancia[-1],1000)/amplitude))
    plt.plot(np.linspace(0,vector_distancia[-1],1000),modelo,color='blue',linewidth=2)
    plt.ylabel('Variograma')
    plt.xlabel('Distancia')
    plt.grid()
    plt.xlim(0,vector_distancia[-1])
    plt.ylim(0,vector_patamar[-1]+0.2*vector_patamar[-1])
    plt.show()

A primeira função cria matrizes com o valor de variograma, ângulos e distâncias entre todos os pontos. Isto é feito em recurso às funções cuja explicação se segue:

  • np.zeros() - Cria uma matriz com a dimensão introduzida de colunas e linhas preenchida com zeros.
  • np.NAN - Trata-se de uma valor sem dados, implicando que não deve ser utilizado, apenas preenche espaço necessário.
  • np.arctan2() - Devolve o ângulo em radianos (é feita posteriormente a conversão para graus) em recurso a coordenada cartesianas.

Após o cálculo do valor do variograma para todos os pares de pontos possíveis é feita selecção em recurso à segunda função cujos argumentos de entrada são as matrizes resultado da função anterior, a direção, tolerância e o número de classes que o variograma deverá ter. Funções importantes a ter em conta para compreensão do algoritmo são:

  • np.where() - devolve um vector (ou vector de vectores, dependendo da dimensão do objecto) com as posições onde a condição que foi imposta é realizada.
  • np.histogram() - devolve uma tupla com dois vectores sendo o segundo a separação dos dados de input em cada classe (limite superior e inferior) e o primeiro o número de elementos que está em cada classe. Neste caso em particular apenas o segundo vector é utilizado.
  • np.mean() - Cálculo da média do vector de input.

A terceira função recebe o resultado da segunda com os valores de variograma e distância escolhidas e elabora um gráfico onde aparece, além destes pontos, a linha do patamar e um modelo exponencial ajustado com efeito pepita zero. Tem como argumentos para além do variograma experimental a amplitude do modelo e o valor do patamar. De notar as funções:

  • plt.scatter() - Cria um gráfico de pontos.
  • plt.plot() - Cria um gráfico de linhas.
  • plt.xlabel() e plt.ylabel() - Insere o nome de cada eixo (X e Y).
  • plt.xlim() - Dá os limites da janela de visualização para o eixo do X.
  • plt.grid() - Insere um quadriculado de fundo para o gráfico.
  • plt.show() - Faz a visualização do gráfico numa janela (até esta instrução o gráfico está invisível).

Usando o seguinte conjunto de dados como exemplo:

Dados utilizados no exemplo cálculo do variograma experimental.

Foram calculados os variogramas na direções 0º e 90º que devolveu o seguinte resultado:

Modelo exponencial
Direcção 0º
Modelo exponencial
Direcção 90º
Cálculo do variograma experimental e respectiva adequação do modelo.

Discussão

Em geoestatística são usadas habitualmente três funções para estudar a variabilidade espacial da amostragem que são: covariância, correlograma, e semi-variograma (comumente designado variograma). A figura seguinte mostra o variograma experimental, covariância e correlograma para o mesmo conjunto de dados:

Existe também variogramas cruzados para utilização com métodos de co-estimação como por exemplo a co-krigagem e variogramas de indicatriz para métodos de estimação com variáveis de indicatriz, como por exemplo krigagem da indicatriz.

Ver também

Referências

  1. Soares, A. (2006), "Geoestatística para as ciências da Terra e do Ambiente" (2006), Lisboa: Instituto Superior Técnico