Bitcoin และ Ethereum มี Cointegration หรือไม่?
การวิเคราะห์ cointegration มีสองขั้นตอน ได้แก่ การถดถอย (regression) time series หนึ่งกับอีก time series หนึ่งเพื่อหา cointegration vector จากนั้นจึงทดสอบ ADF บน residuals ของการถดถอย ในตัวอย่างที่ผ่านมา ไม่จำเป็นต้องทำขั้นตอนแรก เนื่องจากเราสมมติโดยนัยว่า cointegration vector คือ \(\small (1,-1)\) กล่าวคือ เราคำนวณผลต่างระหว่าง time series ทั้งสอง (หลังปรับหน่วยแล้ว) แต่ในแบบฝึกหัดนี้ คุณจะต้องทำทั้งสองขั้นตอน
ให้ถดถอยราคาของ cryptocurrency หนึ่ง คือ bitcoin (BTC) กับอีกตัวหนึ่ง คือ ethereum (ETH) หากกำหนดให้ค่าสัมประสิทธิ์การถดถอยคือ \(\small b\) แล้ว cointegration vector ก็คือ \(\small (1,-b)\) จากนั้นให้รัน ADF test บน BTC \(\small - b \) ETH โดยราคา Bitcoin และ Ethereum ถูกโหลดไว้ล่วงหน้าใน DataFrame BTC และ ETH แล้ว
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การวิเคราะห์อนุกรมเวลาด้วย Python
คำแนะนำการฝึกหัด
- นำเข้าโมดูล statsmodels สำหรับ regression และฟังก์ชัน
adfuller - เพิ่มค่าคงที่ให้กับ DataFrame
ETHโดยใช้sm.add_constant() - ถดถอย
BTCกับETHโดยใช้sm.OLS(y,x).fit()โดยที่ y คือตัวแปรตาม และ x คือตัวแปรอิสระ แล้วบันทึกผลลัพธ์ไว้ในตัวแปรresult- ค่า intercept อยู่ใน
result.params[0]และค่า slope อยู่ในresult.params[1]
- ค่า intercept อยู่ใน
- รัน ADF test บน BTC \(\small - b \) ETH
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# 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])