Обзор, коды Python и приложения

Обзор

Вкратце, стационарность - это условие, которое показывает, имеют ли данные постоянное среднее значение и дисперсию в каждом месте. Стационарность широко используется в функции временных рядов, тем не менее, нам также необходимо знать ее применение с точки зрения пространственной оценки данных.

Из одного из курсов лекций Майкла Пирча цитируются 2 важные вещи:

  1. Стационарность - это решение, а не гипотеза; поэтому это не может быть проверено. Данные могут продемонстрировать, что это неуместно.
  2. Оценка стационарности зависит от масштаба. Этот выбор масштабов моделирования должен основываться на конкретной проблеме и потребностях проекта.

Чтобы исследовать / оценивать стационарность пространственных данных, на практике мы можем использовать два способа визуализации, используя график тренда или график вариограммы.

Пример использования - коды Python

скажем, в поле «X» у нас есть следующее распределение серебра (Ag).

import pandas as pd
df = pd.read_csv(‘contoh.csv’)
df = df[[‘ID’,’XCOO’,’YCOO’,’Ag’]]

ID - это идентификатор каждого образца, взятого из поля, а XCOO и YCOO - координаты X и Y соответственно. Чтобы распознать вариацию наших данных, мы визуализируем это на графике ID vs AG, используя pyplot, как показано на рисунке 2 ниже:

import matplotlib.pyplot as plt
plt.figure()
plt.plot(df.ID,df.Ag,color=’k’)
plt.title(‘Ag Field Data’)
plt.xlabel(‘ID’)
plt.ylabel(‘Ag’)
plt.show()

График тренда

Стационарность данных может быть проанализирована с помощью графика тренда, мы можем просто вычислить точку пересечения и наклон уравнения линейной регрессии, используя scipy

from scipy import stats
slope, intercept, corrcoeff, p_value, stderr = stats.linregress(df.ID,df.Ag)
m = slope
c = intercept

Выделяя наклон и точку пересечения из linregress, мы можем определить и построить нашу линейную функцию (y = mx + c), как показано на рисунке 3.

#linear regression function
df.Y = m * df.ID + c
plt.figure()
plt.plot(df.ID, df.Ag, color=’k’) #point plotting
plt.plot(df.ID, df.Y, linewidth=3.5, color=’y’, label=’trend’) #trend plotting
plt.title(‘Ag Field Data’)
plt.xlabel(‘ID’)
plt.ylabel(‘Ag’)
plt.legend()
plt.show()

Мы видим, что тренд, показанный на рисунке 3, представляет собой прямую горизонтальную линию, которая указывает на то, что наши данные являются стационарными. Но действительно ли он стационарный? Давайте проверим тенденцию, разделив эти данные (например, на ID 650–750). Используя тот же код, что и выше, мы можем визуализировать результат, как на рисунке 4.

Рисунок 4 показывает одну из характеристик стационарности. «Оценка стационарности зависит от масштаба». Согласно графикам трендов видно, что второй график из ID 650–750 не является стационарным, несмотря на то, что результат для всех данных кажется стационарным. Эта неопределенность стационарности также применима, независимо от того, возьмем ли мы другую шкалу / раздел наших данных.

График вариограммы

Что касается оценки стационарности, график вариограммы имеет другой подход по сравнению с графиком тренда. Вариограмма - это геостатистический метод, который может визуализировать тенденцию отклонения в пространственной (отставание от одних данных к другим) перспективе. Вариограмма - это настоятельно рекомендуемый способ анализа неопределенности, поскольку она позволяет увидеть структуру взаимосвязей между точками данных при каждом лаге.

Рисунок 5 показывает график вариограммы, состоящий из точки данных (черная точка) и смоделированной / теоретической вариограммы (черная линия). Мы также можем видеть другие важные переменные, такие как:

  • Расстояние отставания: расстояние между парами, рассчитанное с помощью экспериментальной вариограммы. например: расстояние задержки можно рассчитать каждые 10 м, 20 м, 1000 м и т. д.
  • Полувариантность / дисперсия: параметр, описывающий несходство данных. Чем выше полувариантность / дисперсия, тем хуже соотношение сходства между данными.
  • Порог: значение вариограммы, когда оно достигает постоянной точки.
  • Диапазон: расстояние запаздывания, когда значение вариограммы достигает порога.
  • Самородок: вариограмма "прыгает" в начальной точке (расстояние запаздывания ~ 0).

Стационарные данные можно указать с помощью ограниченной вариограммы, а нестационарные данные можно указать с помощью неограниченной вариограммы. , как показано на рисунке 6.

Ограниченная вариограмма - это вариограмма, у которой есть порог и диапазон, в то время как неограниченная вариограмма - это вариограмма, которая имеет восходящий тренд и не имеет порога и диапазона (без выравнивания).

Теперь давайте создадим вариограмму, используя наши данные с geostatspy библиотекой. geostatspy - это библиотека Python, разработанная MichaelPyrcz (@geostatsguy), которая содержит модули, связанные с геостатистикой. Вы можете просто установить библиотеку с помощью pip install geostatspy.

Чтобы построить экспериментальную вариограмму, мы построим точку данных через каждые 7000 задержек с допуском запаздывания 3000 при n = 30. азимут равен 0 градусов с допуском 90 градусов, как показано на рисунке 7.

lag = 7000
lag_tol = 3000
nlag = 30
azi = 0
azi_tol = 90
bandwidth = 9999
lags, gammas, npps = geostats.gamv(df,”XCOO”,”YCOO”,”Ag”,-9999,9999,lag,lag_tol,nlag,azi,azi_tol,bandwidth,isill=1.0)

gammas, полученный из geostats.gamv, представляет собой значение вариограммы для каждого запаздывания, которое мы определили ранее, а npps - количество пар данных с указанным запаздыванием. После этого мы можем построить график lags против gammas, используя pyplot, как показано на рисунке 8.

# plot experimental variogram
plt.figure() 
plt.scatter(lags,gammas,color = ‘black’,s = npps*0.1,label = ‘Azimuth ‘ +str(azi))
plt.legend()
plt.xlabel(‘Lag Distance’)
plt.ylabel(‘Variogram’)
plt.title(‘Ag Distribution Variogram’)
plt.xlim([0,175000]); plt.ylim([0,1.5])
plt.grid()
plt.show()

С этого момента нам нужно построить нашу смоделированную вариограмму, чтобы проанализировать стационарность наших данных. Обычно этот шаг требует «проб и ошибок», чтобы убедиться, что наша модель соответствует нашей экспериментальной вариограмме. В этой статье мы уже получили лучший параметр для моделированной вариограммы.

Подоконник: 1 | Диапазон: 110000 | Тип: сферический

Используя модули gslib.make_variogram и geostats.vmodel, мы можем извлечь функцию нашей смоделированной вариограммы.

#variogram modelling
nug = 0.5
nst = 2 #whether a normal score transformation is used on this variogram (two (2) is for not using)
it1 = 1 #variogram type (one (1) is for spherical type)
cc1 = 0.5 #sill minus nugget
azi1 = azi #azimuth
hmaj1 = 110000 #maximum major lag distance measured in this variogram (range)
hmin1 = 110000 #considering not using a minor azimuth (we can ignore this parameter)

#assumption no contribution on minor structure (we can ignore this)
it2 = 1; cc2 = 0; azi2 = 0; hmaj2 = 9999.9; hmin2 = 400 
xlag=15000
#make model object
vario = gslib.make_variogram(nug,nst,it1,cc1,azi1,hmaj1,hmin1,it2,cc2,azi2,hmaj2,hmin2)
#extract the important variable of the modelled variogram
index_maj,h_maj,gam_maj,cov_maj,ro_maj = geostats.vmodel(nlag,xlag,azi,vario)

Затем мы наложили нашу смоделированную вариограмму на предыдущий график экспериментальной вариограммы, как показано на Рисунке 9.

plt.plot(h_maj,gam_maj,color = ‘black’)

Из рисунка 9 видно, что смоделированная вариограмма соответствует экспериментальной вариограмме. Эта вариограмма классифицируется как ограниченная вариограмма, учитывая очень четкий порог / диапазон. Можно решить, что наши данные имеют тенденцию быть стационарными.

Почему это важно?

Анализ стационарности полезен при рассмотрении дополнительных методов геостатистической оценки, таких как кригинг. Мы знаем, что кригинг бывает разных видов: обычный кригинг, универсальный кригинг, кригинг с внешним дрейфом и кокригинг. Фактор стационарности - это то, что действительно определяет, какой метод мы собираемся использовать.

Например, если мы выберем обычный метод кригинга в качестве метода пространственной интерполяции. Этот метод предполагает, что наши данные должны быть стационарными. В результате оценки будет ошибка, если наши данные нестационарны.

Допустимую погрешность можно измерить с помощью перекрестной проверки или сверки. Обычный кригинг может использоваться, если результат дает небольшое число ошибок (мы можем игнорировать нестационарность). В противном случае можно было бы рассмотреть другие методы пространственной оценки, такие как универсальный кригинг и кригинг с внешним дрейфом, чтобы учесть нестационарность набора данных.