2016-08-26 1 views
0

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.

+0

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'. –

+1

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

+0

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. –

Antwort

0

Der Versuch, in das zu schauen, aber es ist ein wenig verwirrend für mich. Außerdem kann ich die Daten, die von Yahoo auf meiner aktuellen Maschine ziehen, nicht reproduzieren, daher kann ich Ihren Code nicht so ausführen, wie er ist.

Hier ein paar Fragen und Ideen:

  • Sie keine Variable close, da dieses Wort von Python verwendet wird, nennen sollten. Manchmal (wie in Ihrem Beispiel) funktioniert es trotzdem, aber es ist keine gute Übung.
  • Können Sie Ihre Daten xPlt und yPlt getrennt, ohne etwas anderes? Ich vermute, dass der Fehler da drin ist.
  • Sie rufen DataReader mit einem Array von zwei Werten und speichern Sie die Ausgabe in instrument. Dann weisen Sie close eine Spalte (nach Name) zu, aber in der Tat gibt es zwei Spalten mit dem Namen Adj close, oder?

eine lange Geschichte kurz zu machen: Sie sollten versuchen, Ihren Code Schritt für Schritt aufzubauen, einig print und plot Befehle nach jedem Schritt des Hinzufügen, um zu sehen, wie die Daten, die in Ihren Variablen sehen aus wie gespeichert wird.

0

Ich kann die Daten auch nicht abrufen.

Meine beste Schätzung: Es gibt nan s oder doppelte Punkte in den abgerufenen Daten.

0
def compute_daily_returns(df): 
    daily_returns = (df/df.shift(1)) - 1 
    daily_returns.ix[0, :] = 0 
    return daily_returns 

Zugabe daily_returns.ix[0, :] = 0 das Problem behoben, dank Nickil Maveli

Verwandte Themen