所以我想问一下,是否有人有在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()时完全一样-所以我认为这是正确的。
我的问题是,我应该使用什么残差对象来测试自相关性,拱门效应,正态性...,因为使用来自同一模型的两个不同的残差对象将导致完全不同的残差。诊断。
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"]有没有人遇到过这个问题?
发布于 2020-09-17 20:55:05
你必须使用学生化的残差。model_results2.resid不是学院化的。看看这个例子:https://stackoverflow.com/a/63938424/14294235
https://stackoverflow.com/questions/59105149
复制相似问题