statsmodels 模拟()中的用户定义参数排序

statsmodels user-defined parameter ordering in simulate()

在statsmodels中,VARMAX.simulate中输入参数params的元素顺序是如何定义的?

人们会假设顺序对应于所创建对象的属性 param_names 给出的顺序,但这似乎 不是 的情况。请参阅下面的示例。

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),除 y 的截距设置为 1 外,所有参数固定为 0。预期收益率结果。

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.

给出的参数顺序相矛盾
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

这看起来像是 Statsmodels 中参数名称排序的错误。