首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从VARMAX状态模型中提取矩阵形式的系数

从VARMAX状态模型中提取矩阵形式的系数
EN

Stack Overflow用户
提问于 2020-07-24 01:08:12
回答 2查看 125关注 0票数 0

是否有任何方法从矩阵数组格式的状态模型()中调用VARMAX模型的结果(截距、AR和MA),而不使用手动输入它或编写一个包含一系列循环的过程?

代码语言:javascript
运行
复制
model = VARMAX(endog=df_data[['stock','bond']],order=(1,1))
results = mode.fit()
print(results.params)

我得到了

代码语言:javascript
运行
复制
intercept.stock        0.011664
intercept.bond         0.002932
L1.stock.stock         0.120046
L1.bond.stock         -0.978197
L1.stock.bond         -0.010727
L1.bond.bond           0.360093
L1.e(stock).stock     -0.012520
L1.e(bond).stock       0.000342
L1.e(stock).bond       0.001340
L1.e(bond).bond       -0.013166
sqrt.var.stock         0.089868
sqrt.cov.stock.bond   -0.001321
sqrt.var.bond          0.008202

我想要这种格式的数组(或类似的):

代码语言:javascript
运行
复制
In[1]: arr_intercept
Out[1]: array([[0.011664],
               [0.002932]])
In[2]:arr_AR
Out[2]: array([[ 0.120046, -0.978197],
               [-0.010727,  0.360093]])
In[3]:arr_MA
Out[3]: array([[-0.01252  ,  0.000342 ],
               [ 0.0013407, -0.013166 ]])
EN

回答 2

Stack Overflow用户

发布于 2020-07-24 20:10:24

提供我的脚本提取拦截,AR,MA结果矩阵格式。如果p>1或q>1,则得到的AR和MA系数矩阵是三维的。

代码语言:javascript
运行
复制
# parameters to run statsmodels.varmax
depvar = ['stock', 'bond', 'gold']
nvar = len(depvar)  # number of dependent variables
p = 2
q = 2
model = VARMAX(endog=df_data[depvar], order=(p, q))
results = model.fit(maxiter=1000, disp=False)

# intercept matrix results
arr_intercept = np.zeros(nvar)
for i in range(0, nvar):
    arr_intercept[i] = results.params['intercept.' + depvar[i]]

# AR lagged coefficients matrix
mat_coef_ar = np.zeros((p, nvar, nvar))
for i in range(0, p):  # axis=0 loop for lags
    for k in range(0, nvar):  # axis=1 loop for columns
        for j in range(0, nvar):  # axis=2 loop for rows
            coefa[i, j, k] = results.params['L' + str(i + 1) + '.' + depvar[k] + '.' + depvar[j]]

# creating MA epsilon coefficient matrix
mat_coef_ma = np.zeros((q, nvar, nvar))
for i in range(0, q):
    for k in range(0, nvar):
        for j in range(0, nvar):
            coefu[i, j, k] = results.params['L' + str(i + 1) + '.e(' + depvar[k] + ').' + depvar[j]]
票数 0
EN

Stack Overflow用户

发布于 2021-07-17 12:17:28

使用results对象的下列属性:

代码语言:javascript
运行
复制
arr_AR = results.coefficient_matrices_var
arr_MA = results.coefficient_matrices_vma
arr_intercept = results.conf_int(alpha=1).iloc[:2,:1].to_numpy()    
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63065341

复制
相关文章

相似问题

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