Python Johansen测试产生了不正确的特征向量
我试图用python复制Ernie Chan在其开创性著作Algorithmic Trading(第55页)中概述的示例2.7。网上没有太多相关的资料,但是statsmodel库非常有用。但是,我的代码生成的特征向量看起来不正确,因为这些值与测试数据不正确相关。以下是几个步骤中的代码:Python Johansen测试产生了不正确的特征向量,python,Python,我试图用python复制Ernie Chan在其开创性著作Algorithmic Trading(第55页)中概述的示例2.7。网上没有太多相关的资料,但是statsmodel库非常有用。但是,我的代码生成的特征向量看起来不正确,因为这些值与测试数据不正确相关。以下是几个步骤中的代码: import pandas as pd import yfinance as yf from datetime import datetime from dateutil.relativedelta import
import pandas as pd
import yfinance as yf
from datetime import datetime
from dateutil.relativedelta import relativedelta
years = 5
today = datetime.today().strftime('%Y-%m-%d')
lastyeartoday = (datetime.today() - relativedelta(years=years)).strftime('%Y-%m-%d')
symbols = ['BTC-USD', 'BCH-USD','ETH-USD']
df = yf.download(symbols,
start=lastyeartoday,
end=today,
progress=False)
df = df.dropna()
data = pd.DataFrame()
for symbol in symbols:
data[symbol] = df['Close'][symbol]
data.tail()
这将产生以下输出:
让我们来描绘三个系列:
# Plot the prices series
import matplotlib.pyplot as plt
%matplotlib inline
for symbol in symbols:
data[symbol].plot(figsize=(10,8))
plt.show()
图表:
现在,我们在数据集上运行协整Johansen测试:
将numpy导入为np
作为pd进口熊猫
将statsmodels.api作为sm导入
#数据=pd.read\u csv(“http://web.pdx.edu/~crkl/ceR/data/usyc87.txt”,索引_col='YEAR',sep='\s+',nrows=66)
#y=数据['y']
#c=数据['c']
从statsmodels.tsa.vector\u ar.vecm导入coint\u johansen
"""
VECM协整等级的Johansen协整检验
参数
----------
endog:array_like(nobs_tot x neq)
要测试的数据
详细顺序:int
*-1-无确定性术语-模型1
*0-常数项-模型3
*1-线性趋势
k_ar_diff:int,非负
模型中滞后差异的数量。
退换商品
-------
结果:霍尔德
包含结果的对象,可使用点表示法访问该对象。该对象的属性为
eig:(neqs)-特征值。
evec:(neqs x neqs)-特征向量。
lr1:(neqs)-跟踪统计。
lr2:(neqs)-最大特征值统计。
cvt:(neqs x 3)-痕量统计的临界值(90%,95%,99%)。
cvm:(neqs x 3)-最大特征值统计的临界值(90%,95%,99%)。
方法:str“johansen”
r0t:(nobs x neqs)-Δevecs[0]的残差看起来不正确。检查特征向量是否是evec
的一列,而不是您使用的一行。我认为这不是问题所在-这是整个向量:数组([[2.21531848e-04,-1.70103937e-04,-9.403745e-05],[9.75019721e-05],-3.06140602e-03,2.58381766e-04],[-2.24844525e-03,6.30045019e-03,4.38778520e-03]])你应该将价格转换为对数回报或对数累积回报。你这样做了吗?@MilTom-很好的建议,我简直不敢相信我从来没有想到过。请看我上面的更新。如果我正确阅读特征值和跟踪统计数据,显然没有相关性。