首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SARIMAX残差

SARIMAX残差
EN

Stack Overflow用户
提问于 2019-11-29 20:48:45
回答 1查看 957关注 0票数 0

所以我想问一下,是否有人有在python中使用sarimax函数的经验

当使用有差异或季节差异的模型时,残差似乎有点奇怪。

代码语言:javascript
复制
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());

然后绘制标准化残差:

代码语言:javascript
复制
model_results2.plot_diagnostics(figsize = (12, 7), lags=20);

这些残差(上面的代码)是它们应该是的,但在做的时候

代码语言:javascript
复制
model_results2.resid.plot()

这些仅使用函数.resid.plot()的残差有非常奇怪的轨迹。

所以我做的是,当我做季节差异时,我从第13次观测中获得残差,使用代码:

代码语言:javascript
复制
resid2 = pd.DataFrame(model_results2.resid.iloc[12:])
resid2.plot()

当从这段代码中绘制残差时,它们看起来与使用.plot_diagnostic()时完全一样-所以我认为这是正确的。

我的问题是,我应该使用什么残差对象来测试自相关性,拱门效应,正态性...,因为使用来自同一模型的两个不同的残差对象将导致完全不同的残差。诊断。

代码语言:javascript
复制
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次观察的结果完全不同:

代码语言:javascript
复制
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)

数据下载代码:

代码语言:javascript
复制
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"]

有没有人遇到过这个问题?

EN

回答 1

Stack Overflow用户

发布于 2020-09-17 20:55:05

你必须使用学生化的残差。model_results2.resid不是学院化的。看看这个例子:https://stackoverflow.com/a/63938424/14294235

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59105149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档