12  Statistikk i praksis

library(tidyverse)
library(gtsummary)
library(modelsummary)

Statistiske analyser innebærer å analysere data og vurdere usikkerhet. En kjerneoppgave er å sammenligne. Enten mellom grupper eller på ulike steder langs en kontinuerlig skala. Når vi sammenligner Usikkerheten i sammenligningen uttrykkes ved p-verdier og konfidensintervaller.

12.1 Deskriptiv statistikk

Når man har en tabell med deskriptiv statistikk fordelt på grupper, så gjør man jo en sammenligning av disse gruppene på de aktuelle variablene. Da kan man bare legge til en statistisk test for denne sammenligningen. I følgende eksempel brukes tbl_summary med tilhørende add_difference. I første omgang tar vi bare med kontinuerlige variable. Resultatet blir tilsvarende som i det tidligere kapittelet for deskriptiv statistikk, men her legges det til tre kolonner: forskjellen i gjennomsnitt, konfidensintervallet og p-verdi fra en \(t\)-test.^(Legg merke til fotnoten som spesifiserer “Welch two sample t-test”. Dette er den vanlig t-testen. Den opprinnelige “Student’s t-test” forutsetter lik varians i begge grupper, noe som Welch t-test ikke gjør. Vi kaller det bare for \(t\)-test. Dette bare til oppklaring.)

theme_gtsummary_mean_sd()
abu89 %>% 
  #select(-io_nr) %>%
  select(female, time89, ed,  fexp, age) %>% 
  mutate(female = ifelse(female == 0, "Menn", "Kvinner")) %>% 
    tbl_summary(by = female, 
                label = list(klasse89 = "Klasse"), 
              type = list(ed ~ "continuous"), 
              missing = "no") %>% 
  add_difference() 
Characteristic Kvinner, N = 1,9341 Menn, N = 2,1931 Difference2 95% CI2,3 p-value2
Gjennomsnittlig timelønn 1989 79 (24) 100 (32) -21 -23, -19 <0.001
År utdanning 2.38 (2.40) 2.96 (2.66) -0.58 -0.74, -0.43 <0.001
Bedriftserfaring 0.83 (0.81) 1.05 (0.97) -0.22 -0.27, -0.16 <0.001
Alder 40 (13) 40 (12) -0.17 -0.93, 0.58 0.7
1 Mean (SD)
2 Welch Two Sample t-test
3 CI = Confidence Interval

Legg merke til at kollonnen “Difference” er forskjellen i gjennomsnitt i de to gruppene, og konfidensintervallet gjelder for denne differansen. Den gjennomsnittlige forskjellen i timelønn for menn er altså 21 kroner høyere enn for kvinner, men når vi tar feilmarginen med i beregningen er det rimelig å si at den ligger mellom 19 og 23 kroner høyere for menn enn for kvinner, siden et 95% konfidensintervall tilsier det.

abu89 %>% 
  select(female, time89, ed,  fexp, age) %>% 
  mutate(female = ifelse(female == 0, "Menn", "Kvinner")) %>% 
    tbl_summary(by = female, 
                label = list(klasse89 = "Klasse"), 
              type = list(ed ~ "continuous"), 
              missing = "no") %>% 
  add_p() 
Characteristic Kvinner, N = 1,9341 Menn, N = 2,1931 p-value2
Gjennomsnittlig timelønn 1989 79 (24) 100 (32) <0.001
År utdanning 2.38 (2.40) 2.96 (2.66) <0.001
Bedriftserfaring 0.83 (0.81) 1.05 (0.97) <0.001
Alder 40 (13) 40 (12) 0.7
1 Mean (SD)
2 Welch Two Sample t-test

For kategoriske variable bruker man ikke en t-test, men en test som omtales som \(\chi^2\) test (uttales som “kji-kvadrat test”).1

abu89 %>% 
  select(female, klasse89, promot, private) %>% 
  mutate(female = ifelse(female == 0, "Menn", "Kvinner")) %>% 
    tbl_summary(by = female, 
                label = list(klasse89 = "Klasse"), 
              missing = "no") %>% 
  add_p() 
Characteristic Kvinner, N = 1,9341 Menn, N = 2,1931 p-value2
Klasse <0.001
    I Øvre serviceklasse 74 (3.9%) 254 (12%)
    II Nedre serviceklasse 555 (29%) 626 (29%)
    III Rutinefunksjonærer 986 (52%) 262 (12%)
    V-VI Faglærte arbeidere 46 (2.4%) 602 (28%)
    VIIa Ufaglærte arbeidere 244 (13%) 393 (18%)
Noen gang forfremmet <0.001
    NEI 1,308 (68%) 1,260 (57%)
    JA 626 (32%) 933 (43%)
Privat sektor <0.001
    Public 1,016 (53%) 586 (27%)
    Private 918 (47%) 1,607 (73%)
1 n (%)
2 Pearson’s Chi-squared test

Det kan også settes sammen i en felles tabell.

abu89 %>% 
  select(-io_nr) %>%
  mutate(female = ifelse(female == 0, "Menn", "Kvinner")) %>% 
    tbl_summary(by = female, 
                label = list(klasse89 = "Klasse"), 
              type = list(ed ~ "continuous"), 
              missing = "no") %>% 
  add_overall() %>% 
  add_p() 
Characteristic Overall, N = 4,1271 Kvinner, N = 1,9341 Menn, N = 2,1931 p-value2
Gjennomsnittlig timelønn 1989 90 (30) 79 (24) 100 (32) <0.001
År utdanning 2.69 (2.56) 2.38 (2.40) 2.96 (2.66) <0.001
Alder 40 (12) 40 (13) 40 (12) 0.7
Klasse <0.001
    I Øvre serviceklasse 328 (8.1%) 74 (3.9%) 254 (12%)
    II Nedre serviceklasse 1,181 (29%) 555 (29%) 626 (29%)
    III Rutinefunksjonærer 1,248 (31%) 986 (52%) 262 (12%)
    V-VI Faglærte arbeidere 648 (16%) 46 (2.4%) 602 (28%)
    VIIa Ufaglærte arbeidere 637 (16%) 244 (13%) 393 (18%)
Noen gang forfremmet <0.001
    NEI 2,568 (62%) 1,308 (68%) 1,260 (57%)
    JA 1,559 (38%) 626 (32%) 933 (43%)
Bedriftserfaring 0.95 (0.91) 0.83 (0.81) 1.05 (0.97) <0.001
Privat sektor <0.001
    Public 1,602 (39%) 1,016 (53%) 586 (27%)
    Private 2,525 (61%) 918 (47%) 1,607 (73%)
1 Mean (SD); n (%)
2 Welch Two Sample t-test; Pearson’s Chi-squared test

12.2 Regresjon

For regresjon er det i prinsippet det samme: regresjonskoeffisientene er estimater med usikkerhet som uttrykkes med standardfeil og tilhørende konfidenstintervaller og p-verdier. Merk at p-verdiene er resultat av en helt ordinær t-test:

\[ t = \frac{\beta}{se_\beta} \]

Husk at \(\beta\) er et estimat på en forskjell mellom grupper eller nivåer på en kontinuerlig variabel. Tolkningen er derfor lik som for t-test: kan denne forskjellen skyldes tilfeldig variasjon? Eller er forskjellen såpass stor i forhold til feilmarginen at vi velger å tolke det som en systematisk forskjell? Hvis p-verdien er høy (typisk: større enn 0.05), så er vi ikke tilstrekkelig sikker på at det ikke bare er tilfeldig støy.

lm_est1 <- lm(time89 ~ female , data = abu89)
modelsummary(lm_est1)
 (1)
(Intercept) 99.844
(0.637)
female -20.752
(0.932)
Num.Obs. 3759
R2 0.117
R2 Adj. 0.116
AIC 35854.9
BIC 35873.6
Log.Lik. -17924.434
F 496.278
RMSE 28.49

12.2.1 Multippel regresjon

lm_est2 <- lm(time89 ~ female + age , data = abu89)
modelsummary(lm_est2)
 (1)
(Intercept) 81.101
(1.585)
female -20.625
(0.912)
age 0.474
(0.037)
Num.Obs. 3759
R2 0.154
R2 Adj. 0.153
AIC 35694.9
BIC 35719.8
Log.Lik. -17843.437
F 341.699
RMSE 27.88

12.2.2 Interaksjonsledd

lm_est3 <- lm(time89 ~ female + age + female * age , data = abu89)
modelsummary(lm_est3)
 (1)
(Intercept) 75.854
(2.126)
female -9.905
(3.040)
age 0.606
(0.051)
female × age -0.272
(0.074)
Num.Obs. 3759
R2 0.157
R2 Adj. 0.156
AIC 35683.2
BIC 35714.4
Log.Lik. -17836.611
F 233.121
RMSE 27.83
modelsummary(list(lm_est1, lm_est2, lm_est3))
 (1)   (2)   (3)
(Intercept) 99.844 81.101 75.854
(0.637) (1.585) (2.126)
female -20.752 -20.625 -9.905
(0.932) (0.912) (3.040)
age 0.474 0.606
(0.037) (0.051)
female × age -0.272
(0.074)
Num.Obs. 3759 3759 3759
R2 0.117 0.154 0.157
R2 Adj. 0.116 0.153 0.156
AIC 35854.9 35694.9 35683.2
BIC 35873.6 35719.8 35714.4
Log.Lik. -17924.434 -17843.437 -17836.611
F 496.278 341.699 233.121
RMSE 28.49 27.88 27.83

  1. Denne gir identisk resultat som z-test for andeler.↩︎