quantcrim

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.

Voor de pagina met collegeslides zie 2  Collegeslides.

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 libraries
library(ggplot2) # this package needs to be installed in console
library(readr)

# import data
data <- 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 dataframe
knitr::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: margin
ggplot(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.