如何对“预白化”时间序列进行趋势分析?

2024-10-02 02:24:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用迭代方案在Python中“预白”一个时间序列。我知道使用R可能更容易。我不想使用LMS方法,而是想使用泰尔森估值器。我正在使用Wang和Swail(2000)中所述的方法

我们拟合以下模型:Yt=a+bt+Xt,其中a和b是Yt的截距和斜率参数,Xt是滞后1自相关的红噪声过程c:Xt=cXt-1+et

(1)计算时间序列Yt的滞后1自相关系数c,作为c的第一个估计值。如果c<;0.05,序列相关性的影响可以忽略不计。回归参数按原样使用

(2)否则,对预白化时间序列Wt=(Yt-cYt-1)/(1-c)执行泰尔森估计

如何用Python编写第(2)部分

(3)从原始数据系列中删除估计的趋势成分,并重新估计c。换句话说,我们对c的新估计是时间序列Yt-bt的滞后1自相关

(4)继续进行迭代,直到c<;0.005或cs和bs之间的差异非常小,即0.0001

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)


Tags: 方法fromimportlt参数时间res序列

热门问题