我试图在具有statsmodels的Python中运行具有时变过渡概率的Markov回归。
到目前为止,我可以运行马尔可夫自回归,但是,由于出现错误“参数没有兼容的形状”,因此我无法计算马尔可夫回归。 感谢您的帮助!
df_source = 'http://econ.korea.ac.kr/~cjkim/MARKOV/data/filardo.prn'
dta_filardo = pd.read_table(df_source, delim_whitespace=True, names=('month', 'ip', 'leading'),nrows=520)
dta_filardo.index = pd.date_range('1948-01-01', '1991-04-01', freq='MS')
dta_filardo['dlip'] = np.log(dta_filardo['ip']).diff()*100
std_ratio = dta_filardo['dlip']['1960-01-01':].std() / dta_filardo['dlip'][:'1959-12-01'].std()
dta_filardo['dlip'][:'1959-12-01'] = dta_filardo['dlip'][:'1959-12-01'] * std_ratio
dta_filardo['dlleading'] = np.log(dta_filardo['leading']).diff()*100
dta_filardo['dmdlleading'] = dta_filardo['dlleading'] - dta_filardo['dlleading'].mean()
mod_filardo = sm.tsa.MarkovAutoregression(
dta_filardo.ix[2:, 'dlip'], k_regimes=2, order=4, switching_ar=False,
exog_tvtp=sm.add_constant(dta_filardo.ix[1:-1, 'dmdlleading']))
res_filardo = mod_filardo.fit(search_reps=20)
res_filardo.summary()
########
mod_filardo = sm.tsa.MarkovRegression(
dta_filardo.ix[2:, 'ip'], k_regimes=2,
exog_tvtp=sm.add_constant(dta_filardo.ix[1:-1, 'leading']))
res_filardo = mod_filardo.fit(search_reps=20)
res_filardo.summary()
马尔可夫自回归工作完美(直到######为止),然后,我尝试运行马尔可夫回归并收到错误“参数没有兼容的形状”。我希望能在自回归估计中看到类似的摘要...
答案 0 :(得分:0)
如果跟踪堆栈跟踪,最终将在predict_conditional
内markov_regression.py
文件夹中的markov_autoregression.py
和regime_switching
中的statsmodels.tsa
方法中结束。
奇怪的是,this line生成大小为(k_regimes,k_regimes,nobs)的预测矩阵以填充conditional_likelihoods
张量。
Markov回归和自回归都使用汉密尔顿过滤器,该过滤器执行以下完整性检查:
k_regimes = len(initial_probabilities)
nobs = conditional_likelihoods.shape[-1]
order = conditional_likelihoods.ndim - 2
dtype = conditional_likelihoods.dtype
# Check for compatible shapes.
incompatible_shapes = (
regime_transition.shape[-1] not in (1, nobs + order)
or regime_transition.shape[:2] != (k_regimes, k_regimes)
or conditional_likelihoods.shape[0] != k_regimes)
由于regime_transition.shape[-1] = nobs = conditional_likelihoods.shape[-1]
,regime_transition.shape[-1]
不能等于(nobs+order)
。因此,形状不对齐。似乎该类创建了一个矩阵,只有当您提供exog_tvtp矩阵时,该矩阵才能通过其超类的健全性检查(否则Regage_transition.shape [-1] = 1)。
这是问题的要点。我将与Chad Fulton(该模块的作者)联系以进行进一步的查询。
答案 1 :(得分:0)
感谢您提交此bug report。问题已经fixed in Github,将在我们的下一个版本(v0.10.1)中出现。