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 utføres nesten alltid med programvare. I dette kapittelet lærer du å bruke de tre mest relevante verktøyene for VG3-elever: Python (med biblioteket SciPy), R (et dedikert statistikkspråk), og regneark (Excel/Google Sheets). Du skal lære å utføre beregninger, kjøre tester og lage figurer — og forstå når hvert verktøy egner seg best.

Læringsmål:
- Utføre beskrivende statistikk i Python, R og regneark
- Kjøre t-tester og kjikvadratstester med programvare
- Lage statistiske figurer og diagrammer
- Vurdere styrker og begrensninger ved ulike verktøy
- Tolke programvareutdata korrekt

Python for statistisk analyse

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

Grunnleggende 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 sikrer at vi bruker utvalgsformelen (deler på n1n-1), ikke populasjonsformelen (deler på nn). I forskning 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-biblioteker for statistikk
NumPy — Grunnleggende numerisk beregning. Funksjoner: np.mean(), np.median(), np.std(), np.var().

SciPy (scipy.stats) — Statistiske tester og fordelinger. Funksjoner: ttest_ind() (uavhengig t-test), ttest_rel() (paret t-test), chi2_contingency() (kjikvadratstest), pearsonr() (korrelasjon).

Pandas — Datahåndtering og -analyse. Funksjoner: df.describe() (beskrivende statistikk), df.corr() (korrelasjonsmatrise), df.groupby() (gruppering).

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

Husk ddof=1 i NumPy for utvalgsstatistikk. SciPy bruker ddof=1 som standard.

✏️Eksempel: Komplett analyse i Python

Skriv et Python-program som leser inn to grupper med data, beregner beskrivende statistikk, utfører en uavhengig t-test, og tolker 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

Hva gjør parameteren ddof=1 i np.std(data, ddof=1) i Python?

R for statistisk analyse

R er et programmeringsspråk designet spesielt for statistikk og dataanalyse. Det er førstevalget i mange forskermiljøer og har innebygd støtte for de fleste statistiske metoder.

Grunnleggende 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 utvalgsformelen (n1n-1), så du trenger ikke huske noen ekstra parameter 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-funksjoner for statistikk
Beskrivende statistikk: mean(), median(), sd(), var(), summary(), quantile().

t-tester: t.test(x, y) — gir automatisk teststatistikk, p-verdi, konfidensintervall og frihetsgrader. Bruk paired=TRUE for paret t-test.

Kjikvadratstest: chisq.test(tabell) — tar en kontigenstabell 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, koeffisienter og p-verdier.

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

✏️Eksempel: Sammenligning av Python og R

Vis hvordan man utfører en paret t-test i både Python og R for følgende data: Før-målinger = [68, 72, 65, 70, 74] og etter-målinger = [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]

Tolkning: Begge gir t=5,292t = 5{,}292 og p=0,006p = 0{,}006. Med p<0,05p < 0{,}05 forkaster vi H0H_0 og konkluderer med at det er en statistisk signifikant endring fra før til etter.

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

📝Oppgave 2.6.2

Hvilken R-funksjon brukes for å utføre en lineær regresjonsanalyse?

Regneark for statistisk analyse

Regneark som Microsoft Excel og Google Sheets er de mest tilgjengelige verktøyene for statistisk analyse. De er spesielt nyttige for enklere analyser og for å bygge intuisjon om statistiske metoder.

Viktige funksjoner i regneark

FunksjonExcel/SheetsBeskrivelse
Gjennomsnitt=GJENNOMSNITT(A1:A10)Aritmetisk gjennomsnitt
Median=MEDIAN(A1:A10)Midtverdien
Standardavvik=STDAV(A1:A10)Utvalgsstandardavvik (n1n-1)
Varians=VARIANS(A1:A10)Utvalgsvarians (n1n-1)
Korrelasjon=KORRELASJON(A1:A10;B1:B10)Pearsons rr
Antall=ANTALL(A1:A10)Antall numeriske verdier
Min/Maks=MIN(A1:A10) / =MAKS(A1:A10)Minste/største verdi

t-test i regneark


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

Resultatet er p-verdien direkte.

Konfidensintervall i regneark


For å beregne feilmarginen i Excel:

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

Begrensninger ved regneark


- Vanskelig å reprodusere analyser systematisk
- Begrenset mulighet for avanserte metoder

- Lett å gjøre uoppdagede feil i formler

- Dårlig egnet for store datasett (> 10 000 rader)

Sammenligning av statistisk programvare
EgenskapPythonRRegneark
BrukervennlighetMiddelsMiddelsHøy
Statistisk dybdeHøySvært høyLav
VisualiseringSvært godSvært godGod
ReproduserbarhetSvært godSvært godLav
Store datasettJaJaBegrenset
GratisJaJaDelvis
Bruk i forskningVoksendeStandardSjelden

Anbefaling: Bruk regneark for raske, enkle analyser. Bruk Python for prosjekter med databehandling og programmering. Bruk R for ren statistisk analyse og forskning.
✏️Eksempel: Samme analyse i tre verktøy

Beregn gjennomsnitt, standardavvik og et 95 %-konfidensintervall for datasettet [18, 22, 25, 20, 24, 19, 23, 21] i Python, R og regneark.

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]

Regneark (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 samme resultat: snitt = 21,5, std = 2,33, 95 %-KI = [19,55, 23,45].

📝Oppgave 2.6.3

Hvilken regnearksformel gir utvalgsstandardavviket for data i cellene A1 til A20?

Oppsummering

- Python (med NumPy, SciPy, Pandas) er allsidig og kraftig — bruk ddof=1 for utvalgsstatistikk.
- R er designet for statistikk og gir den mest komplette støtten — sd() bruker automatisk n1n-1.
- Regneark (Excel/Google Sheets) er mest tilgjengelig og egner seg for enkle analyser — bruk STDAV() (ikke STDAVP()).
- Alle tre verktøyene kan utføre beskrivende statistikk, t-tester, korrelasjon, regresjon og konfidensintervaller.
- Reproduserbarhet er en viktig fordel med kode (Python/R) over regneark — analysen kan enkelt gjentas og kontrolleres.
- Velg verktøy ut fra oppgavens kompleksitet: regneark for kjappe beregninger, Python/R for seriøse analyser.

📝Oppgave 4

Du har samlet inn data om antall timer brukt på lekser per uke for to klasser:

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 beregner gjennomsnitt og standardavvik for begge klasser. (b) Skriv Python-kode som utfører en uavhengig t-test. (c) Vis hvordan den samme t-testen utføres i R. (d) Tolk resultatet ved α=0,05\alpha = 0{,}05.

📝Oppgave 5

En forsker vil undersøke sammenhengen mellom studietimer (xx) og eksamenspoeng (yy) for 6 studenter:

Studietimer24681012
Poeng505865727885

(a) Skriv Python-kode som beregner Pearsons rr og utfører lineær regresjon. (b) Vis tilsvarende analyse i R. (c) Skriv regnearksformler for korrelasjon og regresjon (anta data i A1:A6 og B1:B6). (d) Diskuter hvilke fordeler og ulemper hvert 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.