首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >statsmodels用户定义的参数排序在simulate()

statsmodels用户定义的参数排序在simulate()
EN

Stack Overflow用户
提问于 2020-08-28 10:06:08
回答 1查看 120关注 0票数 0

在状态模型中,如何定义输入参数paramsVARMAX.simulate中的元素顺序?

人们会假设顺序对应于所创建对象的属性param_names所给出的顺序,但情况似乎并非如此。见下面的例子。

代码语言:javascript
复制
import statsmodels as statsmodels 
import statsmodels.api as sm
import pandas as pd
import numpy as np
endog = pd.DataFrame({"y":[np.nan, np.nan], "y2":[np.nan, np.nan]}, index=[0, 1])
statsmodels.__version__
>>>>>>>>>
'0.11.1'

示例1:带有拦截器和漂移的双变量VAR( 1 ),所有参数都固定为0,但y设置为1的截距除外。

代码语言:javascript
复制
params = [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
mod1 = sm.tsa.VARMAX(endog, order=(1, 0), trend=[1, 1], trend_offset=0)
print('\n'.join('{} :{}'.format(*k) for k in zip(mod1.param_names, params)))
print(mod1.simulate(params=params, nsimulations=5, initial_state=[0, 0]))

>>>>>>>>>
intercept.y :1
intercept.y2 :0
drift.y :0
drift.y2 :0
L1.y.y :0
L1.y2.y :0
L1.y.y2 :0
L1.y2.y2 :0
sqrt.var.y :0
sqrt.cov.y.y2 :0
sqrt.var.y2 :0

     y   y2
0  0.0  0.0
1  1.0  0.0
2  1.0  0.0
3  1.0  0.0
4  1.0  0.0 

示例2:与例1相同,变量y的截距设置为0,变量y2的截距设置为1,而不是产生预期的结果,似乎params中的第二个元素实际上控制y的漂移参数,而不是y2的截获项。这与mod2.param_names给出的参数排序相矛盾。

代码语言:javascript
复制
params = [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
mod2 = sm.tsa.VARMAX(endog, order=(1, 0), trend=[1, 1], trend_offset=0)
print('\n'.join('{} :{}'.format(*k) for k in zip(mod2.param_names, params)))
print(mod2.simulate(params=params, nsimulations=5, initial_state=[0, 0]))

>>>>>>>>>
intercept.y :0
intercept.y2 :1
drift.y :0
drift.y2 :0
L1.y.y :0
L1.y2.y :0
L1.y.y2 :0
L1.y2.y2 :0
sqrt.var.y :0
sqrt.cov.y.y2 :0
sqrt.var.y2 :0

     y   y2
0  0.0  0.0
1  1.0  0.0
2  2.0  0.0
3  3.0  0.0
4  4.0  0.0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-28 23:49:17

在Statsmodels中,这看起来像是参数名称排序中的一个bug。

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

https://stackoverflow.com/questions/63631670

复制
相关文章

相似问题

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