擅长:python、mysql、java
<p>这个问题是由于数据中两个序列之间的完美相关性而产生的。从回溯中可以看到,内部使用wald测试来计算滞后时间序列参数的最大似然估计。为此,需要估计参数协方差矩阵(然后接近于零)及其逆矩阵(您也可以在回溯中的<code>invcov = np.linalg.inv(cov_p)</code>行中看到)。对于某些最大滞后数(>;=5),这个接近零的矩阵现在是奇异的,因此测试崩溃。如果只在数据中添加一点噪声,则错误将消失:</p>
<pre><code>import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import grangercausalitytests
n = 1000
ls = np.linspace(0, 2*np.pi, n)
df1Clean = pd.DataFrame(np.sin(ls))
df2Clean = pd.DataFrame(2*np.sin(ls+1))
dfClean = pd.concat([df1Clean, df2Clean], axis=1)
dfDirty = dfClean+0.00001*np.random.rand(n, 2)
grangercausalitytests(dfClean, maxlag=20, verbose=False) # Raises LinAlgError
grangercausalitytests(dfDirty, maxlag=20, verbose=False) # Runs fine
</code></pre>