我是Python的新手并且一直在尝试计算两种证券的线性回归/ Beta / Alpha,但是我的代码输出的是Beta和& Alpha,因此我无法绘制回归线。
这是有问题的代码:
#calculate linear regression
beta_yPlt, alpha_yPlt = np.polyfit(xPlt, yPlt, 1) # fit poly degree 1
print "Y Beta", beta_yPlt
print "Y Alpha", alpha_yPlt
plt.plot(xPlt, beta_yPlt * xPlt + alpha_yPlt, '-', color='red')
这是完整的脚本:
from pandas.io.data import DataReader
from datetime import datetime
import matplotlib.pyplot as plt
import numpy as np
#inputs
symbols = ['EUR=X', 'JPY=X']
startDate = datetime(2011,1,1)
endDate = datetime(2016,12,31)
#get data from yahoo
instrument = DataReader(symbols, 'yahoo', startDate, endDate)
#isolate column
close = instrument['Adj Close']
#calculate daily returns
def compute_daily_returns(df):
daily_returns = (df / df.shift(1)) - 1
return daily_returns
dlyRtns = compute_daily_returns(close)
xPlt = dlyRtns[symbols[0]]
yPlt = dlyRtns[symbols[1]]
#draw "scatter plot" - using "o" workaround
dlyRtns.plot(x=symbols[0], y=symbols[1], marker='o', linewidth=0)
#calculate linear regression
beta_yPlt, alpha_yPlt = np.polyfit(xPlt, yPlt, 1) # fit poly degree 1
print "Y Beta", beta_yPlt
print "Y Alpha", alpha_yPlt
plt.plot(xPlt, beta_yPlt * xPlt + alpha_yPlt, '-', color='red')
# Calculate correlation coefficient
print "Correlation", dlyRtns.corr(method='pearson')
plt.show()
这是输出:
C:\Python27\python.exe C:/Users/Us/Desktop/untitled3/scatterPlot.py
Y Beta nan
Y Alpha nan
Correlation EUR=X JPY=X
EUR=X 1.000000 0.228223
JPY=X 0.228223 1.000000
Process finished with exit code 0
为什么我在这里找到南?我很茫然,非常感谢任何帮助。
答案 0 :(得分:0)
试着调查一下,但这对我来说有点混乱。另外,我无法在当前机器上重现yahoo的数据提取,所以我无法按原样运行你的代码。
这里有几个问题和想法:
xPlt
,因为Python使用了这个词。有时候(如你的例子中)它仍然适用,但这不是一种好的做法。yPlt
和DataReader
,而无需其他任何内容?我怀疑错误就在那里。instrument
并将输出保存在close
中。然后你将一列(按名称选择)分配给Adj close
,但事实上,会有两列名为print
,对吧?简而言之:您应该尝试逐步构建代码,在每个步骤后添加一些plot
和NSObject
命令,以查看变量中保存的数据的方式看起来像。
答案 1 :(得分:0)
我无法检索数据。
我最好的猜测:检索到的数据中有nan
个或重复点。
答案 2 :(得分:0)
def compute_daily_returns(df):
daily_returns = (df / df.shift(1)) - 1
daily_returns.ix[0, :] = 0
return daily_returns
添加daily_returns.ix[0, :] = 0
解决了问题,感谢Nickil Maveli