Python, R og regneark for statistisk analyse.
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å ), ikke populasjonsformelen (deler på ). 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.0030Konfidensintervall 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]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.
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.
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, MaxFordel med R: Funksjonen sd() bruker automatisk utvalgsformelen (), 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.002Korrelasjon 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.997mean(), 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 , koeffisienter og p-verdier.
Visualisering: hist(), boxplot(), plot(), eller bruk ggplot2-pakken for avanserte figurer.
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].
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.0061I 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 og . Med forkaster vi 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.
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
| Funksjon | Excel/Sheets | Beskrivelse |
|---|---|---|
| Gjennomsnitt | =GJENNOMSNITT(A1:A10) | Aritmetisk gjennomsnitt |
| Median | =MEDIAN(A1:A10) | Midtverdien |
| Standardavvik | =STDAV(A1:A10) | Utvalgsstandardavvik () |
| Varians | =VARIANS(A1:A10) | Utvalgsvarians () |
| Korrelasjon | =KORRELASJON(A1:A10;B1:B10) | Pearsons |
| 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)
| Egenskap | Python | R | Regneark |
|---|---|---|---|
| Brukervennlighet | Middels | Middels | Høy |
| Statistisk dybde | Høy | Svært høy | Lav |
| Visualisering | Svært god | Svært god | God |
| Reproduserbarhet | Svært god | Svært god | Lav |
| Store datasett | Ja | Ja | Begrenset |
| Gratis | Ja | Ja | Delvis |
| Bruk i forskning | Voksende | Standard | Sjelden |
Anbefaling: Bruk regneark for raske, enkle analyser. Bruk Python for prosjekter med databehandling og programmering. Bruk R for ren statistisk analyse og forskning.
Beregn gjennomsnitt, standardavvik og et 95 %-konfidensintervall for datasettet [18, 22, 25, 20, 24, 19, 23, 21] i Python, R og regneark.
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].
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 .
- 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.
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 .
En forsker vil undersøke sammenhengen mellom studietimer () og eksamenspoeng () for 6 studenter:
| Studietimer | 2 | 4 | 6 | 8 | 10 | 12 |
|---|---|---|---|---|---|---|
| Poeng | 50 | 58 | 65 | 72 | 78 | 85 |
(a) Skriv Python-kode som beregner Pearsons 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.