Box-Ljung测试在R和Python中提供了不同的p值

时间:2019-08-05 18:48:14

标签: python r p-value

我在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])

0 个答案:

没有答案