Eksponentialfunksjonen som modell. Regresjon

Antall ørret i et vann har økt kraftig etter at det i 1998 ble satt i gang med kalking av vannet. Tabellen viser antall ørret i vannet noen år etter 1998.
Årstall | 1998 | 2000 | 2002 | 2004 |
---|---|---|---|---|
Antall år etter 1998, | 0 | 2 | 4 | 6 |
Antall ørret i tusen, | 4,0 | 6,7 | 10,9 | 17,4 |
Tabellen viser at ørretbestanden øker mer og mer. Vi vil finne en modell for utviklingen av ørretbestanden.
Vi legger dataene fra tabellen inn i regnearket i GeoGebra. Så merker vi cellene og klikker på knappen for regresjonsanalyse.
Punktene viser at vi må finne en funksjon som vokser raskere og raskere ettersom -verdiene øker, noe vi også ser direkte av tabellen. Derfor kan en eksponentiell modell passe godt med de observerte verdiene.
Ved å velge "Eksponentiell 2" som regresjonsmodell får vi tallet som grunntall i potensen.
Vi får funksjonen gitt ved
som modell for utviklingen av ørretbestanden.
For å få grafen og punktene over i det vanlige grafikkfeltet kopierer vi den over ved å trykke på knappen til høyre for innstillingshjulet, og vi velger "Kopier til grafikkfeltet".
Av grafene kan vi for eksempel se at ut fra denne modellen vil ørretbestanden ha passert 46 000 individer i 2008 og 76 000 individer i 2010.
Regresjon med Python kan gjøres på flere måter. Her har vi valgt å bruke metoden curve_fit
fra scipy.optimize
selv om den gir oss mer data enn vi skal bruke her.
Metoden er basert på at vi angir i koden hva slags type funksjon som skal brukes i den matematiske modellen. Dette gjøres ved å definere modellen som en egendefinert pythonfunksjon i koden. I vårt tilfelle ønsker vi å tilpasse målingene til en eksponentialfunksjon av typen
1 # importerer nødvendige bibliotek 2from scipy.optimize import curve_fit 3import numpy as np 4import matplotlib.pyplot as plt 5 6 # lager funksjonen som beskriver modellen 7def modell(x,a,b): 8 return a*np.e**(b*x)
Parametrene til pythonfunksjonen modell
er først den frie variabelen x
, deretter konstantene som skal brukes i modellfunksjonen, modell
brukes av metoden curve_fit
sammen med ei liste med curve_fit
gir tilbake to lister. Den ene inneholder de to konstantene a
og b
(i vårt tilfelle) som gjør at den matematiske funksjonen vi definerte i pythonfunksjonen modell
, passer mest mulig med måledataene. Den andre lista inneholder de såkalte kovariansene, som vi ikke skal bruke her.
Koden kan videre se slik ut:
1 # legger inn måledataene i lister 2x_verdier = [0,2,4,6] 3y_verdier = [4,6.7,10.9,17.4] 4 5 # bruker metoden curve_fit og legger resultatene i to lister 6konstanter,kovarians = curve_fit(modell,x_verdier,y_verdier) 7 8 # henter ut konstantene fra lista konstanter 9a, b = konstanter 10 11 # lager utskrift av funksjonen 12print(f"Funksjonen blir f(x) = {a:.3f}e^({b:.3f}x).") 13 14 # plotter data 15plt.plot(x_verdier,y_verdier,'o', label = "Målinger") 16 17 # plotter modell 18x_array = np.linspace(min(x_verdier),max(x_verdier),300) 19y_array = modell(x_array,a,b) 20plt.plot(x_array,y_array,"brown", label = "Modell") 21plt.legend(bbox_to_anchor=(0.6,1)) 22plt.xlabel("$x$, antall år etter 1998") # tittel på x-aksen 23plt.ylabel("$y$, antall tusen ørret") 24plt.show()
Kjøring av koden gir følgende utskrift:
"Funksjonen blir f(x) = 4.126e^(0.240x)."
Vi får nesten den samme modellfunksjonen som med GeoGebra. Årsaken til at det ikke blir likt, kan være at ulike programmer kan bruke litt ulike måter å regne seg fram til resultatet på.
Etter modellen vil ørretbestanden fortsette å vokse raskere og raskere. Er det slik det vil utvikle seg videre?
Registreringen av ørretbestanden fortsatte hvert andre år etter 2004. Resultatene ser du i tabellen nedenfor.
Årstall | 1998 | 2000 | 2002 | 2004 | 2006 | 2008 | 2010 |
---|---|---|---|---|---|---|---|
Antall år etter 1998, | 0 | 2 | 4 | 6 | 8 | 10 | 12 |
Antall ørret i tusen, | 4,0 | 6,7 | 10,9 | 17,4 | 21,5 | 24,5 | 26,0 |
I koordinatsystemet nedenfor ser du grafen til
Det viser seg altså at modellen ikke var egnet til å si noe om utviklingen i perioden etter 2004.
Eksponentialfunksjoner passer ofte godt til å beskrive hvordan populasjoner endrer seg i et begrenset tidsrom mens det er rik tilgang på mat og lite eller ingenting som begrenser veksten.
Etter hvert blir utviklingen annerledes. Når populasjonen blir stor nok, bremses veksten fordi det for eksempel blir for lite mat.
På teorisiden "Logistisk vekst" ser vi på en matematisk modell som passer bedre til utviklingen i ørretbestanden.