반응형
두 시계열에서 grangercausalitytests
를 실행하려고합니다.
import numpy as np
import pandas as pd
from statsmodels.tsa.stattools import grangercausalitytests
n = 1000
ls = np.linspace(0, 2*np.pi, n)
df1 = pd.DataFrame(np.sin(ls))
df2 = pd.DataFrame(2*np.sin(1+ls))
df = pd.concat([df1, df2], axis=1)
df.plot()
grangercausalitytests(df, maxlag=20)
그러나 나는 얻고있다
Granger Causality
number of lags (no zero) 1
ssr based F test: F=272078066917221398041264652288.0000, p=0.0000 , df_denom=996, df_num=1
ssr based chi2 test: chi2=272897579166972095424217743360.0000, p=0.0000 , df=1
likelihood ratio test: chi2=60811.2671, p=0.0000 , df=1
parameter F test: F=272078066917220553616334520320.0000, p=0.0000 , df_denom=996, df_num=1
Granger Causality
number of lags (no zero) 2
ssr based F test: F=7296.6976, p=0.0000 , df_denom=995, df_num=2
ssr based chi2 test: chi2=14637.3954, p=0.0000 , df=2
likelihood ratio test: chi2=2746.0362, p=0.0000 , df=2
parameter F test: F=13296850090491009488285469769728.0000, p=0.0000 , df_denom=995, df_num=2
...
/usr/local/lib/python3.5/dist-packages/numpy/linalg/linalg.py in _raise_linalgerror_singular(err, flag)
88
89 def _raise_linalgerror_singular(err, flag):
---> 90 raise LinAlgError("Singular matrix")
91
92 def _raise_linalgerror_nonposdef(err, flag):
LinAlgError: Singular matrix
왜 이것이 사실인지 모르겠습니다.
해결 방법
데이터에서 두 계열 간의 완벽한 상관 관계로 인해 문제가 발생합니다. 역 추적을 통해 내부적으로 wald 테스트가 지연 시계열의 매개 변수에 대한 최대 가능성 추정치를 계산하는 데 사용된다는 것을 알 수 있습니다. 이를 위해서는 매개 변수 공분산 행렬 (이때 거의 0에 가깝게)의 추정치와 그 역이 필요합니다 ( invcov = np.linalg.inv (cov_p)
줄에서도 볼 수 있듯이 역 추적). 이 0에 가까운 행렬은 이제 최대 지연 수 (> = 5)에 대해 특이하므로 테스트가 충돌합니다. 데이터에 약간의 노이즈 만 추가하면 오류가 사라집니다.
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
참조 페이지 https://stackoverflow.com/questions/44305456
반응형
'파이썬' 카테고리의 다른 글
파이썬 bash에서 파이썬 스크립트를 "파이프 가능"하게 만드는 방법은 무엇입니까? (0) | 2020.10.20 |
---|---|
파이썬의 데이터 프레임 행에서 최대 값 가져 오기 (0) | 2020.10.20 |
파이썬 변수로 파이썬 함수 호출 (0) | 2020.10.20 |
파이썬 ssl.SSLError : tlsv1 경고 프로토콜 버전 (0) | 2020.10.20 |
파이썬 Python에서 CSV를 HTML 테이블로 변환 (0) | 2020.10.20 |
댓글