install.packages("remotes")
::install_github("growthcharts/nlreferences")
remotes::install_github("growthcharts/centile")
remotes::install_github("growthcharts/growthscreener") remotes
Practicum 3
Doel
Het doel van dit practicum is om de concepten van SDS en screening te begrijpen en toe te passen.
- In dit practicum werken we met de
centile
ennlreferences
packages voor referentiewaarden - We gebruiken referentiewaarden voor de screening op groei van kinderen m.b.v. het
growthscreener
package
Voorbereiding
Installeer de volgende packages:
nlreferences
packages
In practicum 1 hebben we al meerdere groei referenties gezien. De WHO Child Growth Standards vormen wereldwijd gezien de meest gebruikte referenties. In Nederland gebruiken we nationale referentiewaarden, een mix van WHO definities en nationale referenties.
Het nlreference
package bevat referentiewaarden voor in Nederland wonende kinderen. Er zijn referenties voor lengte, gewicht, gewicht, BMI, hoofdomtrek, D-score, zithoogte, zithoogte-ratio en Tanner stadia. Meestal zijn er apart referenties voor meisjes en jongens, naar ethnische achtergrond, prematuriteit en voor kinderen met een beperking.
De referentiewaarden zelf staan in https://github.com/growthcharts/nlreferences/tree/master/data-raw/data.
centile
package
Een belangrijk probleem dat JAMES oplost is het automatisch koppelen van de referentiewaarden aan kenmerken van het kind. Het centile
package gebruikt hiervoor de set_refcodes()
functie. Het volgende snippet definieert zeven hypothetische kinderen, en koppelt de referentiewaarden aan de kenmerken van het kind.
library(centile)
library(nlreferences)
<- data.frame(
df xname = c("age", "age", "age", "age", "hgt", "age", "age"),
yname = c("hgt", "hgt", "hdc", "hdc", "wfh", "dsc", "wgt"),
x = c(0.1, NA, 0.1, 1.6, 60, 1.0, 1.0),
sex = c(rep(c("male", "female"), 3), "male"),
ga = c(39, 27, 27, NA, NA, 40, 40))
<- set_refcodes(df)
refcodes cbind(df, refcodes)
xname yname x sex ga refcodes
1 age hgt 0.1 male 39 nl_1997_hgt_male_nl
2 age hgt NA female 27 nl_1997_hgt_female_nl
3 age hdc 0.1 male 27 nl_2012_hdc_male_27
4 age hdc 1.6 female NA nl_1997_hdc_female_nl
5 hgt wfh 60.0 male NA nl_1997_wfh_male_nla
6 age dsc 1.0 female 40 ph_2023_dsc_female_40
7 age wgt 1.0 male 40 nl_1997_wgt_male_nl
De invoerdata hebben minimaal de volgende kolommen nodig:
xname
: code x-as (“age”, “hgt”)yname
: code y-as (“hgt”, “wfh”, “wgt”, “bmi”, “hdc”, “dsc”)x
: de waarde x (meestal leeftijd)sex
: het geslacht van het kind (“male”, “female”)
De volgende kolommen zijn facultatief:
age
: de leeftijd van het kind in jarenga
: de zwangerschapsduur van het kind in weken
Als velden ontbreken (NA
) zal de beslisboom terugvallen op defaults.
Opdracht 1
Zoek uit welke defaults de procedure gebruikt. En wat er gebeurt bij vreemde invoerwaarden? Zijn de keuzen logisch?
nlreferences
package
We kunnen de referentie uit het nlreferences
package halen met de load_reference()
functie. Dit is een handige manier om de referentiewaarden te bekijken.
# show the preterm 27 weeks hdc reference
::load_reference(refcodes[3], pkg = "nlreferences") centile
# A tibble: 51 × 3
x mean sd
<dbl> <dbl> <dbl>
1 0 24.4 1.50
2 0.0027 24.5 1.50
3 0.0055 24.6 1.50
4 0.0082 24.7 1.50
5 0.011 24.9 1.51
6 0.0137 25 1.51
7 0.0164 25.1 1.51
8 0.0192 25.3 1.51
9 0.0219 25.4 1.52
10 0.0246 25.5 1.52
# ℹ 41 more rows
Opdracht 2
Wat is de gemiddelde lengte en gewicht voor een kind van 1 jaar oud in de Nederlandse referenties van 1980, 1997 en 2009? En voor een kind van 18 jaar oud?
growthscreener
package
Het growthscreener
package bevat een aantal functies om groeidata van kinderen te screenen aan de hand van JGZ-richtlijnen. De functies in het package vormen een beslisboom om afwijkende patronen uit te zeven.
De functie list_screeners()
geeft een overzicht van de beschikbare screener signalen per uitkomstmaat yname
. Er zijn screeners voor lengte ("hgt"
), gewicht ("wgt"
), hoofdomtrek ("hdc"
) en taalontwikkeling ("lgd"
).
library(growthscreener)
<- list_screeners()
signals unique(signals$yname)
[1] "hgt" "wgt" "hdc" "lgd"
De tabel signals
bevat 101 mogelijk signalen, onderverdeeld in de vier genoemde groepen. Elk signaal heeft een eigen code, plus een beschrijving. Aan de hand hiervan kunnen we een enkel kind screenen, op bijvoorbeeld lengte, als volgt:
# a very short girl, 4 months old
<- calculate_advice_hgt(sex = "female", bw = 3250, ga = 40, dom = 0.367, y = 55)
msgcode msgcode
[1] 1045
#> [1] 1045
De functie calculate_advice_hgt()
geeft een adviescode terug. Dit is een integer die de beslissing van de beslisboom representeert. De code kan worden omgezet naar een tekstuele beschrijving met de functie msg()
.
cat(fold(msg(msgcode)))
Het advies volgens de JGZ-richtlijn lengtegroei is als volgt: Verwijzen naar
huisarts/kinderarts, omdat de lengte SDS < -3 is en het geboortegewicht >= 2500
gram is.
Opdracht 3
Voor epidemiologische studies zou het handig zijn om de beslisboom op een groep i.p.v. een enkel kind toe te passen. Breid het aantal kinderen uit naar drie, en maak een functie die de beslisboom aanroept voor elk kind. Is deze methode schaalbaar naar 10.000 kinderen?