-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathh08frequenties.Rmd
336 lines (272 loc) · 17.7 KB
/
h08frequenties.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
# (PART\*) Deel II: Beschrijvende statistiek {-}
# Frequenties {#ch-frequenties}
## Inleiding
Bij de analyse van gegevens wordt vaak een onderscheid gemaakt tussen
kwalitatieve danwel kwantitatieve methoden. Bij de eerste methode worden
waarnemingen (bijv. antwoorden in interviews) gerepresenteerd in
woorden, en bij de tweede methode worden waarnemingen (bijv.
spreekpauzes in interviews) gerepresenteerd in getallen. Naar onze
mening bestaat het verschil tussen kwalitatieve en kwantitatieve
methoden dus uit de aard van de representatie van de observaties, en
daarmee uit de wijze van argumentatie op grond van die observaties. Soms
is het ook mogelijk om dezelfde gegevens (bijv. interviews) zowel
kwalitatief als kwantitatief te analyseren. De kwantitatieve methode
heeft als grote voordelen dat de gegevens relatief eenvoudig samengevat
kunnen worden (daarover gaat dit deel van het tekstboek), en dat het
relatief makkelijk is om zinvolle conclusies te trekken op basis van de
observaties.
## Frequenties {#sec:frequenties}
Kwantitatieve gegevens kunnen op allerlei manieren gerapporteerd worden.
De eenvoudigste manier zou zijn om de ruwe gegevens te rapporteren, bij
voorkeur gesorteerd naar de waarde van de geobserveerde variabele.
Nadeel daarvan is dat een eventueel patroon in de observaties niet goed
zichtbaar wordt.
---
> *Voorbeeld 8.1*: Studenten $(N=50)$ in een eerstejaars
cursus rapporteerden de volgende waarden voor hun schoenmaat, een
variabele van het interval-meetniveau:\
36, 36, 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39,
39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 40, 40, 40,
40, 40, 40, 41, 41, 41, 41, 41, 42, 42, 43, 43, 44, ??.\
Eén van de studenten heeft geen antwoord opgegeven; dit ontbrekende
antwoord is hier aangegeven als ??.
---
Meestal is het inzichtelijker en efficiënter om de observaties samen te
vatten en te rapporteren in de vorm van de *frequentie* van elke waarde.
Die frequentie geeft het *aantal* observaties met een bepaalde waarde,
of met een waarde in een bepaald interval of klasse. Om de frequentie te
verkrijgen *tellen* we dus het aantal observaties met een bepaalde
waarde, of het aantal observaties in een bepaald interval. Deze
frequenties worden gerapporteerd in een tabel. Zo'n tabel wordt een
frequentieverdeling genoemd (frequency distribution).
Tabel \@ref(tab:klankfreq) geeft als eerste voorbeeld een
frequentieverdeling van een discrete variabele van *nominaal*
meetniveau, nl. de fonologische klasse van spraakklanken in het
Nederlands [@LKCG07].
```{r klankfreq, echo=FALSE}
klankfreq <- read.table( file="data/klankfreq.txt", header=T )
# print(klankfreq)
knitr::kable( klankfreq,
booktabs=TRUE,
label="klankfreq",
caption="Frequentieverdeling
van fonologische klasse van spraakklanken
in het *Corpus Gesproken Nederlands*
(C=consonant=medeklinker, V=vocaal=klinker)." )
```
Tabel \@ref(tab:schoenmaat) geeft als tweede voorbeeld een
frequentieverdeling van een continue variabele van *interval*
meetniveau, nl. de al eerder genoemde schoenmaat van eerstejaars
studenten (Voorbeeld 8.1).
Table: (#tab:schoenmaat) Frequentieverdeling van zelfgerapporteerde schoenmaten
van $N=50$ studenten in een eerstejaars cursus (zie
Voorbeeld 8.1 hierboven).
------------ ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
Schoenmaat 36 37 38 39 40 41 42 43 44 ??
Aantal 2 6 6 19 6 5 2 2 1 1
------------ ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
Als een numerieke variabele heel veel verschillende waarden kan
aannemen, dan wordt de frequentieverdeling op deze manier toch groot en
onoverzichtelijk. We voegen dan waarden in een bepaald interval bij
elkaar, en maken daarna een frequentieverdeling over dat geringere
aantal intervallen of klassen.
---
> *Voorbeeld 8.2*: Toen Koningin Beatrix voor het laatst de Troonrede voorlas,
op 18 september 2012, pauzeerde ze daarbij $305\times$. De frequentieverdeling
van de duur van de pauze (gemeten in seconden) is weergegeven in
Tabel \@ref(tab:troonrede2012pauzes).
---
Table: (#tab:troonrede2012pauzes) Frequentieverdeling van de duren van spreekpauzes (in seconden) in de Troonrede van 18 september 2012, voorgelezen door Koningin Beatrix $(N=305)$.
Interval Aantal
------------ --------
4.50--4.99 1
4.00--4.49 0
3.50--3.99 2
3.00--3.49 7
2.50--2.99 4
2.00--2.49 25
1.50--1.99 32
1.00--1.49 16
0.50--0.99 67
0.00--0.49 151
### Intervallen {#sec:intervallen}
Voor een variabele van nominaal en ordinaal meetniveau gebruiken we
doorgaans de oorspronkelijke categorieën om de frequentieverdeling te
maken (zie Tabel \@ref(tab:klankfreq)), al is het wel mogelijk om categorieën samen
te voegen. Voor een variabele van interval- of ratio-meetniveau kan een
onderzoeker zelf het aantal intervallen in de frequentieverdeling
kiezen. Soms is dat niet nodig, bijvoorbeeld omdat de variabele een
overzichtelijk aantal verschillende discrete waarden heeft (zie
Tabel \@ref(tab:schoenmaat)). Maar soms sta je als onderzoeker
voor de keuze hoeveel intervallen te onderscheiden, en hoe de grenzen
van die intervallen te bepalen (zie Tabel \@ref(tab:troonrede2012pauzes)).
Daarbij gelden dan de volgende aanbevelingen [@Ferg89, Ch.2]:
- Zorg dat alle observaties (d.w.z. het gehele bereik) vallen binnen
ruwweg 10 tot 20 intervallen.
- Zorg dat alle intervallen even breed zijn.
- Laat de ondergrens van het eerste of tweede interval samenvallen met
de breedte van de intervallen (zie
Tabel \@ref(tab:troonrede2012pauzes): ieder interval is 0.50 s
breed, en de ondergrens van het tweede interval is ook 0.50).
- Orden de intervallen in een frequentieverdeling van beneden naar
boven in toenemende volgorde (d.i. van boven naar beneden in
afnemende volgorde, Eng. descending), zie
Tabel \@ref(tab:troonrede2012pauzes)).
Naarmate we de intervallen breder maken, verliezen we meer informatie
over de precieze verdeling binnen elk interval.
### SPSS
```
Analyze > Descriptive Statistics > Frequencies...
```
Selecteer variabele (sleep naar paneel "Variable(s)").\
Vink aan: `Display frequency tables`.\
Kies `Format`, kies: `Order by: Descending values`.\
Bevestig met `OK`.\
### JASP
Klik in de bovenbalk op `Descriptives`. Selecteer vervolgens de gewenste variabele(n) en plaats ze in het veld "Variables". Vink `Frequency tables (nominal and ordinal variables)` (onder het veld met alle variabelen) aan om voor alle geselecteerde variabelen van nominaal en ordinaal meetniveau een frequentietabel als uitvoer te krijgen.\
Mocht een variabele als meetniveau "Scale" hebben en je wilt hiervan een frequentietabel, dan moet je eerst het meetniveau aanpassen naar "Nominal" of "Ordinal" door in het data tabblad op het meetniveau-icoontje voor de naam van de variabele te klikken.
Een variabele van interval of ratio meetniveau kan ook eerst worden opgedeeld in een aantal intervallen. Dit doe je door een nieuwe variabele aan te maken waarbij de originele scores worden omgezet in een interval. Maak de nieuwe variabele aan door op de **+**-button te klikken rechts van de naam van de laatste kolom in de dataset. Er verschijnt een paneel "Create Computed Column", waar je een naam voor de nieuwe variabele kunt invullen, bijvoorbeeld `troon12_interval`. Ook kun je kiezen uit `R` en een aanwijshandje. Dit zijn de twee opties in JASP om formules te definiëren waarmee de nieuwe (lege) variabele wordt gevuld; met R code of handmatig. Hieronder wordt voor allebei de opties uitgelegd hoe we hiermee de variabele met intervallen maken. Als laatste kun je aanvinken welk meetniveau de variabele moet krijgen; dat is in dit geval "Ordinal". Klik vervolgens op `Create Column` om de nieuwe variabele aan te maken. De nieuwe variabele (kolom) verschijnt als meest rechtse in de data en is nog leeg.
Als `R` is aangeklikt als optie om de nieuwe variabele te definiëren, verschijnt er boven de data een veld met "#Enter your R code here :)". Hier kan R code worden gegeven die met behulp van R functies de nieuwe variabele definieert. Vul de R code in en klik onderaan op `Compute column` om de lege variabele te vullen met de gekozen waardes.\
Om de variabele 'troon2012' op te delen zoals in Tabel \@ref(tab:troonrede2012pauzes) kan de volgende code worden gebruikt:
```
cut(troon2012, breaks = seq(0, 5, 0.5))
```
Hiermee worden de duren van de spreekpauzes van Koningin Beatrix in de Troonrede van 2012 opgedeeld in intervallen van halve seconden (0.5 = breedte interval), en alle intervallen samen lopen van 0 (ondergrens eerste interval) tot 5 (bovengrens laatste interval) seconden. Als je niet precies de breedte en het totale bereik van de intervallen wil bepalen, maar een x aantal gelijke intervallen wilt, kan de volgende code worden gebruikt:
```
cut(troon2012, 10)
```
Hiermee worden de scores opgedeeld in 10 even brede intervallen, waarbij de ondergrens van het eerste interval gelijk is aan de laagste score die er was, en de bovengrens van het laatste interval is gelijk aan de hoogste score die er was.
Als het aanwijshandje is aangeklikt als optie om de nieuwe variabele te definiëren, verschijnt er boven de data een veld met links daarvan de variabelen, boven wiskundige symbolen, en rechts een aantal functies. Hier kan handmatig de functie worden geselecteerd die de nieuwe variabele definieert. Klik onderaan op `Compute column` om de lege variabele vervolgens te vullen met de gekozen waardes.\
Om een variabele op te delen in een aantal gelijke intervallen selecteer je rechts de functie `cut(y)`. Sleep de variabele die je wilt opdelen naar "values" en typ het aantal intervallen dat je wilt op de plek van "numBreaks". Om zelf de breedte en het totale bereik van de intervallen te bepalen zul je de R code optie moeten gebruiken (hierboven beschreven).
Voor de nieuwe variabele opgedeeld in intervallen kan de frequentietabel worden verkregen zoals helemaal bovenaan beschreven. Ga naar `Descriptives`, selecteer de gewenste variabele (`troon12_interval`) in het veld "Variables" en vink `Frequency tables (nominal and ordinal variables)` (onder het veld met alle variabelen) aan.
### R
```{r schoenmaat02, eval=FALSE}
enq2011 <- read.table(
file=url("http://www.hugoquene.nl/R/enq2011.txt"),
header=TRUE )
table( enq2011$schoen, useNA="ifany" )
```
De uitvoer van bovenstaande `table` commando is weergegeven in Tabel \@ref(tab:schoenmaat).
De code `NA` (Not Available) wordt in R gebruikt om ontbrekende gegevens aan te duiden.
```{r troonredes2012-1}
# lees dataset
load(file="data/pauses6.Rda")
# haal daaruit pauzeduren (kolom 12) voor jaar 2012, in aparte variabele `troon2012`
troon2012 <- pauses6[ pauses6$jaar==2012, 12 ] # save col_12 as single vector
```
```{r troonredes2012-2, eval=FALSE}
table( cut( troon2012, breaks=seq(from=0,to=5,by=0.5) ) )
```
Ontleed bovenstaande opdracht vanuit de binnenste haakjes naar buiten:
(i) `seq`: maak een reeks (sequence) van 0 tot 5 (eenheden, hier: seconden) in stappen van 0.5 seconden,
(ii) `cut`: hak de afhankelijke variabele `troon2012` (duren van pauzes in de Troonrede van 2012) op in intervallen op basis van deze reeks,
(iii) `table`: maak een frequentieverdeling van deze intervallen.
De uitvoer van deze laatste opdracht is weergegeven (in aangepaste vorm) in Tabel \@ref(tab:troonrede2012pauzes), en wordt hier onderdrukt.
## Staafdiagrammen {#sec:staafdiagrammen}
Een staafdiagram (Eng. 'bar chart') is de grafische weergave van de
frequentieverdeling van een discrete, categorische variabele (van
nominaal of ordinaal meetniveau). Een staafdiagram is opgebouwd uit
rechthoeken. Alle rechthoeken zijn even breed, en de hoogte van de
rechthoek correspondeert met de frequentie van die categorie. De
oppervlakte van iedere rechthoek correspondeert dus ook met de
frequentie van die categorie. In tegenstelling tot een histogram sluiten
de rechthoeken *niet* op elkaar aan langs de horizontale as, om aan te
geven dat we te maken hebben met discrete categorieën.
```{r klankfreq-barplot, echo=FALSE, fig.cap="Staafdiagram van de frequentieverdeling van fonologische klasse van spraakklanken in het Corpus Gesproken Nederlands (C=consonant=medeklinker, V=vocaal=klinker)."}
klankfreq <- read.table(file="data/klankfreq.txt", header=T)
with(klankfreq, barplot( aantal, beside=T,
ylab="Aantal",
main=paste("Klankfrequenties in het Nederlands (N=",
sum(klankfreq$aantal), " spraakklanken)", sep=""),
col=ifelse(klankfreq[,1]=="V","grey40","grey20") ) ) -> klankfreq_barplot
axis(side=1, at=klankfreq_barplot, labels=klankfreq$hoofdklasse)
axis(side=1, at=klankfreq_barplot, tick=F, line=1, labels=klankfreq$onderklasse )
# eenvoudiger: with(klankfreq, barplot(aantal) ) # alle defaults
```
Een staafdiagram helpt ons om in één oogopslag de belangrijkste
kenmerken te bepalen van de verdeling van een discrete variabele: de
meest kenmerkende (meest voorkomende) waarde, en de spreiding over
categorieën. Voor de klankfrequenties in het Nederlands
(Figuur \@ref(fig:klankfreq-barplot)) zien we dat bij de medeklinkers de
plosieven het meeste voorkomen, dat bij de klinkers de korte klinkers
het meeste voorkomen, dat tweeklanken weinig gebruikt worden (zgn.
diphthongs, de klinkers in *ei, ui, au*), en dat er meer medeklinkers
dan klinkers gesproken worden.
Tip: Vermijd schaduwen en andere 3D-effecten in een staafdiagram! De
breedte en hoogte van een rechthoek wordt daardoor minder goed leesbaar,
en de zichtbare oppervlakte van een beschaduwde rechthoek of van een
balk correspondeert niet meer goed met de frequentie.
## Histogrammen {#sec:histogrammen}
Een histogram is de grafische weergave van een frequentieverdeling van
een continue, numerieke variabele (van interval- of ratio-meetniveau).
Een histogram is opgebouwd uit rechthoeken. De breedte van elke
rechthoek correspondeert met de intervalbreedte (een rechthoek kan ook 1
eenheid breed zijn) en de hoogte correspondeert met de frequentie van
dat interval of van die waarde. De oppervlakte van iedere rechthoek
correspondeert dus met de frequentie. In tegenstelling tot een
staafdiagram sluiten de rechthoeken op elkaar aan langs de horizontale
as.
```{r troonrede2012-hist, echo=FALSE, fig.cap="Histogram van de duren van spreekpauzes (in seconden) in de Troonrede van 18 september 2012, voorgelezen door Koningin Beatrix (N=305)."}
hist( troon2012,
breaks=seq(0, 5, by=0.25),
col="grey80",
xlab="Duur van pauze (s)", ylab="Aantal",
main="Troonrede 2012 (N=305 pauzes)" ) -> troonrede2012pauzes_hist
# print(troonrede2012pauzes_hist$breaks)
# print(troonrede2012pauzes_hist$counts)
```
Een histogram helpt ons om in één oogopslag de belangrijkste kenmerken
te bepalen van de verdeling van een continue variabele: de meest
kenmerkende (meest voorkomende) waarde, de mate van spreiding, het
aantal pieken in de frequentieverdeling, de ligging van die pieken, en
eventuele uitbijters
(zie §\@ref(sec:uitbijters)).
Voor de pauzes in de Troonrede van 2012
(Figuur \@ref(fig:troonrede2012-hist)) zien we dat de meeste pauzes
tussen 0.25 en 0.75 s duren (vermoedelijk zijn dat adempauzes), dat er
twee pieken zijn in de verdeling (de tweede piek ligt bij 2 s),
en dat er één extreem lange pauze is (met een duur van bijna 5 s).
Tip: Vermijd schaduwen en andere 3D-effecten in een histogram! De
breedte en hoogte van een rechthoek wordt daardoor minder goed leesbaar,
en de zichtbare oppervlakte van een beschaduwde rechthoek of van een
balk correspondeert niet meer goed met de frequentie.
### SPSS
```
Analyze > Descriptive Statistics > Frequencies...
```
Selecteer variabele (sleep naar paneel "Variable(s)").\
Kies `Charts`, kies daarna `Chart type: Bar chart` voor een
staafdiagram of `Chart type: Histogram` voor een histogram (zie
bovenstaande tekst voor het verschil tussen deze opties).\
Bevestig met `OK`.\
### JASP
Klik in de bovenbalk op `Descriptives`. Selecteer vervolgens de gewenste variabele(n) en plaats ze in het veld "Variables". Klik de balk `Plots` open en vink `Distribution plots` aan onder "Basic plots". Je zult zien dat JASP automatisch een staafdiagram maakt voor variabelen die het meetniveau "Ordinal" of "Nominal" hebben, en een histogram voor variabelen met meetniveau "Scale". Zorg dus dat het meetniveau van alle variabelen goed staat ingesteld. Je kunt het meetniveau veranderen door in het data tabblad op het meetniveau-icoontje voor de variabele-naam te klikken.
### R
Een staafdiagram zoals Figuur \@ref(fig:klankfreq-barplot) maak je in R met de volgende commando's:
```{r klankfreq-barplot-voorbeeld, eval=FALSE}
# lees data
klankfreq <- read.table( file="data/klankfreq.txt", header=T )
# maak barplot van kolom `aantal` in dataset `klankfreq`
with( klankfreq, barplot( aantal, beside=T,
ylab="Aantal",
main="Klankfrequenties in het Nederlands (N=2968220)",
col=ifelse(klankfreq[,1]=="V","grey40","grey20") ) ) -> klankfreq_barplot
# maak labels langs onderste horizontale as
axis(side=1, at=klankfreq_barplot, labels=klankfreq$hoofdklasse)
axis(side=1, at=klankfreq_barplot, tick=F, line=1, labels=klankfreq$onderklasse )
# of eenvoudiger: with(klankfreq, barplot(aantal) ) # alle defaults
```
Een histogram zoals in Figuur \@ref(fig:troonrede2012-hist)
maak je in R met de volgende commando's:
```{r troonrede2012-hist-voorbeeld, eval=FALSE}
# lees dataset
load(file="data/pauses6.Rda")
# haal daaruit pauzeduren (kolom 12) voor jaar 2012, in aparte variabele `troon2012`
troon2012 <- pauses6[ pauses6$jaar==2012, 12 ] # save col_12 as single vector
# maak histogram
hist( troon2012,
breaks=seq(0, 5, by=0.25),
col="grey80",
xlab="Duur van pauze (s)", ylab="Aantal",
main="Troonrede 2012 (N=305 pauzes)" ) -> troonrede2012pauzes_hist
```