Я хотел бы «предварительно отбелить» временной ряд в 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)