Aan de slagGa gratis aan de slag

Modelleerfouten opvangen

Levensverwachting bij geboorte is een belangrijke indicator voor de gezondheid van een bevolking.

Je werkt als consultant-onderzoeker in de publieke gezondheid. Je opdrachtgever wil weten hoeveel de levensverwachting toeneemt per bestede dollar aan gezondheidszorg. Je hebt gegevens verzameld over de levensverwachting (in jaren) voor alle landen en hun bijbehorende zorguitgaven per hoofd van de bevolking, van 2001 tot 2021. De consulterend statisticus heeft code geschreven om regressiemodellen te fitten voor de gegevens van elk land. Er ontbreken echter waarden in de data, wat fouten veroorzaakt bij het fitten van de modellen.

Je hebt een lijst met dataframes in je workspace, ls_df, waarbij elk element de data voor een bepaald land bevat. Je wilt paralleliseren met parLapply() en tryCatch() gebruiken om fouten op te vangen. Het parallel-pakket is voor je geladen.

Deze oefening maakt deel uit van de cursus

Parallel programmeren in R

Cursus bekijken

Oefeninstructies

  • Geef een functie mee aan het error-argument. Deze functie moet één argument e aannemen en paste() gebruiken om de string "Error!" vóór e te zetten.
  • Pas fit_lm() aan om te controleren of model een character string is die het foutbericht bevat.
  • Maak een cluster met zes cores.
  • Pas fit_lm() parallel toe op de lijst ls_df met parLapply().

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

fit_lm <- function (df) {
  model <- tryCatch(lm(life_expectancy ~ health_exp_per_capita, data = df),
# Supply a function that pastes "Error!" and one argument, e
                    error = ___)                   
# If model is character (error) return model else return model coefficient
  if (___) return(model)
  else return(coef(model)[2])
}
# Make a cluster of six cores
cluster <- ___(___)
# Apply fit_lm in parallel to ls_df using cluster
ls_mod <- parLapply(___, ___, ___)
stopCluster(cluster)
                    
print(paste(sum(sapply(ls_mod, is.numeric)), "models fit and", sum(sapply(ls_mod, is.character)), "errors caught!"))
Code bewerken en uitvoeren