我目前正在编写一个函数来对 SARIMAX 模型的阶数进行网格搜索:(p,q,d)X(P,Q,D,s)。但是,在拟合时,使用 statsmodels.tsa.SARIMAX() 的默认设置,我经常会遇到以下类型的错误:
ValueError: Non-stationary starting autoregressive parameters found with `enforce_stationarity` set to True.
Run Code Online (Sandbox Code Playgroud)
或者
ValueError: non-invertible starting MA parameters found with `enforce_invertibility` set to True.
Run Code Online (Sandbox Code Playgroud)
我可以停止强制执行平稳性和可逆性来停止出现这些错误,但是,据我所知,我不希望模型参数创建不可逆的模型。
是否可以放松enforce_stationarity和enforce_invertibility参数,或者这会导致糟糕的模型吗?
这似乎是一个普遍的问题,但是所有答案似乎都没有帮助。statsmodels在Windows 10中安装时(安装了python 3.6.2),该错误会弹出:
python setup.py install
Run Code Online (Sandbox Code Playgroud)
在此之前,numpy已安装:
python numpy install
Run Code Online (Sandbox Code Playgroud)
没有错误,我认为这是成功的。但是的安装statsmodels仍然存在statsmodels安装错误。
我确实安装了MS c ++编译器(2015)。我也安装了最新的Anaconda(python 3.6.1),但没有帮助。以下是已安装的VC ++编译器的列表。
我正在使用 SARIMAX 耦合模型 (statsmodels.tsa.statespace.sarimax.SARIMAX) 对两个季节性时间序列之间的相关性进行建模。内生变量为 y(t),外生变量为 x(t)。我的目标是使用 x(t) 作为预测变量来预测 y(t)。
\n\n我对 SARIMAX(p,d,q, r )\xe2\x88\x99(P,D,Q)s 过程的理解是将 y(t) 建模为 x(t) 的线性函数,误差项如下一个 SARIMA 过程:\ny(t)=c+\xce\xb21\xe2\x88\x99x(1,t)+\xce\xb22\xe2\x88\x99x(2,t)+\xe2\x8b\xaf+\ xce\xb2r\xe2\x88\x99x(r,t)+\xce\xb5(t) (参见链接中的完整方程\n SARIMAX 模型
\n\n对于上述问题,我有两个问题:(1) 是否可以对高于 1 的滞后回归阶数“ r ”进行建模?\n(2) 一旦估计了 SARIMAX 模型方程,这是预测未来值的最佳方法考虑到 x(t) 是未来的已知变量,y(t) 作为 x(t) 的函数?我见过很多单变量 SARIMA 预测的示例,但没有看到多变量 SARIMAX 预测的示例。\n非常感谢。
\n一直在使用Python中的时间序列,并使用sm.tsa.seasonal_decompose.在文档中,他们介绍了这样的函数:
我们添加了一个天真的季节性分解工具,与R的相同
decompose.
以下是文档及其输出的代码副本:
import statsmodels.api as sm
dta = sm.datasets.co2.load_pandas().data
# deal with missing values. see issue
dta.co2.interpolate(inplace=True)
res = sm.tsa.seasonal_decompose(dta.co2)
res.plot()
Run Code Online (Sandbox Code Playgroud)
他们说这是天真的,但没有关于它有什么问题的免责声明.有人知道吗?
我想看看具有特定参数的正态分布是否适合数据集。然而 qqplot 似乎并没有像预期的那样工作。下面的小例子展示了这一点:
import numpy as np
import statsmodels.api as sm
import pylab
test = np.random.normal(20,5, 1000)
sm.qqplot(test, loc = 20, scale = 5 , line='45')
pylab.show()
Run Code Online (Sandbox Code Playgroud)
正如人们所看到的,我期望这些点位于斜率 = 1 的线周围,但它给出了下图:
谁能解释一下为什么会发生这种情况?
使用 statsmodels python 包拟合 ARIMA 模型的常用方法是:
model = statsmodels.tsa.ARMA(series, order=(2,2))
result = model.fit(trend='nc', disp=1)
Run Code Online (Sandbox Code Playgroud)
但是,我有多个时间序列数据可供训练,例如,来自同一底层过程,我该怎么做?
我想测试一个假设“截距 = 0,beta = 1”,所以我应该进行 Wald 测试并使用模块“statsmodel.formula.api”。
但我不确定在进行 Wald 测试时哪个代码是正确的。
from statsmodels.datasets import longley
import statsmodels.formula.api as smf
data = longley.load_pandas().data
hypothesis_0 = '(Intercept = 0, GNP = 0)'
hypothesis_1 = '(GNP = 0)'
hypothesis_2 = '(GNP = 1)'
hypothesis_3 = '(Intercept = 0, GNP = 1)'
results = smf.ols('TOTEMP ~ GNP', data).fit()
wald_0 = results.wald_test(hypothesis_0)
wald_1 = results.wald_test(hypothesis_1)
wald_2 = results.wald_test(hypothesis_2)
wald_3 = results.wald_test(hypothesis_3)
print(wald_0)
print(wald_1)
print(wald_2)
print(wald_3)
results.summary()
Run Code Online (Sandbox Code Playgroud)
我一开始认为假设_3 是正确的。
但假设_1 的结果与回归的 F 检验相同,表示假设“截距 = 0 且 beta …
我使用 statsmodels.api 检查不同变量组合的统计参数。您可以使用print(results.summary())来获取
OLS Regression Results
==============================================================================
Dep. Variable: y R-squared: 0.454
Model: OLS Adj. R-squared: 0.454
Method: Least Squares F-statistic: 9694.
Date: Mon, 30 Jul 2018 Prob (F-statistic): 0.00
Time: 10:14:47 Log-Likelihood: -9844.7
No. Observations: 11663 AIC: 1.969e+04
Df Residuals: 11662 BIC: 1.970e+04
Df Model: 1
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
x1 -1.4477 0.015 -98.460 0.000 -1.477 -1.419
==============================================================================
Omnibus: 1469.705 Durbin-Watson: 1.053
Prob(Omnibus): 0.000 Jarque-Bera (JB): 2504.774
Skew: 0.855 …Run Code Online (Sandbox Code Playgroud) 我有以下 R 代码,想知道 Python 中的等效代码是什么
power.t.test(n=20,delta=40,sd=50,sig.level=0.05,type= "one.sample",alternative="one.sided")
Run Code Online (Sandbox Code Playgroud)
预期输出是:
One-sample t test power calculation
n = 20
delta = 40
sd = 50
sig.level = 0.05
power = 0.9641728
alternative = one.sided
Run Code Online (Sandbox Code Playgroud) 我正在使用statsmodels(向其他python选项开放)运行一些线性回归。我的问题是我需要回归分析不具有截距并将其约束在(0,1)范围内,并且总和为1。
我尝试过这样的事情(至少为1):
from statsmodels.formula.api import glm
import pandas as pd
df = pd.DataFrame({'revised_guess':[0.6], "self":[0.55], "alter_1":[0.45], "alter_2":[0.2],"alter_3":[0.8]})
mod = glm("revised_guess ~ self + alter_1 + alter_2 + alter_3 - 1", data=df)
res = mod.fit_constrained(["self + alter_1 + alter_2 + alter_3 = 1"],
start_params=[0.25,0.25,0.25,0.25])
res.summary()
Run Code Online (Sandbox Code Playgroud)
但仍在努力实施“非负”系数约束。