经多种变换后序列仍不平稳,如何降低p-value实现平稳?
时间序列平稳性处理问题
我已经尝试了一阶差分(diff.1)、二阶差分(diff.2)、np.log、np.sqrt、np.cbrt变换,但ADF检验的p值并未降低——差分操作反而让p值上升,np.sqrt和np.cbrt只能小幅降低p值。想请教:针对这些变换后仍非平稳的序列,还有哪些有效变换方法?
多变量数据表
| 时间周期 | EMT | DTS | BG |
|---|---|---|---|
| 01/04/2021 | 7.41 | 7.25 | 7.53 |
| 01/07/2021 | 7.71 | 7.52 | 7.46 |
| 01/10/2021 | 7.99 | 7.75 | 7.66 |
| 01/01/2022 | 8.10 | 7.83 | 7.73 |
| 01/04/2022 | 8.13 | 7.81 | 7.85 |
| 01/07/2022 | 7.70 | 7.50 | 7.50 |
使用的Python代码
data = pd.read_csv(inputfilepath, parse_dates=["Time Period"], index_col = "Time Period") emtdata = data["EMT"] dtsdata = data["DTS"] bgdata = data["Bord Gais"] ad_fuller_result_4 = adfuller(bgdata)#.diff()[1:] print('BG') print(f'ADF Statistic: {ad_fuller_result_4[0]}') print(f'p-value: {ad_fuller_result_4[1]}') ad_fuller_result_7 = adfuller(dtsdata)#.diff()[1:]) print('DTS') print(f'ADF Statistic: {ad_fuller_result_7[0]}') print(f'p-value: {ad_fuller_result_7[1]}') ad_fuller_result_8 = adfuller(emtdata)#.diff()[1:]) print('EMT') print(f'ADF Statistic: {ad_fuller_result_8[0]}') print(f'p-value: {ad_fuller_result_8[1]}')
ADF检验结果
EMT ADF Statistic: -0.15394452831058553 p-value: 0.9437932628988958 DTS ADF Statistic: -0.0951392833474996 p-value: 0.9499205326778699 BG ADF Statistic: -1.5425205176459476 p-value: 0.5123820913571207
可行的解决方法
- 调整ADF检验的回归项设定:当前调用
adfuller用的是默认参数,试试指定regression='ct'(包含常数项和趋势项)或regression='c'(仅常数项),不同的趋势设定可能更适配你的序列,得到更准确的检验结果。 - 换用KPSS检验交叉验证:ADF的原假设是序列存在单位根(非平稳),而KPSS检验的原假设是序列平稳,两者结合能更准确判断序列的平稳性。示例代码:
from statsmodels.tsa.stattools import kpss # 检验EMT序列 kpss_stat, p_value, lags, crit = kpss(emtdata) print(f"KPSS Statistic: {kpss_stat}") print(f"p-value: {p_value}")
- 尝试Box-Cox自适应变换:这是一种自适应的幂变换,能自动找到最优的变换参数,比固定的
sqrt、cbrt更灵活(要求数据全为正)。示例代码:
from scipy.stats import boxcox # 对EMT做Box-Cox变换 emtdata_transformed, lambda_param = boxcox(emtdata) # 检验变换后的序列 adf_result = adfuller(emtdata_transformed) print(f"变换后ADF p-value: {adf_result[1]}")
- 组合变换与差分:先做Box-Cox变换再进行差分,或者先差分再做变换,组合操作可能比单一方法更有效。
- 注意样本量限制:你的序列只有6个观测值,样本量太小会导致ADF检验的统计效力不足,即使序列实际平稳,也可能得到较高的p值。如果条件允许,尽量补充更多时间点的数据。
内容的提问来源于stack exchange,提问作者Scythor
相关产品推荐
相关产品推荐

