Tilbake
2.6
Statistisk programvare

2.6 Statistisk programvare

Python, R og regneark for statistisk analyse.

25 min
5 oppgaver
PythonRScipyRegneark
Du leser den tradisjonelle versjonen
Din fremgang i kapitlet
0 / 5 oppgaver

Statistisk programvare

Moderne statistisk analyse blir nesten alltid utført med programvare. I dette kapittelet lærer du å bruke dei tre mest relevante verktøya for VG3-elevar: Python (med biblioteket SciPy), R (eit dedikert statistikkspråk), og rekneark (Excel/Google Sheets). Du skal lære å utføre utrekningar, køyre testar og lage figurar — og forstå når kvart verktøy eignar seg best.

Læringsmål:
- Utføre beskrivande statistikk i Python, R og rekneark
- Køyre t-testar og kjikvadrattestar med programvare
- Lage statistiske figurar og diagram
- Vurdere styrkar og avgrensingar ved ulike verktøy
- Tolke programvareutdata korrekt

Python for statistisk analyse

Python har blitt det mest brukte programmeringsspråket for dataanalyse og statistikk globalt. Med biblioteka NumPy, SciPy og Pandas har Python alt som trengst for statistisk analyse.

Grunnleggjande statistikk med NumPy

import numpy as np

data = [23, 27, 31, 25, 28, 30, 22, 26, 29, 24]

# Beskrivende statistikk
gjennomsnitt = np.mean(data)        # 26.5
median = np.median(data)            # 26.5
std_avvik = np.std(data, ddof=1)    # 3.03 (utvalgsstandaravvik)
varians = np.var(data, ddof=1)      # 9.17

print(f"Gjennomsnitt: {gjennomsnitt:.1f}")
print(f"Standardavvik: {std_avvik:.2f}")

Viktig: Parameteren ddof=1 sikrar at vi bruker utvalsformelen (deler på n1n-1), ikkje populasjonsformelen (deler på nn). I forsking bruker vi nesten alltid ddof=1.

Hypotesetesting med SciPy

from scipy import stats

# Uavhengig t-test
gruppe_a = [82, 78, 85, 90, 76, 88, 84, 79]
gruppe_b = [72, 68, 75, 80, 71, 74, 69, 73]

t_stat, p_verdi = stats.ttest_ind(gruppe_a, gruppe_b)
print(f"t = {t_stat:.3f}, p = {p_verdi:.4f}")
# t = 3.574, p = 0.0030

Konfidensintervall med SciPy

from scipy import stats
import numpy as np

data = [23, 27, 31, 25, 28, 30, 22, 26, 29, 24]
n = len(data)
gjennomsnitt = np.mean(data)
se = stats.sem(data)  # standardfeil

# 95 %-konfidensintervall med t-fordeling
ki = stats.t.interval(0.95, df=n-1, loc=gjennomsnitt, scale=se)
print(f"95 % KI: [{ki[0]:.2f}, {ki[1]:.2f}]")
# 95 % KI: [24.33, 28.67]
Python-bibliotek for statistikk
NumPy — Grunnleggjande numerisk utrekning. Funksjonar: np.mean(), np.median(), np.std(), np.var().

SciPy (scipy.stats) — Statistiske testar og fordelingar. Funksjonar: ttest_ind() (uavhengig t-test), ttest_rel() (para t-test), chi2_contingency() (kjikvadrattest), pearsonr() (korrelasjon).

Pandas — Datahandtering og -analyse. Funksjonar: df.describe() (beskrivande statistikk), df.corr() (korrelasjonsmatrise), df.groupby() (gruppering).

Matplotlib/Seaborn — Visualisering. Funksjonar: plt.hist() (histogram), plt.scatter() (punktdiagram), sns.boxplot() (boksplott).

Hugs ddof=1 i NumPy for utvalsstatistikk. SciPy bruker ddof=1 som standard.

✏️Eksempel: Komplett analyse i Python

Skriv eit Python-program som les inn to grupper med data, reknar ut beskrivande statistikk, utfører ein uavhengig t-test, og tolkar resultatet ved 5 % signifikansnivå.

import numpy as np
from scipy import stats

# Data: Eksamensresultater for to klasser
klasse_a = [72, 85, 78, 90, 82, 76, 88, 79, 84, 81]
klasse_b = [65, 70, 74, 68, 72, 66, 75, 69, 71, 73]

# Beskrivende statistikk
print("=== Beskrivende statistikk ===")
print(f"Klasse A: n={len(klasse_a)}, snitt={np.mean(klasse_a):.1f}, "
      f"std={np.std(klasse_a, ddof=1):.1f}")
print(f"Klasse B: n={len(klasse_b)}, snitt={np.mean(klasse_b):.1f}, "
      f"std={np.std(klasse_b, ddof=1):.1f}")

# Uavhengig t-test
t_stat, p_verdi = stats.ttest_ind(klasse_a, klasse_b)
print(f"\n=== t-test ===")
print(f"t = {t_stat:.3f}, p = {p_verdi:.4f}")

# Tolkning
alfa = 0.05
if p_verdi < alfa:
    print(f"p = {p_verdi:.4f} < {alfa} → Forkast H₀")
    print("Konklusjon: Signifikant forskjell mellom klassene.")
else:
    print(f"p = {p_verdi:.4f} >= {alfa} → Beholder H₀")
    print("Konklusjon: Ingen signifikant forskjell.")

Utdata:
Klasse A: n=10, snitt=81.5, std=5.4
Klasse B: n=10, snitt=70.3, std=3.3
t = 5.571, p = 0.0000
Konklusjon: Signifikant forskjell mellom klassene.

📝Oppgave 2.6.1

Kva gjer parameteren ddof=1 i np.std(data, ddof=1) i Python?

R for statistisk analyse

R er eit programmeringsspråk laga spesielt for statistikk og dataanalyse. Det er førstevalet i mange forskarmiljø og har innebygd støtte for dei fleste statistiske metodar.

Grunnleggjande statistikk i R

data <- c(23, 27, 31, 25, 28, 30, 22, 26, 29, 24)

# Beskrivende statistikk
mean(data)        # 26.5
median(data)      # 26.5
sd(data)          # 3.03 (bruker n-1 automatisk)
var(data)         # 9.17
summary(data)     # Min, Q1, Median, Snitt, Q3, Max

Fordel med R: Funksjonen sd() bruker automatisk utvalsformelen (n1n-1), så du treng ikkje hugse nokon ekstra parameter slik som i Python.

Hypotesetesting i R

# Uavhengig t-test
gruppe_a <- c(82, 78, 85, 90, 76, 88, 84, 79)
gruppe_b <- c(72, 68, 75, 80, 71, 74, 69, 73)

t.test(gruppe_a, gruppe_b)
# t = 3.574, df = 12.3, p-value = 0.003
# 95 % KI for forskjellen: [4.25, 18.25]

# Kjikvadratstest
tabell <- matrix(c(30, 20, 15, 35), nrow=2)
chisq.test(tabell)
# X-squared = 9.52, df = 1, p-value = 0.002

Korrelasjon og regresjon i R

x <- c(2, 4, 6, 8, 10)
y <- c(15, 22, 30, 35, 42)

# Korrelasjon
cor(x, y)                  # 0.998
cor.test(x, y)             # Med p-verdi og KI

# Lineær regresjon
modell <- lm(y ~ x)
summary(modell)
# Coefficients:
#   (Intercept)  8.20
#   x            3.40
# R-squared: 0.997
R-funksjonar for statistikk
Beskrivande statistikk: mean(), median(), sd(), var(), summary(), quantile().

t-testar: t.test(x, y) — gir automatisk teststatistikk, p-verdi, konfidensintervall og fridomsgrader. Bruk paired=TRUE for para t-test.

Kjikvadrattest: chisq.test(tabell) — tek ein kontingenstabell som input.

Korrelasjon: cor(x, y) for korrelasjonskoeffisient, cor.test(x, y) for test med p-verdi.

Regresjon: lm(y ~ x) for lineær modell, summary(modell) for detaljert utdata med R2R^2, koeffisientar og p-verdiar.

Visualisering: hist(), boxplot(), plot(), eller bruk ggplot2-pakken for avanserte figurar.

✏️Eksempel: Samanlikning av Python og R

Vis korleis ein utfører ein para t-test i både Python og R for følgjande data: Før-målingar = [68, 72, 65, 70, 74] og etter-målingar = [62, 66, 60, 64, 70].

I Python:
from scipy import stats
for_ = [68, 72, 65, 70, 74]
etter = [62, 66, 60, 64, 70]
t_stat, p_verdi = stats.ttest_rel(for_, etter)
print(f"t = {t_stat:.3f}, p = {p_verdi:.4f}")
# t = 5.292, p = 0.0061

I R:

for_data <- c(68, 72, 65, 70, 74)
etter <- c(62, 66, 60, 64, 70)
t.test(for_data, etter, paired = TRUE)
# t = 5.292, df = 4, p-value = 0.006
# 95 % KI: [2.52, 8.28]

Tolking: Begge gir t=5,292t = 5{,}292 og p=0,006p = 0{,}006. Med p<0,05p < 0{,}05 forkastar vi H0H_0 og konkluderer med at det er ei statistisk signifikant endring frå før til etter.

Fordel R: Gir automatisk konfidensintervall for forskjellen. Fordel Python: Lettare å integrere med annan kode og databehandling.

📝Oppgave 2.6.2

Kva for ein R-funksjon blir brukt for å utføre ein lineær regresjonsanalyse?

Rekneark for statistisk analyse

Rekneark som Microsoft Excel og Google Sheets er dei mest tilgjengelege verktøya for statistisk analyse. Dei er spesielt nyttige for enklare analysar og for å byggje intuisjon om statistiske metodar.

Viktige funksjonar i rekneark

FunksjonExcel/SheetsBeskriving
Gjennomsnitt=GJENNOMSNITT(A1:A10)Aritmetisk gjennomsnitt
Median=MEDIAN(A1:A10)Midtverdien
Standardavvik=STDAV(A1:A10)Utvalsstandardavvik (n1n-1)
Varians=VARIANS(A1:A10)Utvalsvarians (n1n-1)
Korrelasjon=KORRELASJON(A1:A10;B1:B10)Pearsons rr
Tal=ANTALL(A1:A10)Tal på numeriske verdiar
Min/Maks=MIN(A1:A10) / =MAKS(A1:A10)Minste/største verdi

t-test i rekneark


Excel har funksjonen =T.TEST():
=T.TEST(A1:A10; B1:B10; 2; 2)
Parametrane:
- Første argument: Dataområde gruppe 1
- Andre argument: Dataområde gruppe 2
- Tredje argument: 1 = einsidig, 2 = tosidig test
- Fjerde argument: 1 = para, 2 = to utval med lik varians, 3 = to utval med ulik varians

Resultatet er p-verdien direkte.

Konfidensintervall i rekneark


For å rekne ut feilmarginen i Excel:

=KONFIDENS.NORM(0,05; STDAV(A1:A10); ANTALL(A1:A10))
Dette gir feilmarginen for eit 95 %-konfidensintervall (0,05 = 1 - 0,95). Konfidensintervallet er då gjennomsnitt ± denne verdien.

Avgrensingar ved rekneark


- Vanskeleg å reprodusere analysar systematisk
- Avgrensa moglegheit for avanserte metodar

- Lett å gjere uoppdaga feil i formlar

- Dårleg eigna for store datasett (> 10 000 rader)

Samanlikning av statistisk programvare
EigenskapPythonRRekneark
BrukarvennlegheitMiddelsMiddelsHøg
Statistisk djupneHøgSvært høgLåg
VisualiseringSvært godSvært godGod
ReproduserbarheitSvært godSvært godLåg
Store datasettJaJaAvgrensa
GratisJaJaDelvis
Bruk i forskingVeksandeStandardSjeldan

Tilråding: Bruk rekneark for raske, enkle analysar. Bruk Python for prosjekt med databehandling og programmering. Bruk R for rein statistisk analyse og forsking.
✏️Eksempel: Same analyse i tre verktøy

Rekn ut gjennomsnitt, standardavvik og eit 95 %-konfidensintervall for datasettet [18, 22, 25, 20, 24, 19, 23, 21] i Python, R og rekneark.

Python:
import numpy as np
from scipy import stats
data = [18, 22, 25, 20, 24, 19, 23, 21]
snitt = np.mean(data)           # 21.5
std = np.std(data, ddof=1)      # 2.33
ki = stats.t.interval(0.95, df=7, loc=snitt, scale=stats.sem(data))
# KI: [19.55, 23.45]

R:

data <- c(18, 22, 25, 20, 24, 19, 23, 21)
mean(data)    # 21.5
sd(data)      # 2.33
t.test(data)$conf.int  # [19.55, 23.45]

Rekneark (data i A1:A8):
- Gjennomsnitt: =GJENNOMSNITT(A1:A8) → 21,5
- Standardavvik: =STDAV(A1:A8) → 2,33
- Feilmargin: =KONFIDENS.T(0,05; STDAV(A1:A8); ANTALL(A1:A8)) → 1,95
- Nedre grense: =GJENNOMSNITT(A1:A8) - feilmargin → 19,55
- Øvre grense: =GJENNOMSNITT(A1:A8) + feilmargin → 23,45

Alle tre gir same resultat: snitt = 21,5, std = 2,33, 95 %-KI = [19,55, 23,45].

📝Oppgave 2.6.3

Kva for ein reknearkformel gir utvalsstandardavviket for data i cellene A1 til A20?

Oppsummering

- Python (med NumPy, SciPy, Pandas) er allsidig og kraftig — bruk ddof=1 for utvalsstatistikk.
- R er laga for statistikk og gir den mest komplette støtta — sd() bruker automatisk n1n-1.
- Rekneark (Excel/Google Sheets) er mest tilgjengeleg og eignar seg for enkle analysar — bruk STDAV() (ikkje STDAVP()).
- Alle tre verktøya kan utføre beskrivande statistikk, t-testar, korrelasjon, regresjon og konfidensintervall.
- Reproduserbarheit er ein viktig fordel med kode (Python/R) over rekneark — analysen kan enkelt gjentakast og kontrollerast.
- Vel verktøy ut frå kompleksiteten i oppgåva: rekneark for kjappe utrekningar, Python/R for seriøse analysar.

📝Oppgave 4

Du har samla inn data om talet på timar brukt på lekser per veke for to klassar:

Klasse X: 5, 8, 6, 7, 9, 4, 6, 8, 7, 5
Klasse Y: 3, 5, 4, 6, 3, 5, 4, 7, 2, 4

(a) Skriv Python-kode som reknar ut gjennomsnitt og standardavvik for begge klassar. (b) Skriv Python-kode som utfører ein uavhengig t-test. (c) Vis korleis den same t-testen blir utført i R. (d) Tolk resultatet ved α=0,05\alpha = 0{,}05.

📝Oppgave 5

Ein forskar vil undersøkje samanhengen mellom studietimar (xx) og eksamenspoeng (yy) for 6 studentar:

Studietimar24681012
Poeng505865727885

(a) Skriv Python-kode som reknar ut Pearsons rr og utfører lineær regresjon. (b) Vis tilsvarande analyse i R. (c) Skriv reknearkformlar for korrelasjon og regresjon (gå ut frå data i A1:A6 og B1:B6). (d) Diskuter kva for fordelar og ulemper kvart verktøy har for denne analysen.

Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.