statsmodels中TVP-VAR模型拟合报错:method与float无法比较
面板TVP-VAR模型拟合报错解决(statsmodels statespace)
问题场景
在statsmodels的statespace mlemodels框架下运行面板TVP-VAR模型,执行拟合时触发类型错误,怀疑与初始参数定义相关。
报错信息及回溯
preliminary = tvppanelvarmodel.fit(maxiter=1000) Traceback (most recent call last): File "/opt/anaconda3/envs/spyder-env/lib/python3.10/site-packages/numpy/core/fromnumeric.py", line 57, in _wrapfunc return bound(*args, **kwds) File "/opt/anaconda3/envs/spyder-env/lib/python3.10/site-packages/numpy/core/_methods.py", line 159, in _clip return _clip_dep_invoke_with_casting( File "/opt/anaconda3/envs/spyder-env/lib/python3.10/site-packages/numpy/core/_methods.py", line 113, in _clip_dep_invoke_with_casting return ufunc(*args, out=out, **kwargs) **TypeError: '>=' not supported between instances of 'method' and 'float'** During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/var/folders/m6/68zljfsj2t9_dzgpwwslj29r0000gp/T/ipykernel_11675/3038987883.py", line 1, in <module> preliminary = tvppanelvarmodel.fit(maxiter=1000) File "/opt/anaconda3/envs/spyder-env/lib/python3.10/site-packages/statsmodels/tsa/statespace/mlemodel.py", line 704, in fit mlefit = super(MLEModel, self).fit(start_params, method=method, File "/opt/anaconda3/envs/spyder-env/lib/python3.10/site-packages/statsmodels/base/model.py", line 563, in fit xopt, retvals, optim_settings = optimizer._fit(f, score, start_params, File "/opt/anaconda3/envs/spyder-env/lib/python3.10/site-packages/statsmodels/base/optimizer.py", line 241, in _fit xopt, retvals = func(objective, gradient, start_params, fargs, kwargs, File "/opt/anaconda3/envs/spyder-env/lib/python3.10/site-packages/statsmodels/base/optimizer.py", line 651, in _fit_lbfgs retvals = optimize.fmin_l_bfgs_b(func, start_params, maxiter=maxiter, File "/opt/anaconda3/envs/spyder-env/lib/python3.10/site-packages/scipy/optimize/lbfgsb.py", line 197, in fmin_l_bfgs_b res = _minimize_lbfgsb(fun, x0, args=args, jac=jac, bounds=bounds, File "/opt/anaconda3/envs/spyder-env/lib/python3.10/site-packages/scipy/optimize/lbfgsb.py", line 298, in _minimize_lbfgsb x0 = np.clip(x0, new_bounds[0], new_bounds[1]) File "<__array_function__ internals>", line 180, in clip File "/opt/anaconda3/envs/spyder-env/lib/python3.10/site-packages/numpy/core/fromnumeric.py", line 2152, in clip return _wrapfunc(a, 'clip', a_min, a_max, out=out, **kwargs) File "/opt/anaconda3/envs/spyder-env/lib/python3.10/site-packages/numpy/core/fromnumeric.py", line 66, in _wrapfunc return _wrapit(obj, method, *args, **kwds) File "/opt/anaconda3/envs/spyder-env/lib/python3.10/site-packages/numpy/core/fromnumeric.py", line 43, in _wrapit result = getattr(asarray(obj), method)(*args, **kwds) File "/opt/anaconda3/envs/spyder-env/lib/python3.10/site-packages/numpy/core/_methods.py", line 159, in _clip return _clip_dep_invoke_with_casting( File "/opt/anaconda3/envs/spyder-env/lib/python3.10/site-packages/numpy/core/_methods.py", line 113, in _clip_dep_invoke_with_casting return ufunc(*args, out=out, **kwargs) TypeError: '>=' not supported between instances of 'method' and 'float'
当前初始参数定义
使用Nelder-Mead优化器(method='nm'),初始参数方法未添加return语句:
def start_params(self): start_params = [.1, .1, 100, 100, 100]
解决步骤
- 修复初始参数方法:
start_params方法必须返回参数数组,否则statsmodels会将方法本身当作参数传入优化器,触发类型错误。修改代码如下:def start_params(self): start_params = [.1, .1, 100, 100, 100] return start_params - 验证参数维度:确保返回的参数列表长度与模型待估计的参数数量一致,避免后续出现维度不匹配问题。
- 重新执行拟合:再次运行拟合代码即可正常启动优化流程。
内容的提问来源于stack exchange,提问作者David K
相关产品推荐
相关产品推荐

