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
Oefeninstructies
- Geef een functie mee aan het error-argument. Deze functie moet één argument
eaannemen enpaste()gebruiken om de string"Error!"vóórete zetten. - Pas
fit_lm()aan om te controleren ofmodeleen character string is die het foutbericht bevat. - Maak een cluster met zes cores.
- Pas
fit_lm()parallel toe op de lijstls_dfmetparLapply().
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!"))