Regression und Fehler Parameter

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
hänschi
User
Beiträge: 1
Registriert: Dienstag 13. März 2018, 18:56

Hallo Zusammen,

ich bräuchte dringend die Hilfe eines Erfahrenen Programmierers. Ich Programmiere gerade an einem Programm für meine Bachelor Arbeit.Dafür ist das programmieren einer Regressionsgerade notwendig. Soweit so gut. Das kann ich ja noch. Ich schaffe es auch noch die Regression zu Plotten. Allerdings will ich, dass die y- Achse im Plott gespiegelt angezeigt wird das habe ich auch noch geschafft. Das Problem tritt erst auf, wenn ich mir die Parameter Alpha und ausgeben lasse, jene stimmen logischerweise nun nicht mehr mit dem Plot überein.
Ich hoffe ihr könnt mir bei meinem Problem helfen, Hier erstmal der Code:

Die Datensätze die ich für die Regression verwenden möchte, gehen aus einem vorigen Programm heraus und nennen sich "year" und "classification". Beides sind Listen. Für die Regression verwandle ich beide erst in ein Array.

Code: Alles auswählen

      xi= np.array(year)
      yi = np.array(classification)
    
dabei gehört das erste Element von year zum ersten Element von classication.
Danach erstellte ich die Designmatrix mit

Code: Alles auswählen

 
    A = np.array([[1, x,] for x in xi]) 
  
für die Berechnung der Regressionsparameter(Alpha0 und Alpha1) rechnete ich:

Code: Alles auswählen

     B = np.dot(A.T, A)
     b = np.dot(A.T, yi)
   
Somit berechnen sich die Alphas mit :

Code: Alles auswählen

 
    alphaj = np.linalg.solve(B, b)
  

Die Regressionsparameter sind nun berechnet und ich möchte die Funktion plotten. Ich definiere mir mal die Funktion "fitted" fürs Plotten:

Code: Alles auswählen

 def fitted(alpha, x):              
           return alpha[0]+x*(alpha[1])
   
Danach wird geplottet:

Code: Alles auswählen

fig, axl =plt.subplots(figsize=(40,20))                                
ax = plt.subplot(1,1,1)                                
plt.xlabel('year')                                                     
plt.ylabel('Classification')
plt.title("Klimaklassifikation") 
ax.grid(linestyle="dotted"
)

Hier definiere ich mir die Variablen zum Plotten:

Code: Alles auswählen

xplot = xi
yplot = fitted(alphaj, xplot)
Nun Plotte ich die Regression:

Code: Alles auswählen

ax.plot(xplot, yplot, label="Regression der Form: a_0 + a_1*x" ) 
Hier Plotte ich die Datenpunkte:

Code: Alles auswählen

ax.plot(xi,yi,"o" , label="data points")


Und hier kommt es nun zum tatsächlichem Problem: Ich möchte, dass die y-Achse inverteiert wird. Dies macht eigentlich der Befehl:

Code: Alles auswählen

plt.gca().invert_yaxis()
Möchte ich mir aber nun die statistischen Größen bzw die Parameter Alpha ausgeben lassen, stimmen jene logischerweise nicht mehr mit dem Diagramm überein.

Ich hab schon überlegt, die liste classification bevor ich sie in ein array umwandle zu zu invertieren. Das geht allerdings ja auch nicht, weil das erste Element von years auch dem ersten Element von calssification zugeordnet sein muss.

Ich freue mich auf eure Antwort und hoffe ihr könnt mir helfen.

Grüße,
Hänschi
Antworten