Nedenstående tre plots er dannet med nedenstående program. Der er valgt nogle tal som tydeligvis giver indtryk af at teorien om et linært fit :
def func(x, a, b):
return a*x+b
Ikke passer til de analyserede data.
Se disse to linjer
for i in range(len(x)):
resy[i]=a*x[i]+b-y[i]
resy indeholder y-værdierne til de grønne punkter i grafen til højre. De er beregnet ved at gange hædningen a med x-værdierne i arrayen + b og så subtraheres der selve y-værdien .. bum finish!
Denne kode sættes sammen med en af de to plotterutiner længere nede
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
x=np.array([1.0,2,3,4,5,6,7,8,9,10])#Jeg skriver 1.0 så array bliver en float-variable
y=np.array([4.8,5.1,5.6,6.3,7.1,8.3,9.5,10.7,12.3,13.9])
resy = np.empty(len(x)) #Danner et tomt array på samme længde som x og y
def func(x, a, b): # se REG3 lineær regression 3
return a*x+b
popt,pcov = curve_fit(func, x, y)#popt = [1.02181818,2.74] som er hældning og skæring
a = popt[0] # fitfunktionens hædning fra curve_fit
b = popt[1] # og skæringen med y-aksen
for i in range(len(x)):
resy[i]=a*x[i]+b-y[i] #beregner resy som et array med residualerne
print("hældning a = ", a)#printer hældningen fra regressionen til skærmen
print("skæring b =",b)
Nedenstående plotkode sættes i forlængelse af ovenstående. Vælg om du vil have to figurer eller om du vil have begge i en.
Mulighed et med plot af to separate figurer
plt.figure(1)
plt.plot(x,y,'ro')
plt.plot(x,a*x+b)
plt.xlabel('x-værdier')
plt.ylabel('y-værdier')
plt.title("Regression og Residualplot")
plt.savefig("reg-og-xy.png") #gemmer filen på hdd
plt.figure(2)
plt.title("Residualplot")
plt.plot(x,resy,'go',lw='1')
plt.axhline(y=0,color='k',linestyle='--',lw=1)#tegner en vandret linje ved y=0
plt.xlabel('x-værdier')
plt.savefig("reg-residualplot.png")
plt.show()
Mulighed to med subplots
plt.subplot(211)
plt.plot(x,y,'ro')
plt.plot(x,a*x+b)
plt.title("Regression og Residualplot")
plt.subplot(212)
plt.savefig("reg-med-residual.png")#gemmer filen
plt.plot(x,resy,'go',lw='1')
plt.axhline(y=0,color='k',linestyle='--',lw=1)#vandret linje
plt.show()
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
x=np.array([1.0,2,3,4,5,6,7,8,9,10])#Jeg skriver 1.0 så array bliver en float-variable
y=np.array([4.8,5.1,5.6,6.3,7.1,8.3,9.5,10.7,12.3,13.9])
resy = np.empty(len(x)) #Danner et tomt array på samme længde som x og y
def func(x, a, b): # se REG3 lineær regression 3
return a*x+b
popt,pcov = curve_fit(func, x, y)#popt = [1.02181818,2.74] som er hældning og skæring
a = popt[0] # fitfunktionens hædning fra curve_fit
b = popt[1] # og skæringen med y-aksen
for i in range(len(x)):
resy[i]=a*x[i]+b-y[i] #beregner resy som et array med residualerne
print("hældning a = ", a)#printer hældningen fra regressionen til skærmen
print("skæring b =",b)
#### her fra plot jeg vælger to separate plots som begge bliver skrivet til harddisken i den mappe som python programmet ligger i. Filerne hedder reg-og-xy.png og reg-residualplot.png
plt.figure(1)
plt.plot(x,y,'ro')
plt.plot(x,a*x+b)
plt.xlabel('x-værdier')
plt.ylabel('y-værdier')
plt.title("Regression og Residualplot")
plt.savefig("reg-og-xy.png") #gemmer filen på hdd
plt.figure(2)
plt.title("Residualplot")
plt.plot(x,resy,'go',lw='1')
plt.axhline(y=0,color='k',linestyle='--',lw=1)#tegner en vandret linje ved y=0
plt.xlabel('x-værdier')
plt.savefig("reg-residualplot.png")
plt.show()