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 en nlreferences packages voor referentiewaarden
  • We gebruiken referentiewaarden voor de screening op groei van kinderen m.b.v. het growthscreener package

Voorbereiding

Installeer de volgende packages:

install.packages("remotes")
remotes::install_github("growthcharts/nlreferences")
remotes::install_github("growthcharts/centile")
remotes::install_github("growthcharts/growthscreener")

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)
df <- data.frame(
  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))
refcodes <- set_refcodes(df)
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 jaren
  • ga: 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
centile::load_reference(refcodes[3], pkg = "nlreferences")
# 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)
signals <- list_screeners()
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
msgcode <- calculate_advice_hgt(sex = "female", bw = 3250, ga = 40, dom = 0.367, y = 55)
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?