为什么 R 和 Python 中的 Augmented Dickey-Fuller 结果不同

问题描述 投票:0回答:1

为什么 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 r time-series
1个回答
0
投票

答案通常就在文档中。

首先,请注意这些函数默认具有不同数量的滞后; 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
只会执行恒定和趋势。

© www.soinside.com 2019 - 2024. All rights reserved.