Regresjon og modellering - NDLA

Hopp til innhold

Regresjon og modellering

Vi kan bruke regresjonsverktøyet i GeoGebra eller Python til å finne lineære modeller.

Lineær regresjon

Å gjøre en lineær regresjon betyr å gå fra observerte/oppgitte data til en lineær modell som kan brukes til å beskrive dataene. En slik modell kan vi også bruke til å si noe om omtrentlige verdier utenom de observerte dataene våre. I denne artikkelen skal vi ta utgangspunkt i to eksempler for å vise hvordan vi kan gjøre en regresjon. Vi gjør den ene regresjonen med GeoGebra og den andre med Python.

Folketallsutvikling i Norge – regresjon med GeoGebra

Tabellen under er hentet fra statistisk sentralbyrå (SSB) og viser folketallet i Norge for noen utvalgte år i perioden fra 1950 til 2000.

folketall i NOrge 1950–2000

Årstall

1950

1960

1970

1980

1990

2000

Folketall

3 249 954

3 567 707

3 863 221

4 078 900

4 233 116

4 478 497

Vi ønsker å undersøke om det er en sammenheng mellom årstall etter 1950 og folketallet.
Når vi skal lage modeller der vi ser på utvikling over tid, er det vanlig å bruke andre verdier enn årstallene på x-aksen. Det kan også være lurt å ikke ha for store eller små tall på aksene. Vi har derfor laget en ny tabell der x er antall år etter 1950 og f(x) er folketallet i antall millioner:

Innbyggertall i antall millioner x år etter år 1950

x

0

10

20

30

40

50

f(x)

3,2

3,6

3,9

4,1

4,2

4,5

Vi plotter punktene i et koordinatsystem for å se om det er en sammenheng mellom antall år som har gått siden 1950, og hvor mange innbyggere det er i Norge.

Vi ser at punktene ligger tilnærmet på ei rett linje. Dette betyr at folketallet i Norge har hatt en tilnærmet lineær vekst i perioden fra 1950 til 2000.

Vi ønsker å finne likningen til den linja som best tilnærmer denne veksten.


Vi velger "Regneark" i GeoGebra og legger tallene fra tabellen inn i regnearket. Legg merke til at det lønner seg å legge x-verdiene og y-verdiene i hver sin kolonne. Merk så området der du har lagt tallene, velg "Regresjonsanalyse". Velg lineær modell i nedtrekksmenyen. Du får da opp dette bildet:

Vi har at funksjonen f(x)=0,0243x+3,3095 er en matematisk modell som tilnærmet beskriver utviklingen i Norge fra 1950 til 2000.

Stigningstallet er 0,024 3. Det betyr at etter denne modellen øker folketallet i Norge gjennomsnittlig med 24 300 personer per år, og folketallet vil være 4,87 millioner i år 2015. Se punktet (65, 4.87) på grafen nedenfor.

Tall fra SSB viser at folketallet i Norge var 4,6 millioner i 2005 og 4,9 millioner i 2010. Det passerte 5,2 millioner i 2015. Se punktene i diagrammet. Folketilvekst i 2014 var ifølge SSB på 56 749 personer.

🤔 Tenk over: Synes du modellen fra år 2000 var en god modell til å forutsi folketallsutviklingen i årene 2000 til 2015? Undersøk hva folketallet i Norge er i dag. Mener du at modellen fra år 2000 fortsatt kan brukes til å forutsi framtidig folketallsutvikling, eller bør det lages nye modeller?

Overføring av modellen til grafikkfeltet

Hvis du skal arbeide videre med modellen du har laget, kan du overføre modellen til grafikkfeltet ved hjelp av knappen ved siden av "punktdiagram" og velge "Kopier til grafikkfeltet".

Omkrets av en sirkel – regresjon med Python

Vi vil undersøke sammenhengen mellom radius til en sirkel og omkretsen av sirkelen.


Vi har valgt å bruke GeoGebra til å tegne fire sirkler med radius på henholdsvis 0,31 cm, 1,40 cm, 2,30 cm og 3,30 cm.

Deretter har vi brukt kommandoen "Omkrets()" i algebrafeltet for å finne omkretsen til sirklene, som vist på bildet.

For hver verdi av radius, som vi kan kalle x, får vi en verdi for omkretsen, som vi kan kalle gx. Vi sier at omkretsen er en funksjon av radius, x.

Vi setter resultatene opp i en tabell.

Radius og omkrets i sirkler

Radius x

0,31

1,40

2,30

3,30

Omkrets gx

1,95

8,80

14,45

20,73

Vi gjør som i eksempelet over: Vi må først sjekke om punktene ser ut til å vise en sammenheng mellom radius og omkrets. Til det bruker vi funksjonen "scatter()". Programmet kan se slik ut:

python
1import matplotlib.pyplot as plt
2
3X = [0.31, 1.40,2.30,3.30]
4Y = [1.95,8.80,14.45,20.73]
5
6plt.scatter(X,Y)
7
8plt.show()

Kjør koden, og du vil oppdage at punktene ser ut til å ligge på ei rett linje.

For å finne den rette linja i Python importerer vi "curve_fit" fra biblioteket "scipy.optimize". Programmet for å gjøre en lineær regresjon og tegne målepunktene og modellen kan se slik ut:

python
1import matplotlib.pyplot as plt
2from scipy.optimize import curve_fit
3import numpy as np
4
5def modell(x,a,b):
6    return a*x + b
7
8X = [0.31, 1.40,2.30,3.30]
9Y = [1.95,8.80,14.45,20.73]
10
11konstanter, kovarians = curve_fit(modell, X,Y)
12
13a,b = konstanter
14
15print(f'f(x)= {a:.2f}x+{b:.3f}')
16
17#tegner modellen vi fant, sammen med punktene
18
19X_2 = np.array(X)
20Y_2 = modell(X_2,a,b)
21
22plt.plot(X_2,Y_2)    #tegner modellen
23
24plt.scatter(X,Y)     #tegner målepunktene
25
26plt.show()
Kommentar til koden

I linje 5 og 6 definerer vi en generell lineær modell.

I linje 11 lar vi curve_fit finne konstantene a og b som passer best til tallene vi har oppgitt.

I linje 13 henter vi ut konstantene vi fant i linje 6. (Ikke tenk på det som står om kovarians, vi bruker ikke dette her.)

I linje 15 printer vi funksjonsuttrykket.

I linje 19–26 tegner vi modellen vi fant, sammen med punktene slik at vi ser at den stemmer med punktene.

Når vi kjører denne koden, får vi modellen f(x)=6,28x + 0,005.

🤔 Tenk over: Du har tidligere lært at omkretsen til en sirkel er O=2πr. Hvordan stemmer egentlig det med funksjonen du fant?

Kan vi stole på matematiske modeller?

I kompetansemålene står det at du skal kunne vurdere hvor gyldig en modell er.

Formelen for sammenhengen mellom radius i en sirkel og omkretsen av sirkelen, O=2πr, er et eksempel på en matematisk modell som er svært nøyaktig. Det har blitt gjort mange målinger som viser at vi kan stole på modellen. Den modellen vi fant ved hjelp av Python, var mindre nøyaktig fordi vi ikke hadde helt nøyaktige måltall. Likevel vil også vår modell være nokså nøyaktig for store verdier av x.

Modellen vi fant for å beskrive hvordan folketallet i Norge utvikler seg, er mer usikker. For det første ser vi at linja ikke treffer punktene fra tabellen helt nøyaktig. Den linja som framkommer ved lineær regresjon, er den som totalt sett har minst avvik fra punktene.

Den lineære modellen har stigningstall 0,024 3. Det betyr en vekst i folketallet på 0,024 3 millioner eller 24 300 per år. Er det realistisk at folketallet her i landet vil øke med cirka 25 000 per år i tida framover?

Hvor lenge vil denne utviklingen i så fall fortsette? Det er ikke lett å svare på dette. Her er det mange faktorer som kan virke inn. Vil politikerne begrense innvandringen til Norge, eller vil de åpne for fri innvandring? Hva med fødselspermisjoner og barnehagetilbud? Vil det bli lettere eller vanskeligere å være småbarnsforeldre?

Vi kan stille liknende spørsmål til andre matematiske modeller. Vi må alltid vurdere om en matematisk modell er gyldig, og spesielt må vi ta hensyn til forhold som kan påvirke situasjonen før vi bruker en modell til å si noe om hva som vil skje i framtida.


Trinket

Nedenfor kan du teste kodene dine hvis du ikke har en egen editor tilgjengelig. NB: Editoren vil ikke være tilgjengelig under skriftlig eksamen.

Kilde

Statistisk sentralbyrå. (u.å.). Statistikkbanken: Fødte: 04232: Samlet fruktbarhetstall, kvinner (F) 1968 - 2023. Hentet 20. august 2024 fra https://www.ssb.no/befolkning/fodte-og-dode/statistikk/fodte

Skrevet av Tove Annette Holter, Olav Kristensen og Stein Aanensen.
Sist faglig oppdatert 25.06.2024