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 中参数名称排序的错误。
在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 中参数名称排序的错误。