我对多变量时间序列很陌生,我正在尝试制作一个具有 108 个预测变量和 1 个目标变量的 VAR 模型。在执行Johansen Cointegration Test时,出现错误
LinAlgError: Matrix is not positive definite
我的代码是:
def cointegration_test(df, alpha=0.05):
"""Perform Johanson's Cointegration Test and Report Summary"""
out = coint_johansen(df,-1,5)
d = {'0.90':0, '0.95':1, '0.99':2}
traces = out.lr1
cvts = out.cvt[:, d[str(1-alpha)]]
def adjust(val, length= 6): return str(val).ljust(length)
# Summary
print('Name :: Test Stat > C(95%) => Signif \n', '--'*20)
for col, trace, cvt in zip(df.columns, traces, cvts):
print(adjust(col), ':: ', adjust(round(trace,2), 9), ">", adjust(cvt, 8), ' => ' , trace > cvt)
cointegration_test(g)
其中g是我的形状时间序列数据框(48 rows × 109 columns)。行是日期时间索引,列是预测变量/变量。
几列中的数据范围为 0-1(例如:消费者价格指数)和其他数百万范围内的数据(例如:人口、GDP)。
数据框中的某些列也包含负面术语(例如:就业变化)
很少有列也包含零
但是当我使用使所有列静止后传递数据框时
g = g.diff().dropna().diff().dropna()
然后将差异数据帧传递给cointegration_test
其给出的错误:
LinAlgError: Matrix is not positive definite
据我了解Matrix is not positive definite
,与它相关的特征值是非正的。特征值仅适用于方阵,但鉴于我提供的数据是非方阵......
我怎么解决这个问题?我接下来应该看哪里?将不胜感激任何帮助。
谢谢