[ Home | Vorige | Volgende ]

Het voorbeeld van §7.1 is aan de simpele kant: meestal doen we meer dan één meting per proefpersoon.

Stel je voor dat we 6 native speakers hebben en 4 heritage speakers, en die worden allemaal 20 keer getoetst. Hier zijn hun scores correct:

taal = c(rep ("NS", 6), rep ("HS", 4))
correct = c(10, 15, 14, 17, 16, 18, 9, 8, 7, 10)
tabel = data.frame (taal, correct)
tabel
##    taal correct
## 1    NS      10
## 2    NS      15
## 3    NS      14
## 4    NS      17
## 5    NS      16
## 6    NS      18
## 7    HS       9
## 8    HS       8
## 9    HS       7
## 10   HS      10

Als we willen weten of de native speakers beter zijn dan de heritage speakers, zijn we gewend een t-toets te doen:

options (digits = 7)
t.test (formula = correct ~ taal, data = tabel, var.equal=T)
## 
##  Two Sample t-test
## 
## data:  correct by taal
## t = -4.2458, df = 8, p-value = 0.002815
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -10.030333  -2.969667
## sample estimates:
## mean in group HS mean in group NS 
##              8.5             15.0

Ofwel een lineaire regressie:

summary (lm (formula = correct ~ taal, data = tabel))
## 
## Call:
## lm(formula = correct ~ taal, data = tabel)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -5.000 -0.875  0.250  1.375  3.000 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    8.500      1.186   7.168 9.54e-05 ***
## taalNS         6.500      1.531   4.246  0.00282 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.372 on 8 degrees of freedom
## Multiple R-squared:  0.6926, Adjusted R-squared:  0.6542 
## F-statistic: 18.03 on 1 and 8 DF,  p-value: 0.002815

Maar het kan beter, want de afhankelijke variabele is niet normaal maar binomiaal verdeeld.

Ook hier kunnen we een logistische regressie doen. We kunnen een lange tabel maken met 200 nullen en enen, maar ook kunnen we het aantal correct geaggregeerd gebruiken, zoals in bovenstaande tabel. We moeten dan wel ook nog het aantal fouten in de tabel zetten:

tabel$fout = 20 - tabel$correct
tabel
##    taal correct fout
## 1    NS      10   10
## 2    NS      15    5
## 3    NS      14    6
## 4    NS      17    3
## 5    NS      16    4
## 6    NS      18    2
## 7    HS       9   11
## 8    HS       8   12
## 9    HS       7   13
## 10   HS      10   10

De NS-groep heeft gemiddeld 15 goed en 5 fout, dus een odds van 3, de HS-groep heeft gemiddeld 8.5 goed en 11.5 fout, dus een odds van 8.5/11.5 = 0.73913. De odds ratio tussen NS en HS is dus 3/0.73913 = 4.05882 (en tussen HS en NS is die het omgekeerde: 0.73913/3 = 0.24638). De nulhypothese is dat NS en HS niet verschillen, dus dat hun odds ratio 1 is. De vraag is nu: verschilt deze 4.05882 significant van 1?

We kunnen de tabel niet rechtstreeks met glm analyseren, want R weet niet dat de data in elke rij van precies één proefpersoon komen: R zou de alle aantallen correct van de NS-groep bij elkaar gooien (“poolen”) en die van de NS-groep ook. Het moet dus anders, en wel door in de tabel aan te geven hoe de data over proefpersonen verdeeld zijn:

tabel$proefpersoon = LETTERS [1:10]
tabel
##    taal correct fout proefpersoon
## 1    NS      10   10            A
## 2    NS      15    5            B
## 3    NS      14    6            C
## 4    NS      17    3            D
## 5    NS      16    4            E
## 6    NS      18    2            F
## 7    HS       9   11            G
## 8    HS       8   12            H
## 9    HS       7   13            I
## 10   HS      10   10            J

Nu gebruiken we de super-duper functie glmer uit de bibliotheek lme4 (als je die niet hebt, dan downloaden via Packages -> Install):

library (lme4)
## Warning: package 'lme4' was built under R version 3.2.3
## Loading required package: Matrix
model = glmer (cbind (correct, fout) ~ taal + (1 | proefpersoon),
               data = tabel, family = "binomial")
summary (model)
## Generalized linear mixed model fit by maximum likelihood (Laplace
##   Approximation) [glmerMod]
##  Family: binomial  ( logit )
## Formula: cbind(correct, fout) ~ taal + (1 | proefpersoon)
##    Data: tabel
## 
##      AIC      BIC   logLik deviance df.resid 
##     49.5     50.4    -21.7     43.5        7 
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.3530 -0.4164  0.0994  0.5822  1.4540 
## 
## Random effects:
##  Groups       Name        Variance Std.Dev.
##  proefpersoon (Intercept) 0.0204   0.143   
## Number of obs: 10, groups:  proefpersoon, 10
## 
## Fixed effects:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)   -0.304      0.238   -1.28      0.2    
## taalNS         1.408      0.326    4.32  1.6e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##        (Intr)
## taalNS -0.733

Dat met die 1 en dat pijpje (“|”) is abracadabra; het betekent dat de logistische regressie per proefpersoon een odds moet schatten. We zien dat de standaardafwijking tussen proefpersonen hier op 0.143 geschat wordt.

De p-waarde is klein (een factor 200 beter dan wanneer we lineaire regressie op dit probleem toepassen). Native speakers maken minder fouten dan heritage speakers.

Puntschatting van de effectgrootte. We willen nu een schatting maken van de effectgrootte: hoeveel beter zijn native speakers dan heritage speakers? Het getal 1.4077 (de puntschatting van de coëfficiënt van de factor taal in het model) betekent dat het model schat dat native speakers exp(1.4077) = 4.0864 keer zo goed zijn als heritage speakers. Dit is niet precies de odds ratio tussen NS en HS die we boven met de hand uitrekenden, maar zit er wel in de buurt.

Betrouwbaarheidsinterval van de effectgrootte. De schatting van 4.0864 is maar één getal; de ware odds ratio tussen NS en LS kan hoger of lager zijn. Om te kijken met welke ware odds ratios de geobserveerde data compatibel zijn, berekenen we het betrouwbaarheidsinterval van de coëfficiënt van de factor taal:

model = glmer (formula = cbind (correct, fout) ~ taal + (1 | proefpersoon),
               data = tabel, family = "binomial")
confint (model)
## Computing profile confidence intervals ...
##               2.5 % 97.5 %
## .sig01       0.0000 0.7323
## (Intercept) -0.8521 0.2272
## taalNS       0.7308 2.1804

Het 95%-betrouwbaarheidsinterval van de coëfficiënt van taal loopt dus van 0.7308 tot 2.1804, dus het 95%-betrouwbaarheidsinterval van de odds ratio tussen NS en HS loopt van exp(0.7308) = 2.1 tot exp(2.1804) = 8.8. Dit interval ligt in zijn geheel boven de 1, maar dat wisten we al, want de schatting van 4.0864 lag significant boven de 1 (p < 0.05).

[ Home | Vorige | Volgende ]