3 Deskriptiv statistik
3.1 Mean, median, SD and quantiles
Eksempel: Vitamin D (uge 1)
Se kapitel 6.2 i Descriptive analysis i R-intro (herunder brug af funktionen tapply til at lave beregninger gruppevist).
F.eks.
tapply( vit$vitd, vit$country, mean)
DK SF EI PL
47.17 47.99 48.01 32.56
Teknisk: Vil du have det i en fin tabel a la mine slides kan du benytte min funktion sumStat()
(se evt kapitel om at definere egne funktioner). Kopier først denne funktion ind i R
<- function(x){
sumStat =length(x)
ntotal=ntotal-table(is.na(x))[1] # antal manglende vaerdier
nmiss=ntotal-nmiss # antal med observerede vaerdier
n=mean(x,na.rm=T)
mean=median(x,na.rm=T)
median=quantile(x, probs=.25,na.rm=T)
Q1=quantile(x, probs=.75,na.rm=T)
Q3=sd(x,na.rm=T)
SD=min(x,na.rm=T)
min=max(x,na.rm=T)
max<- data.frame(n,nmiss,mean,median,SD, Q1,Q3,min,max)
samlet row.names(samlet) <- NULL
return( samlet )
}
Dernæst kan vi udføre beregningerne enten for et land af gangen (her Irland)
sumStat( vitEI$vitd )
n nmiss mean median SD Q1 Q3 min max
1 41 0 48.01 44.8 20.22 34.4 62.7 17 110.4
eller for alle 4 lande på en gang
<- tapply(vit$vitd,vit$country,sumStat)
tx tx
$DK
n nmiss mean median SD Q1 Q3 min max
1 53 0 47.17 47.8 22.78 27.6 61.8 11.4 93.6
$SF
n nmiss mean median SD Q1 Q3 min max
1 54 0 47.99 46.6 18.72 35.52 60.9 5.2 96.6
$EI
n nmiss mean median SD Q1 Q3 min max
1 41 0 48.01 44.8 20.22 34.4 62.7 17 110.4
$PL
n nmiss mean median SD Q1 Q3 min max
1 65 0 32.56 32.5 12.46 25 39.9 5.4 60.3
Teknisk: Vi kan klistre linjerne sammen ved at kalde rbind
(RowBIND):
do.call('rbind', tx)
n nmiss mean median SD Q1 Q3 min max
DK 53 0 47.17 47.8 22.78 27.60 61.8 11.4 93.6
SF 54 0 47.99 46.6 18.72 35.52 60.9 5.2 96.6
EI 41 0 48.01 44.8 20.22 34.40 62.7 17.0 110.4
PL 65 0 32.56 32.5 12.46 25.00 39.9 5.4 60.3
3.2 Fraktiler
Eksempel: Vitamin D (irske kvinder, uge 1)
2.5 og 97.5%-fraktiler
quantile( vitEI$vitd, probs = c(.025,.975) )
2.5% 97.5%
18.0 89.1
Vi kan evt tvinge R til at beregne dem på samme måde som i SAS/SPSS, hvor der benyttes en interpolation mellem de observerede værdier (ekstra argument type=6
, der findes 9 forskellige typer at beregne fraktiler på i R …):
quantile( vitEI$vitd, probs = c(.025,.975), type=6 )
2.5% 97.5%
17.05 109.33
3.2.1 Bestemmelse af fraktiler i t-fordelingen
Hertil benyttes qt()
(Quantiles T-distribution). Øvre 2.5%-fraktil med 40 frihedsgrader bestemmes som:
qt( 0.975, df=40 )
[1] 2.021
3.3 Tabellering
Eksempel: Vitamin D (irske kvinder, uge 1)
Ønsker vi at vide hvor mange der har e.g. Vitamin D niveau under 25 laver vi en tabel delt op på om Vitamin D er over eller under 25:
<- table( vitEI$vitd < 25 )
tab tab
FALSE TRUE
36 5
Vi får en tabel med TRUE
/FALSE
, hvor TRUE
angiver antallet med vitd
<25 (her 5 kvinder).
Vi bestemmer andelen af kvinder med Vitamin D under 25 til 12%:
prop.table( tab )
FALSE TRUE
0.878 0.122
3.4 Konfidensintervaller
3.4.1 CI for et gennemsnit
Beregnes enten i hånden ud fra formlen
\[ \bar Y \pm q_{0.975}\times \frac{\rm SD}{\sqrt{n}} \] hvor \(q_{0.975}\) er 97.5%-fraktilen i en t-fordeling med \(n-1\) frihedsgrader (se hvordan du bestemmer den i afsnit 3.2.1 ovenfor).
Eller den smarte løsning: Lav et one-sample t-test, så får du automatisk gennemsnit og CI ud (se kap 4.1)
3.4.2 CI for en spredning
Hertil benyttes pakken TeachingDemos
som først installeres
# Denne linje skal kun køres en gang
install.packages("TeachingDemos")
og nu bestemmes CI for spredningen på vitamin D for de danske kvinder:
library(TeachingDemos)
sigma.test( vitDK$vitd )
One sample Chi-squared test for variance
data: vitDK$vitd
X-squared = 26991, df = 52, p-value <2e-16
alternative hypothesis: true variance is not equal to 1
95 percent confidence interval:
365.7 794.6
sample estimates:
var of vitDK$vitd
519.1
Vi får her variansen (spredningen\(^2\)) incl CI for, så vi skal tage kvadratrod for at få spredningen (se evt anvendelsen i forelæsningsscript uge 2).
Bemærk at vi yderst sjældent (som i aldrig!?) er interesseret i test af specifik værdi for spredningen (default er hypotesen \(H_0: \sigma=1,\) kan ændres med ekstra argument sigma=2
for at teste at spredningen er 2). Dvs i output ovenfor vil vi typisk kun aflæse CI.