Jacob Liljehult
Klinisk sygeplejespecialist
cand.scient.san, Ph.d.
Neurologisk afdeling
Nordsjællands Hospital
I mange tilfælde kan konfidensintervaller udregnes ved hjælp af andre funktioner og kan derefter hentes fra deres output:
Konfidensintervallet for en kontinuert variabel kan udregnes fra en t-test, hvor funktionen t.test()
bruges til at lave en one-sample t-test imod variables eget gennemsnit. Selve konfidensintervallet ekstraheres fra
funktionen ved at sætte post-fixet $conf.int[1:2]
efter funktionen -
således at syntaksen bliver t.test(x, mu = mean(x))$conf.int[1:2]
mean(strokedata$age)
t.test(strokedata$age, mu = mean(strokedata$age))$conf.int[1:2]
[1] 10.03
[1] 9.682921 10.377079
For at udregne konfidensintervallet for en proportion kan man både bruge funktionerne binom.test()
og prop.test()
. Resultaterne vil ikke være helt ens, men vil oftest være meget til på hinanden,
så det gør ikke den store forskel hvilken funktion man bruger. Til forskel fra Wald konfidensintervaller risikerer
man ikke med nogle af metoderne at intervallet strækker sig under 0 eller over 1.
Hvis 75 ud af 100 personer (75%) er mænd kan proportion og konfidensinterval udregnes således:
Exact konfidensinterval
binom.test(x, n, conf.level = 0.95)$estimat
binom.test(x, n, conf.level = 0.95)$conf.int[1:2]
binom.test(75, 100, conf.level = 0.95)$estimat
binom.test(75, 100, conf.level = 0.95)$conf.int[1:2]
probability of success
0.75
[1] 0.6534475 0.8312203
prop.test(x, n, conf.level = 0.95)$estimat
prop.test(x, n, conf.level = 0.95)$conf.int[1:2]
prop.test(75, 100, conf.level = 0.95)$estimat
prop.test(75, 100, conf.level = 0.95)$conf.int[1:2]
p
0.75
[1] 0.6516159 0.8288245
Hvis en variable har flere niveauer kan det blive lidt omstændigt at udregne konfidensintervaller for hver proportion
for sig selv. En måde at lette arbejdet lidt er at bruge pakken {dplyr}
til først at udregne antal og
procenter for hvert niveau og derefter til at udregne konfidensgrænserne for hver linje. Med {dplyr}
kan man lave sekvenser af funktioner, der forbindes fremadrettet med en pipe (%>%
); i udregningen
nedenunder defineres først datasættet strokedata, hvorefter funktionen group_by
bruges til at definere
at alle udregninger fremadrettet skal stratificeres med variablen smoking; dernæst bruges funktionen
summarise()
til at udregne antallet i hvert strate og funktionen mutate()
til at
lave to nye udregner af totalen for alle strata og procent for hvert strata. Outputtet er en tabel i formattet
tibble
, som man via dplyr
kan tilføje flere udregninger. Hvis man vil lave udregninger for
hver linje i tabellen kan man indsætte funktionen rowwise()
og derefter funktionen
mutate()
hvor der kan indsættes funktioner eller formler til at lave nye udregninger - i dette tilfælde
binom.test()$conf.int[]
.
library(dplyr)
d.smoke = strokedata %>% # filter(!is.na(smoking)) %>%
group_by(smoking) %>%
summarise(n = n()) %>%
mutate(total = sum(n), percent = n/total*100)
d.smoke = d.smoke %>%
rowwise() %>%
mutate(ci.lwr = binom.test(n,total,conf.level = 0.95)$conf.int[1]*100,
ci.upr = binom.test(n,total,conf.level = 0.95)$conf.int[2]*100)
d.smoke
smoking | n | total | percent | ci.lwr | ci.upr |
---|---|---|---|---|---|
<fctr> | <int> | <int> | <dbl> | <dbl> | <dbl> |
Current | 299 | 1031 | 29.000970 | 26.245890 | 31.876494 |
Never | 384 | 1031 | 37.245393 | 34.285835 | 40.278008 |
Previous | 316 | 1031 | 30.649855 | 27.845747 | 33.564910 |
NA | 32 | 1031 | 3.103783 | 2.132472 | 4.353531 |
Konfidensgrænser for henholdsvis Exact og Wilson konfidensintervaller for proportioner ved populationsstørrelserne 10, 20 og 40. Konfidensgrænserne ved begge metoder ligger tæt på hinanden og ved n=40 er de næsten ens.
Referenceintervaller for normalværdier kan udregnes på baggrund af en variabel med funktionen
qnorm(c( 0.5±( (1-αz)/2) ), mean(x), sd(x))
,
hvor x er variablen
Eksempel med 95% (α = 0.05) referenceinterval for alder i strokedata (0.5±( (1-0.05)/2) ) = 0.025; 0.975 )
qnorm(c(0.025, 0.975), mean(strokedata$age), sd(strokedata$age))
[1] 47.50168 96.19958