我在R中有代码,我将其翻译成Python,以解决可扩展性问题,以便与PySpark一起使用。我正在比较是否使用R和Python获得相同的结果。我正在使用具有外部特征的自动ARIMA模型进行拟合。当我使用Box-Ljung测试残差的自相关时,我得到了不同的p值,但是当我比较残差时,它们非常接近。 R考虑自由度,而Python不考虑。哪种方法更合适?
可以从here下载数据。如下所示,R使用的自由度为5,p值为0.3017。使用Python时,它不使用自由度,并且p值的数组很高。如果删除自由度并使用R进行测试,则会得到相同的结果(0.80958073)。
R
library(forecast)
library(readr)
df = read_csv('uschange.csv')
df = as.matrix(df)
my_fit <- auto.arima(df[,"Consumption"], xreg=df[,"Income"])
checkresiduals(fit, plot = FALSE)
Ljung-Box测试 数据:具有ARIMA(1,0,2)错误的回归残差 Q * = 6.0465,df = 5 p值= 0.3017 df模型:5。使用的总滞后时间:10
Python
import pandas as pd
from pmdarima.arima import auto_arima
from statsmodels.stats.diagnostic import acorr_ljungbox
df = pd.read_csv("uschange.csv")
arima_model = auto_arima(y = df['Consumption'],
exogenous = df[['Income']],
start_p=1,
start_q=1,
max_p=3,
max_q=3,
seasonal=False,
d = None,
error_action='ignore',
suppress_warnings=True,
stepwise=False)
acorr_ljungbox(arima_model.resid(), lags = 10)
第二个数组是p值:
(array([0.00775255,0.04434567,0.37206872,0.57959716,0.87815042, 1.30443762、1.83487883、5.90958235、6.05594458、6.06726358]),
array([0.92983808、0.97807118、0.94595004、0.9653037、0.97178326, 0.97141244、0.96841158、0.6573594、0.73430632、0.80958073])