Toda-Yamamoto vs Differenced Granger: Does the BTC Lead-Lag Survive?
암호화폐에 대해 게시된 거의 모든 Granger 인과관계 결과는 로그 반환을 기준으로 계산됩니다. 그 선택은 자유롭지 않습니다. 차이는 표준 F-검정에서 요구하는 계열을 고정적으로 만들지만 수준 관계도 무시합니다. 두 개의 동전이 공적분되면 차이가 있는 VAR이 잘못 지정되고 테스트는 사용자가 요청한 것과 약간 다른 질문에 답하게 됩니다.
Toda와 Yamamoto(1995)는 탈출구를 제공합니다. 추가 시차가 있는 수준에 VAR을 맞추고, 원래의 것만 테스트하고, 단위근이나 공적분에 관계없이 유효한 를 얻습니다. 이는 계량경제학에서 잘 알려져 있으며 암호화폐 리드-랙에는 거의 적용되지 않습니다.
따라서 이 기사에서는 한 가지 작업을 수행합니다. 동일한 창에서 동일한 쌍에 대해 두 테스트를 모두 실행하고 동의하지 않는지 보고합니다. 그런 다음 정직한 후속 조치를 적용합니다. 즉, 결과 매트릭스에 대한 상관 관계 다중 테스트 수정과 롤링 p-값을 적용하여 "중요한" 지연이 거래할 수 있을 만큼 안정적인지 아니면 임계값을 넘어 깜박이는지 확인합니다.
아래 이론은 비교를 읽기 쉽게 만드는 데 필요한 만큼만 적용됩니다. 블로그에서는 이미 단위 루트, 공적분, 데이터 로드, 크기 조정 및 비용을 다루고 있습니다. 섹션이 아니라 링크입니다.
그랜저 인과관계가 실제로 주장하는 것

Granger 인과관계는 메커니즘이 아니라 예측 우선순위입니다. 과거 가 과거 가 이미 설명한 것 이상으로 의 예측 오류 분산을 줄이는 경우 Granger는 를 유발합니다.
Granger - 인 경우 발생
공통 숨겨진 요인에 의해 구동되는 두 계열은 둘 사이에 직접적인 연결이 없는 Granger 인과 관계를 보여줄 수 있습니다. 암호 화폐에서 그 경고는 학문적이지 않습니다. - BTC는 전체 알트코인 복합체에서 단일 지배적인 요소이므로 거의 모든 Alt-to-Alt "인과 관계"는 동일한 BTC 충격에 대해 응답 속도가 다른 후보 인공물입니다.
VAR 프레임워크
테스트는 벡터 자동 회귀 내부에 있습니다. 지연이 있는 두 변수의 경우:
행렬 형식에서 변수가 있는 VAR(p):
Granger로 인해 가 발생하는지 테스트하면 첫 번째 방정식에서 결합 제한 가 테스트됩니다. 표준 경로는 제한된 잔차 제곱합과 제한되지 않은 잔차 제곱합에 대한 F-검정입니다.
점근적으로 동등한 Wald 형식 를 사용합니다. 다음은 어떤 계수에 제한을 적용하고, 어떤 데이터에 VAR을 적용했는지에 대한 질문입니다.
지연 선택
는 대부분의 글에서 인정하는 것보다 더 중요합니다. 지연이 너무 적으면 역학을 놓치고, 자유도가 너무 많이 소모되고 전력이 파괴됩니다.
합리적인 검색 범위: 초 데이터는 160, 분 데이터는 130, 시간별 데이터는 1~48. 여기서는 BIC가 올바른 기본값입니다. 이는 보다 간결한 기준이며 유동 암호화폐 쌍의 리드-랙은 메모리 부족 현상입니다. 아래의 모든 결과는 우주 전체에 걸쳐 하나의 지연을 수정하는 대신 쌍당 BIC가 선택한 를 보고합니다. 고정 지연은 지연 선택 선택을 자동으로 유의성 주장으로 변환하기 때문입니다.
차분 테스트가 잘못된 기본값인 이유

암호화폐 가격 시리즈는 I(1)입니다. 일반적인 수정(로그 반환 가져오기)은 공적분 수준을 희생하여 정상성을 구입하며, 쌍이 장기 균형을 공유하는 경우 차이가 있는 VAR이 잘못 지정됩니다. 해당 문장 뒤에 있는 단위 루트 및 공적분 기계(ADF, Monte-Carlo 임계값을 갖는 Engle-Granger, VAR 시스템의 Johansen)는 이미 통계 차익거래 및 쌍 거래; 여기서 가정해 보세요. 요점은 차이점과 테스트라는 일반적인 해결 방법이 결과가 포함된 모델링 결정이며 Toda-Yamamoto가 이를 피하는 방법이라는 것입니다.
토다-야마모토 절차
지연이 있는 VAR을 맞춥니다. 여기서 는 최적의 지연 순서이고 는 계열의 최대 통합 순서입니다. 그런 다음 첫 번째 지연에서만 제한 사항을 테스트합니다. 추가 지연은 비정상성을 흡수합니다. 첫 번째 계수에 대한 Wald 통계는 계열이 I(0), I(1) 또는 공적분인지 여부에 관계없이 표준 를 따릅니다.
- 를 결정합니다 — 각 시리즈의 ADF 및 KPSS. 암호화폐 가격 의 경우 거의 항상 그렇습니다.
- 선택 — 레벨에 VAR을 맞추고 BIC로 선택합니다.
- **차이 없이 레벨에서 증가된 VAR()**을 추정합니다.
- 첫 번째 지연만 Wald 테스트하고 추가 항목은 무시합니다. 결과는 입니다.
결과: 공적분 사전 테스트 없음, 차이 없음, 정확한 테스트 크기 — 통합 속성이 어떻게 밝혀지든 null 아래의 거부율은 거의 명목 수준으로 유지됩니다. 비용은 4단계가 test_causality가 기본적으로 수행하는 작업이 아니라는 것입니다. 이는 대부분의 구현이 조용히 잘못되는 부분입니다.
구현

DataFrame에 이미 분 막대를 정렬했다고 가정합니다. ccxt 가져오기 및 인덱스 상용구는 정권 감지 with HMM에 있고 1단계에 사용할 ADF 래퍼는 통계 차익거래 및 쌍 거래.
이 실행 전 버전 참고 사항: grangercausalitytests(..., verbose=False)는 더 이상 사용되지 않으며 statsmodels 0.15에서 제거되었습니다. 인수를 삭제하거나(함수가 더 이상 기본적으로 인쇄되지 않음) statsmodels<0.15를 고정하십시오. 아래 코드는 최신 서명을 가정합니다.
토다-야마모토, 제대로 해냈습니다
제한사항은 직접 작성해야 합니다. VARResults.test_causality는 제한에 지연을 포함하는 증강 VAR()에서 적합 모델의 원인 변수의 모든 지연을 테스트합니다. 이는 정확히 Toda-Yamamoto가 하지 말라고 말한 것입니다. 수정 사항은 전체 계수 공분산에 대한 명시적 행렬입니다.
import numpy as np
from scipy.stats import chi2
from statsmodels.tsa.api import VAR
def toda_yamamoto_test(data, target, predictor, max_lag=15, d_max=1,
significance=0.05):
"""
Toda-Yamamoto Granger causality on levels (no differencing).
Fits VAR(p + d_max) and applies a Wald test to the predictor's
coefficients at lags 1..p ONLY, leaving the d_max augmenting lags
unrestricted. Statistic is chi2(p).
"""
pair = data[[target, predictor]].dropna()
n_vars = pair.shape[1]
target_idx = list(pair.columns).index(target)
pred_idx = list(pair.columns).index(predictor)
model = VAR(pair)
p = model.select_order(maxlags=max_lag).bic or 1
res = model.fit(p + d_max)
beta = res.params.values.ravel(order="F")
cov = res.cov_params()
cov = cov.values if hasattr(cov, "values") else np.asarray(cov)
n_per_eq = res.params.shape[0]
idx = [target_idx * n_per_eq + 1 + lag * n_vars + pred_idx
for lag in range(p)] # first p lags only
R = np.zeros((p, beta.size))
R[np.arange(p), idx] = 1.0
Rb = R @ beta
V = R @ cov @ R.T
wald = float(Rb @ np.linalg.solve(V, Rb)) # no pinv: V must be PD
p_value = float(chi2.sf(wald, df=p))
return {
"target": target, "predictor": predictor,
"p": p, "augmented_lag": p + d_max, "d_max": d_max,
"wald_stat": wald, "p_value": p_value,
"significant": p_value < significance,
}
실수하기 쉽고 잘못하면 테스트가 무효화되는 두 가지 세부 사항입니다. 첫째, 인덱스 산술은 statsmodels가 params를 평탄화하는 방식과 일치해야 합니다. p-값을 신뢰하기 전에 beta[target_idx * n_per_eq + 1]가 res.params.iloc[1, target_idx]와 같은지 적합 모델에서 확인해야 합니다. 둘째, pinv가 아닌 np.linalg.solve를 사용하십시오. 가 단수이면 제한이 퇴화되고 그럴듯해 보이는 숫자를 반환하는 대신 실행이 큰 소리로 실패해야 합니다. 여기서 의사 역은 깨진 Wald 테스트가 코드 검토에서 살아남는 방법입니다.
비교를 위한 표준 차이 Granger
비교 기준은 로그 반환, 동일한 쌍, 동일한 BIC 지연입니다.
from statsmodels.tsa.stattools import grangercausalitytests
def differenced_granger(data, target, predictor, p):
"""Standard Granger test on log-returns at a fixed lag p."""
pair = data[[target, predictor]].dropna() # returns, not levels
out = grangercausalitytests(pair, maxlag=[p]) # statsmodels >= 0.15
f_stat, p_value = out[p][0]["ssr_ftest"][:2]
return {"target": target, "predictor": predictor, "lag": p,
"f_stat": f_stat, "p_value": p_value}
maxlag=p 대신 maxlag=[p]에 유의하세요. int를 전달하면 1에서 까지 모든 지연이 실행되고 이미 실행 중인 여러 테스트 외에 기록되지 않은 여러 테스트인 최상의 테스트를 보고하도록 유혹됩니다.
비교
각 쌍에 대해 동일한 BIC가 선택한 에서 수익률과 Toda-Yamamoto 수준에 대해 차이 테스트를 실행하고 두 가지가 일치하지 않는 부분을 표로 작성합니다. 불일치는 흥미로운 세포입니다. 차이에는 중요하지만 수준에는 중요하지 않은 쌍은 공적분 관계를 차별화하는 후보 인공물입니다. 그 반대는 수준 관계가 반환 테스트에서 볼 수 없는 정보를 전달한다는 것을 의미합니다.
인과관계 매트릭스에 대한 다중 비교

전체 매트릭스는 이것이 위험해지는 곳입니다. 20개 자산, 10개 지연 스윕은 3,800개의 가설 테스트이며 Bonferroni는 이와 관련된 패밀리에 대한 잘못된 수정입니다. 테스트는 데이터를 공유하고 BTC 요소를 공유하며 거의 독립적이지 않으므로 Bonferroni는 동시에 집계에 있어서 너무 보수적이며 어떤 세포가 생존하는지에 대해 오해를 불러일으킵니다. 정확히 이 상황을 위해 구축된 수축된 Sharpe 기사**의 **유효 N 기계를 사용하십시오. 즉, 상관된 테스트 계열을 클러스터링하고, 원시 테스트가 아닌 독립적인 시도를 계산하고, 그에 대한 임계값을 계산합니다.
def granger_matrix(data, max_lag=15, d_max=1):
"""Toda-Yamamoto p-value matrix. Entry (i, j): does col_j cause col_i?"""
cols = list(data.columns)
out = pd.DataFrame(np.nan, index=cols, columns=cols, dtype=float)
for target in cols:
for predictor in cols:
if target == predictor:
continue
r = toda_yamamoto_test(data, target, predictor,
max_lag=max_lag, d_max=d_max)
out.loc[target, predictor] = r["p_value"]
return out
중요한 숫자는 0.05 미만인 셀의 수가 아니라 유효 N 보정 임계값에서 얼마나 많은 셀이 생존하는지입니다.
셀 단위가 아닌 구조적으로 살아남은 매트릭스를 읽으십시오. 하나의 자산으로 인해 다른 자산이 많이 발생하는 행은 정보 계층 구조를 확인합니다. 아무 것도 발생하지 않은 열은 발견이라기보다는 특이한 토큰별 역학을 암시합니다.
정직한 테스트: 회전 안정성

단일 샘플 내 p-값은 거래에 거의 가치가 없습니다. 관련된 질문은 중요성이 지속되는지 여부입니다. 암호화폐의 자산 간 관계는 정권에 따라 다릅니다. — 상관 구조는 평온함과 패닉 사이에서 급격히 다르며, 체제 자체는 추정 가능합니다(HMM 체제 감지) — 따라서 한 창에서 추정된 리드 지연은 해당 창에 대한 설명입니다.
def rolling_granger(data, target, predictor, window=500, lag=5, step=50):
"""Rolling-window p-value: when is the lead-lag active vs dormant?"""
rows = []
for start in range(0, len(data) - window, step):
chunk = data.iloc[start:start + window][[target, predictor]].dropna()
if len(chunk) < window * 0.8:
continue
try:
out = grangercausalitytests(chunk, maxlag=[lag])
f_stat, p_value = out[lag][0]["ssr_ftest"][:2]
except Exception:
f_stat, p_value = np.nan, np.nan
rows.append({"timestamp": data.index[start + window - 1],
"f_stat": f_stat, "p_value": p_value})
return pd.DataFrame(rows).set_index("timestamp")
이 시리즈에서 두 가지 항목, 즉 0.05 미만의 창 비율과 임계값 교차 횟수를 보고합니다. 세 개의 교차가 있는 창의 80%에서 유의미한 관계는 풀링된 p-값이 동일하더라도 40개의 교차가 있는 창의 55%에서 유의미한 관계와 다른 개체입니다. 두 번째는 거래가 불가능합니다. 수백 바마다 존재가 바뀌는 신호의 위치 크기를 조정할 수 없으며 재추정 지연으로 인해 항상 이전 체제를 거래하게 됩니다.
그랜저 특유의 데이터 트랩

일반적인 암호화폐 데이터 위생은 다른 곳에서 다룹니다. 백테스트 라이브 패리티의 공백 및 누락된 캔들, 예측 편향 분류법의 타임스탬프 규율] 및 기간 전반에 걸친 예견 없음 증명. 그러나 한 가지 실패 모드는 Granger에만 해당되며 다음과 같이 심각할 정도로 심각합니다.
순방향 채우기가 결과를 생성합니다. 순방향 채우기 캔들은 이전 종가를 반복하여 계열에 순수 자기상관을 주입합니다. 그리고 와 기계적으로 정렬된 의 지연 1 자기상관은 F-검정에서 1지연 인과관계와 구별할 수 없습니다. 동일한 내용이 장소 전반에 걸쳐 적용됩니다. 분 막대의 두 거래소 간 1초 시계 오프셋은 이동이 시작되는 막대 경계의 어느 쪽으로 이동하기 때문에 지연 1 의미를 완전히 생성하거나 파괴할 수 있습니다. 이 작업을 실행하기 전에 공백이 채워지는 대신 삭제되고 두 시리즈가 동일한 시계에서 스탬프 처리되었는지 확인하세요.
문헌에서 보고된 리드-지연 결과

이는 이 기사의 측정값이 아니라 인용된 것입니다. 그들은 출판된 기록이 주장하는 바를 말하기 위해 여기에 왔습니다. 따라서 위의 비교에는 동의하거나 동의하지 않는 것이 있습니다.
- BTC에서 알트코인으로. 아시아 태평양 금융 시장(Springer)의 2026년 연구에 따르면 비트코인에서 알트코인으로 가격 전송이 자주 발생하며, 소형 코인은 응답이 상당히 지연되고 반응이 느려지므로 유동성이 낮아집니다. 이 작업 라인에서 일반적으로 인용되는 지연 크기(BTC에서 ETH까지 대략 1~3분, 중소형주에서는 더 길어지고 시가총액이 하락함에 따라 점점 단방향으로 증가함)는 인용된 조사 결과이며 여기에서 다시 파생되지 않습니다. 그들이 기반으로 하는 시가총액 계층은 다중 기호 검증에 사용된 것과 동일한 사다리입니다.
- CEX가 DEX를 선도합니다. 암호화폐 마이크로구조에 대한 연구(MDPI)는 중앙 집중식 장소가 가격 발견을 지배하고 CEX에서 DEX로 이동하는 정보 흐름과 중대한 역인과성이 없음을 보고합니다. 이는 밀리초 미만의 일치 엔진과 블록 시간 결제와 일치합니다.
- 독립 코인으로서의 ETH. VAR-SVAR 작업(MDPI)은 특히 DeFi 및 NFT 기반 단계에서 이더리움이 소스 역할을 하고 비트코인이 스필오버 수신자 역할을 하는 체제를 찾습니다.
교차 교환, 간략하게
동일한 코인-2개 장소 지연은 실제 설정이지만 이에 대한 경제성(수수료 기준, 지연 시간 사다리, 지연이 존재하는 이유)은 이미 통계 차익거래 및 쌍 거래 및 김치 프리미엄. Granger가 추가한 유일한 질문은 안정성에 대한 질문입니다. Binance-Coinbase 인과관계가 지속적으로 중요한가요, 아니면 다른 모든 것과 마찬가지로 깜박이는가요? 장소 쌍에서 롤링 테스트를 실행합니다. 대답은 '예'가 아니라 p-값 시계열입니다.
살아남은 지연을 포지션으로 전환

쌍이 수정된 임계값 및 롤링 테스트를 지우면 신호 자체는 사소한 것입니다. 지연 창에 대한 누적 예측 변수 반환이 임계값으로 지정됩니다.
def lead_lag_signal(btc_returns, alt_returns, lag=5, threshold=0.001):
"""+1 / -1 / 0 on ALT from BTC's cumulative return over `lag` bars."""
btc_cum = btc_returns.rolling(lag).sum()
signal = pd.Series(0, index=alt_returns.index)
signal[btc_cum > threshold] = 1
signal[btc_cum < -threshold] = -1
return signal
세 가지 사항은 이미 여기에 설명되어 있으므로 이 문서에 포함되지 않습니다.
- 비용이 결정합니다. 알트코인의 분 단위 지연 신호는 스프레드, 영향 및 수수료를 명확하게 해야 합니다. 슬리피지 및 비용 모델 및 메이커-테이커 경제학] 및 선택된 승자에게 비용이 적용되면 어떻게 됩니까를 참조하세요.
- 크기 조정은 p-값 변환이 아닙니다. 노출을 Granger p-값과 반대로 조정하는 것은 잘못되었습니다. p-값은 효과 크기가 아닌 null에 대한 증거이며 표본 길이에 따라 이동합니다. 추정된 효과의 크기와 불확실성 - Kelly sizing.
- 검증은 순방향으로 진행됩니다. 롤링 방식으로 재추정하고 샘플 외부에서 평가합니다. 워크포워드 최적화가 프로토콜입니다.
제한사항

그랜저 인과관계는 인과관계가 아닙니다. 교란 요인(약간의 타임스탬프 불일치로 양쪽 다리를 움직이는 매크로 이벤트), 공통 동인(둘 다 서로 다른 속도로 BTC를 따르는 두 대체 변수) 및 생략된 변수(시스템에서 ETH 없이 BTC에서 DOGE로 테스트)는 모두 직접적인 정보 흐름 없이 중요한 통계를 생성합니다. 이 기사에서처럼 이변량 테스트로 제한하면 생략된 변수 문제가 더 좋아지기는커녕 더 나빠집니다.
선형성. 이 테스트에서는 조건부 평균에서 선형 예측 구조만 확인합니다. 암호화폐에는 변동성 클러스터링, 레버리지 효과 및 체제 전환이 있습니다. 두 번째 이야기는 GARCH 변동성 예측 및 DCC-GARCH 동적 상관관계]를 참조하세요. 알아야 할 비선형 대안: Diks-Panchenko(2006) 커널 테스트, 정보 이론 아날로그로서의 엔트로피 전달, 전체 관절 분포에 걸친 코퓰러 Granger 인과성.
구조적 중단. 하나의 창에서 추정된 모든 관계는 해당 창의 체제에 따라 달라집니다. 위의 롤링 테스트는 최소한의 진단이며, 수정이 아닌 진단입니다.
요약

- 수준에 VAR을 맞추고, 쌍당 BIC로 를 선택하고, 로 보강하고, 첫 번째 지연만 Wald 테스트합니다. 제한 행렬을 직접 구축합니다. 라이브러리의
test_causality는 Toda-Yamamoto가 아닌 증가 지연도 제한합니다. - 동일한 쌍과 시차에 대한 기준선으로 차등 수익률 테스트를 실행하고 불일치 사항을 보고합니다. 그 테이블이 결과입니다. 별표 행렬은 그렇지 않습니다.
- Bonferroni가 아닌 효과적인 N을 통해 상관된 테스트 계열에 대한 매트릭스를 수정하고 얼마나 많은 세포가 생존하는지 보고합니다.
- 굴려보세요. 중요한 창의 비율과 교차 횟수를 보고합니다. 깜박임의 중요성은 풀링된 p-값이 아무리 작더라도 거래 가능한 지연이 아닙니다.
- 지연 1 결과를 믿기 전에 앞으로 채우는 대신 간격을 줄이고 장소 전체의 시계 정렬을 확인하십시오.
이 절차의 완벽하게 좋은 결과는 부정적입니다. 샘플 내에서 중요하고 수정 후에도 살아남으며 여전히 수백 바마다 양방향으로 0.05 라인을 넘는 BTC-대체 관계는 거래 가능성에 대한 실제 결과이며 하나로 게시할 가치가 있습니다.
참고자료
- 그레인저, C.W.J. (1969). “계량 모형과 교차 스펙트럼 방법을 통한 인과 관계 조사.” 계량경제학, 37(3), 424-438.
- 토다, H.Y. 및 야마모토, T.(1995). "통합 프로세스가 가능한 벡터 자동 회귀의 통계적 추론." 계량경제학 저널, 66(1-2), 225-250.
- Diks, C. 및 Panchenko, V. (2006). "비모수적 Granger 인과관계 테스트를 위한 새로운 통계 및 실제 지침입니다." 경제 역학 및 통제 저널, 30(9-10), 1647-1669.
- Sifat, I.M., Mohamad, A. (2019). "비트코인과 이더리움 간의 리드-래그 관계: 시간별 및 일일 데이터의 증거." 국제 비즈니스 및 금융 연구, 50, 306-321.
- "비트코인에서 알트코인으로의 가격 전송: 거래 전략에 대한 고주파수 증거 및 시사점." 아시아 태평양 금융 시장, Springer, 2026.
- "암호화폐 시장의 파급 위험: VAR-SVAR Granger 인과관계에서 살펴보기." Journal of Risk and Financial Management, MDPI.
- "암호화폐 펀딩 금리 시장의 2계층 구조." 수학, MDPI.
- "분산형 및 중앙형 거래소: 어떤 디지털 토큰이 더 큰 전염 위험을 초래합니까?" ScienceDirect, 2023.
Authors
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.