library(tidyverse)
library(gtsummary)
library(modelsummary)
12 Statistikk i praksis
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(time89 ~ female , data = abu89)
lm_est1 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(time89 ~ female + age , data = abu89)
lm_est2 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(time89 ~ female + age + female * age , data = abu89)
lm_est3 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 |
Denne gir identisk resultat som z-test for andeler.↩︎