Bitcoin と Ethereum は共和分していますか?
共和分の検定は2段階で行います。まず一方の時系列をもう一方に回帰して共和分ベクトルを求め、次に回帰の残差に対してADF検定を行います。前の例では、単位変換の後に2系列の差を取っただけで、暗黙に共和分ベクトルを \(\small (1,-1)\) と仮定していたため、最初の段階は不要でした。ここでは、両方の段階を実行します。
暗号資産のひとつである bitcoin (BTC) の値を、もうひとつの暗号資産である ethereum (ETH) に回帰します。回帰係数を \(\small b\) とすると、共和分ベクトルは単純に \(\small (1,-b)\) になります。続いて、BTC \(\small - b \) ETH に対してADF検定を行います。Bitcoin と Ethereum の価格は DataFrame BTC と ETH にあらかじめ読み込まれています。
この演習はコースの一部です
Pythonで学ぶ時系列解析
演習の手順
- 回帰のために statsmodels モジュールと、
adfuller関数をインポートします sm.add_constant()を用いてETHDataFrame に定数項を追加しますsm.OLS(y,x).fit()を使ってBTCをETHに回帰し(y が従属変数、x が独立変数)、結果をresultに保存します。- 切片は
result.params[0]、傾きはresult.params[1]にあります
- 切片は
- BTC \(\small - b \) ETH に対して ADF 検定を実行します
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Import the statsmodels module for regression and the adfuller function
import statsmodels.api as sm
from statsmodels.tsa.stattools import adfuller
# Regress BTC on ETH
ETH = sm.___(ETH)
result = sm.OLS(___,___).fit()
# Compute ADF
b = result.params[1]
adf_stats = adfuller(___['Price'] - b*___['Price'])
print("The p-value for the ADF test is ", adf_stats[1])