Как вы выполняете анализ тренда для «предварительно отбеленного» временного ряда? - PullRequest
0 голосов
/ 20 марта 2020

Я хотел бы «предварительно отбелить» временной ряд в Python, используя схему итерации. Я понимаю, что, вероятно, проще использовать R. Вместо использования метода LMS я хотел бы использовать оценщик Тейла-Сена. Я использую метод, описанный в Wang and Swail (2000).

Мы подходим к следующей модели: Yt = a + bt + Xt, где a и b - параметры пересечения и наклона Yt, а Xt является красным шумом процесса автокорреляции lag-1 c: Xt = cXt-1 + et

(1) вычисляет автокорреляцию lag-1, c временного ряда Yt в качестве первой оценки c. Если c <0,05, эффект последовательной корреляции незначителен. Параметры регрессии используются как есть. </p>

(2) В противном случае выполните оценку Тейла-Сен на предварительно отбеленном временном ряду Wt = (Yt - cYt-1) / (1- c)

Как вы выполняете часть (2) в Python?

(3) Удалите предполагаемый компонент тренда из исходного ряда данных и повторите оценку c. Другими словами, наша новая оценка для c является автокорреляцией лаг-1 временного ряда Yt - bt.

(4) Продолжайте выполнять итерацию до тех пор, пока c <0,005 или разница между cs и bs не станет очень маленькой, то есть 0,0001 </p>

https://www.pacificclimate.org/~wernera/zyp/Wang%20Swail%202001%20JOC.pdf

from sklearn.linear_model import LinearRegression, TheilSenRegressor
from sklearn.linear_model import RANSACRegressor
from statsmodels.tsa import stattools

x = df['ordinal'].values         
y = df[variable].values

res = stats.theilslopes(y, x, 0.95)

a = res[1]
b = res[0]

autocorr = stattools.acf(y)
autocorr_coeff = autocorr[1]
c = autocorr_coeff

if c < 0.05:
    #perform trend analysis on Wt = (Yt - cYt-1)/(1-c)
    (Yt - cYt-1)/(1-c) = a + c*b/(1-c) + b*t + et/(1-c)
    res = stats.theilslopes(-, -, 0.95)

...