为什么 ADF 测试在 R 和 Python 中会有如此截然不同的结果? 数据集:https://www.kaggle.com/datasets/rakannimer/air-passengers?resource=download
R 检验表明时间序列是平稳的。 Python 测试 - 非平稳。
Python
df = pd.read_csv("../data/air_passengers.csv")
adf_result = adfuller(df['Passengers'])
ADF Statistic: 0.8153688792060371
p-value: 0.9918802434376408
Number of Lags Used: 13
R:
air <- readr::read_csv("../data/air_passengers.csv")
adf.test(air$Passengers)
Augmented Dickey-Fuller Test
Dickey-Fuller = -7.318571346919138243, Lag order = 5,
p-value = 0.01000000000000000021
alternative hypothesis: stationary
答案通常就在文档中。
首先,请注意这些函数默认具有不同数量的滞后; Python 的
statsmodels.tsa.stattools.adfuller
在这里选择了 13,而 R 的 tseries::adf.test
选择了 5。您可以在 R 中使用 k
直接更改此设置,而在 Python 中,您必须设置 maxlags
和 设置 autolag = None
来停止该函数选择不同的值。
尽管如此,调整滞后数量不会得到相同的结果。这就是 R 所做的:
使用包含常数和线性趋势的一般回归方程[..]
这是 Python 的
regression
论证:
:回归中包含的常数和趋势顺序。regression {“c”, ”ct”, ”ctt”, ”n”}
“c” : constant only (default). “ct” : constant and trend. ...
这些信息应该让您在两个包中获得相同的结果 - 您必须适应相同数量的滞后,并且
tseries::adf.test
只会执行恒定和趋势。