Ich bin neu in Python und habe versucht, die lineare Regression/Beta/Alpha für zwei Wertpapiere zu berechnen, jedoch gibt mein Code Nan für beide Beta & Alpha, und daher kann ich nicht die Regressionslinie zeichnen.alpha & beta (für lineare Regression) Berechnungen Ausgabe nan?
hier ist der Code in Frage:
#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')
und hier ist das vollständige Skript:
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()
und hier ist die Ausgabe:
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
Irgendwelche Ideen, warum ich immer Nan hier? Ich bin ratlos, jede Hilfe wird sehr geschätzt.
Wenn Sie die 'shift' Operation ausführen nach unten, es ist die erste Reihe ist, die' Nans' hat. Sie müssen diese Werte quantifizieren, um die Regressionskoeffizienten zu erhalten. Es gibt insgesamt 3 'Nans' in' xPlt' bzw. 'yPlt'. –
das tat es, danke - das Hinzufügen der folgenden Zeile zu meiner Funktion compute_daily_returns (df) behob das Problem: daily_returns.ix [0,:] = 0 – trock2000
Aber Sie haben immer noch 2 'Nans' jeweils unter' xPlt' und 'yPlt '. Sie müssen diese auch entfernen, damit die Regressionslinie zusammen mit den Streupunkten angezeigt wird. Es gibt verschiedene Möglichkeiten, mit 'Nans' umzugehen, wie' ffill', 'bfill' und sogar mit der 'Imputer'-Methode von sklearn. –