Python, R og regneark for statistisk analyse.
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å ), ikkje populasjonsformelen (deler på ). 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.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 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.
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.
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, MaxFordel med R: Funksjonen sd() bruker automatisk utvalsformelen (), 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.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-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 , koeffisientar og p-verdiar.
Visualisering: hist(), boxplot(), plot(), eller bruk ggplot2-pakken for avanserte figurar.
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].
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]Tolking: Begge gir og . Med forkastar vi 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.
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
| Funksjon | Excel/Sheets | Beskriving |
|---|---|---|
| Gjennomsnitt | =GJENNOMSNITT(A1:A10) | Aritmetisk gjennomsnitt |
| Median | =MEDIAN(A1:A10) | Midtverdien |
| Standardavvik | =STDAV(A1:A10) | Utvalsstandardavvik () |
| Varians | =VARIANS(A1:A10) | Utvalsvarians () |
| Korrelasjon | =KORRELASJON(A1:A10;B1:B10) | Pearsons |
| 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)
| Eigenskap | Python | R | Rekneark |
|---|---|---|---|
| Brukarvennlegheit | Middels | Middels | Høg |
| Statistisk djupne | Høg | Svært høg | Låg |
| Visualisering | Svært god | Svært god | God |
| Reproduserbarheit | Svært god | Svært god | Låg |
| Store datasett | Ja | Ja | Avgrensa |
| Gratis | Ja | Ja | Delvis |
| Bruk i forsking | Veksande | Standard | Sjeldan |
Tilråding: Bruk rekneark for raske, enkle analysar. Bruk Python for prosjekt med databehandling og programmering. Bruk R for rein statistisk analyse og forsking.
Rekn ut gjennomsnitt, standardavvik og eit 95 %-konfidensintervall for datasettet [18, 22, 25, 20, 24, 19, 23, 21] i Python, R og rekneark.
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].
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 .
- 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.
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 .
Ein forskar vil undersøkje samanhengen mellom studietimar () og eksamenspoeng () for 6 studentar:
| Studietimar | 2 | 4 | 6 | 8 | 10 | 12 |
|---|---|---|---|---|---|---|
| Poeng | 50 | 58 | 65 | 72 | 78 | 85 |
(a) Skriv Python-kode som reknar ut Pearsons 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.