【发布时间】:2020-03-25 01:44:28
【问题描述】:
所以我想问一下是否有人在python 中使用过sarimax 函数
当使用具有差异或季节性差异的模型时,残差似乎有点奇怪。
model2 = SARIMAX(np.log(train["S4236SM144NCEN"]), order=(4, 0, 0), seasonal_order=(1, 1, 0, 12) );
model_results2 = model2.fit(maxiter = 500);
print(model_results2.summary());
然后绘制标准化残差:
model_results2.plot_diagnostics(figsize = (12, 7), lags=20);
这些残差(上面的代码)是我想应该的,但是在做的时候
model_results2.resid.plot()
而这些仅使用函数.resid.plot() 的残差具有非常奇怪的轨迹。
所以我所做的是在进行季节性差异时从第 13 次观察中获取残差,使用代码:
resid2 = pd.DataFrame(model_results2.resid.iloc[12:])
resid2.plot()
从这段代码中绘制残差时,它们看起来与使用 .plot_diagnostic() 时完全相同 - 所以我想这是正确的。
我的问题是我应该使用什么残差对象来测试自相关、拱效应、正态性...,因为使用来自同一模型的 2 个不同残差对象将导致完全不同的残差。诊断。
name = ['Statistic', 'p-value']
lzip(name, acorr_ljungbox(model_results2.resid, lags = 12))
name = ['Lagrange multiplier statistic', 'p-value',
'F-TEST', 'F-p-value']
diag = het_arch(model_results2.resid, maxlag=12)
lzip(name, diag)
与从第 13 次观察得到的结果完全不同:
name = ['Statistic', 'p-value']
lzip(name, acorr_ljungbox(model_results2.resid.iloc[13:], lags = 12))
name = ['Lagrange multiplier statistic', 'p-value',
'F-TEST', 'F-p-value']
diag = het_arch(model_results2.resid.iloc[13:], maxlag=12)
lzip(name, diag)
数据下载代码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style='ticks', context='poster')
from statsmodels.tsa.statespace.sarimax import SARIMAX
from statsmodels.tsa.seasonal import seasonal_decompose
import seaborn as sns
#plt.style.use("ggplot")
import pandas_datareader.data as web
import pandas as pd
import statsmodels.api as sm
import scipy
import statsmodels.stats.api as sms
import statsmodels.formula.api as smf
import matplotlib.pyplot as plt
import datetime
start = datetime.datetime(1992, 1, 1)
end = datetime.datetime(2019, 10, 1)
df = web.DataReader(["TOTALSA", "S4236SM144NCEN"], "fred", start, end)
df.columns = ['TOTALSA', "S4236SM144NCEN"]
df.head()
train = df3.iloc[:len(df) - 12*2]
test = df3.iloc[len(df) - 12*2:]
df_train_test = pd.concat([test["S4236SM144NCEN"], train["S4236SM144NCEN"]], axis = 1)
df_train_test.columns = ["TEST", "TRAIN"]
有人遇到过这个问题吗?
【问题讨论】:
标签: python time-series statsmodels arima