Een open-web handboek voor kwantitatief criminologisch onderzoek
Authors
Joost Jansen
Malouke Kuiper
Gijs Custers
Simone Kruit
Updated
January 30, 2026
Voorwoord
Welkom bij het quantcrim handboek Criminologie. Hier ga je leren hoe je kwantitatieve data kan analyseren met R. Het boek is ontworpen en beschikbaar gesteld door docenten en onderzoekers van de opleiding Criminologie aan de Erasmus Universiteit. Het boek is bedoeld voor zowel bachelor- als masterstudenten.
Hieronder vind je een voorbeeld van hoe makkelijk het is om data in te laden, een regressiemodel te schatten en de resultaten ervan te presenteren in een plot.1
1 We gaan in een later hoofdstuk zien wat een regressiemodel precies is.
# load librarieslibrary(ggplot2) # this package needs to be installed in consolelibrary(readr)# import datadata <-read_csv2("data/selfreport_delinquency_MT2.csv")
ℹ Using "','" as decimal and "'.'" as grouping mark. Use `read_delim()` for more control.
Rows: 1000 Columns: 187
── Column specification ────────────────────────────────────────────────────────
Delimiter: ";"
chr (13): v0607a, v08a, v09a, v13a, v14a, v15a, v16a, v17a, v2207a, v37a, v...
dbl (172): keyvar, school, type_sch, sec_lev, respnum, v01, v02, v03, v04, v...
lgl (2): v28a2, v28b2
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# inspect dataframeknitr::kable( data[1:5, ])
keyvar
school
type_sch
sec_lev
respnum
v01
v02
v03
v04
v05
v0601
v0602
v0603
v0604
v0605
v0606
v0607
v0607a
v07
v080
v081
v082
v083
v084
v085
v08a
v090
v091
v092
v093
v09a
v1001
v1002
v1003
v1004
v1005
v1006
v11
v12
v130
v131
v132
v133
v13a
v140
v141
v142
v143
v14a
v150
v151
v152
v153
v15a
v160
v161
v162
v163
v16a
v170
v171
v172
v173
v17a
v18
v19
v20
v21
v2201
v2202
v2203
v2204
v2205
v2206
v2207
v2207a
v23
v240
v241
v242
v243
v25
v26
v27
v28a0
v28a1
v28a2
v28b0
v28b1
v28b2
v28c0
v28c1
v28c2
v2901
v2902
v2903
v2904
v30
v31
v32
v33
v34
v35
v360
v361
v37
v37_1
v37a
v37a1
v37b
v37b1
v38
v3901
v3902
v3903
v3904
v3905
v3906
v3907
v3908
v4001
v4002
v4003
v4004
v41
v42
v43
v44
v4501
v4502
v4503
v4504
v4505
v4506
v4507
v4508
v4509
v46
v47
v48
v48a
v49
v49a
v50
v50a
v5101
v5102
v5103
v5104
v5105
v5201
v5202
v5203
v5301
v5302
v5303
v5304
v5305
v5306
v54
v54a
v54b
v55
v55a
v55b
v56
v56a
v56b
v57
v57a
v57b
v58
v58a
v58b
v59
v59a
v59b
v60
v60a
v60b
del_ern
crime_types
unsafe_nh
ethnicity
dutch
surinam_antillian
moroccan_turkish
1001
55
13
4
5513401
2
5
4
3
3
1
2
1
1
3
2
2
NA
2
2
3
0
0
0
0
0
1
0
0
0
0
2
1
1
1
2
2
2
2
7
9
0
0
0
8
0
0
0
0
8
0
0
0
0
2
8
0
0
0
7
0
0
0
0
2
3
6
6
2
1
1
2
1
1
2
NA
1
8
0
0
0
1
1
13
1
NA
NA
1
NA
NA
1
3
NA
0
1
0
0
4
2
2
5
2
2
1
0
1
1
NA
NA
NA
NA
1
2
2
2
1
1
1
1
1
4
2
4
4
2
1
3
3
1
1
1
1
3
3
3
5
3
2
1
2
12
1
NA
2
12
1
1
2
2
1
4
2
4
5
3
7
2
4
2
1
NA
1
1
NA
1
2
11
2
1
NA
1
1
NA
1
1
NA
1
1
NA
1
0
1
2.6
1
1
0
0
1002
55
13
4
5513402
2
5
5
2
2
2
1
1
1
1
1
2
NA
2
3
5
0
0
0
0
0
3
0
0
0
0
3
1
3
1
1
1
9
9
4
9
0
0
0
11
0
0
0
vond het niet erg
2
0
0
0
0
2
8
0
0
de ruziezoeker
2
0
0
0
0
2
2
6
6
2
1
2
1
1
4
2
NA
3
6
9
0
0
3
3
13
1
NA
NA
1
NA
NA
3
NA
NA
0
0
0
1
3
2
2
4
99
9
NA
NA
1
1
NA
NA
NA
NA
1
4
3
3
1
1
4
3
1
4
3
4
2
1
3
4
3
2
4
2
5
4
3
3
5
4
2
1
1
NA
1
NA
2
10
3
2
2
2
2
4
2
4
3
1
7
1
7
3
1
NA
1
1
NA
1
1
NA
1
2
10
2
1
NA
1
1
NA
1
1
NA
1
0
1
2.2
NA
NA
NA
NA
1004
55
13
4
5513404
1
4
4
3
4
4
2
1
2
5
5
1
buitengesloten, uit-maken voor dikzak
7
2
4
5
6
9
0
0
1
5
0
0
plagen op de manege
2
2
1
2
2
2
4
4
4
5
7
8
niet huilen id. doen
2
3
5
6
0
3
5
6
9
0
2
0
0
0
0
4
8
9
0
hartsvriendin
6
6
3
6
1
1
1
1
1
2
2
NA
1
1
0
0
0
1
1
13
1
NA
NA
1
NA
NA
1
3
NA
1
1
0
0
4
2
2
4
2
2
1
0
1
1
NA
NA
NA
NA
1
3
2
2
1
1
1
1
1
5
4
5
3
1
2
3
3
2
4
3
4
2
4
4
4
4
2
1
1
NA
1
NA
1
NA
2
3
3
3
1
3
3
3
3
2
7
4
7
6
1
NA
1
1
NA
1
1
NA
1
1
NA
1
1
NA
1
1
NA
1
1
NA
1
0
0
2.4
1
1
0
0
1005
55
13
4
5513405
2
4
5
1
1
1
1
1
1
1
2
1
0
1
1
0
0
0
0
0
0
1
0
0
0
0
1
1
1
1
1
2
1
1
1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
1
1
5
2
1
1
2
1
1
2
NA
1
1
0
0
0
1
1
12
1
NA
NA
1
NA
NA
3
NA
NA
0
1
0
0
8
2
2
8
3
2
1
0
1
1
NA
NA
NA
NA
1
2
2
5
3
2
2
3
2
4
4
4
4
2
2
3
3
2
4
2
3
5
5
5
5
5
3
2
1
NA
1
NA
1
NA
2
3
1
3
2
3
3
3
6
1
2
2
1
2
1
NA
1
1
NA
1
1
NA
1
1
NA
1
1
NA
1
1
NA
1
1
NA
1
0
0
1.0
1
1
0
0
1007
55
13
4
5513407
2
4
5
2
2
1
1
1
1
1
2
2
NA
2
4
0
0
0
0
0
0
1
0
0
0
0
1
1
1
1
1
3
4
2
6
0
0
0
0
3
5
8
0
0
2
0
0
0
0
8
0
0
0
0
8
0
0
0
0
2
2
2
5
3
1
1
1
1
1
2
NA
4
4
0
0
0
2
2
12
1
NA
NA
1
NA
NA
3
NA
NA
0
0
0
1
8
2
2
4
2
2
1
0
2
1
NA
NA
NA
NA
1
4
4
3
3
1
1
5
3
4
3
4
3
2
1
3
3
1
5
1
1
4
4
4
4
5
3
2
2
10
1
NA
2
9
1
2
3
3
2
3
2
3
3
2
6
1
7
2
1
NA
1
1
NA
1
1
NA
1
2
10
2
1
NA
1
1
NA
1
1
NA
1
0
1
1.8
1
1
0
0
# fit linear model model1 <-lm(crime_types ~ unsafe_nh, data)summary(model1)
Call:
lm(formula = crime_types ~ unsafe_nh, data = data)
Residuals:
Min 1Q Median 3Q Max
-3.5758 -0.9078 -0.3525 0.6475 6.3886
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.12972 0.10887 -1.192 0.234
unsafe_nh 0.74110 0.05317 13.939 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 1.434 on 963 degrees of freedom
(35 observations deleted due to missingness)
Multiple R-squared: 0.1679, Adjusted R-squared: 0.167
F-statistic: 194.3 on 1 and 963 DF, p-value: < 2.2e-16
# plot w ggplot2#| column: marginggplot(data, aes(x = unsafe_nh, y = crime_types)) +geom_point() +geom_smooth()
`geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
Warning: Removed 35 rows containing non-finite outside the scale range
(`stat_smooth()`).
Warning: Removed 35 rows containing missing values or values outside the scale range
(`geom_point()`).
Voor we verder gaan..
We hopen dat je dit boek handig vindt om mee te werken. In het kader van Open Science hebben we geprobeerd dit boek volledig transparant en reproduceerbaar te ontwikkelen. De broncode is beschikbaar via https://github.com/joostjansen/quantcrim. Als je vragen, suggesties of aanpassingen hebt, aarzel niet deze te stellen.2
2 Het beste is om dit via GitHub te doen in onze Repository.