Source code for pharmpy.tools.crossval.results

import re

import pandas as pd

from pharmpy import Model
from pharmpy.results import Results


[docs]class CrossvalResults(Results): """Crossval results class""" def __init__(self, runs=None, prediction_ofv_sum=None): self.runs = runs self.prediction_ofv_sum = prediction_ofv_sum
[docs]def calculate_results(estimation_models, prediction_models): """Calculate crossval results""" est_ofvs = [model.modelfit_results.ofv for model in estimation_models] pred_ofvs = [model.modelfit_results.ofv for model in prediction_models] runs = pd.DataFrame( {'estimation_ofv': est_ofvs, 'prediction_ofv': pred_ofvs}, index=pd.RangeIndex(start=1, stop=len(est_ofvs) + 1), ) res = CrossvalResults(runs=runs, prediction_ofv_sum=sum(pred_ofvs)) return res
[docs]def psn_crossval_results(path): def atoi(text): return int(text) if text.isdigit() else text def natural_keys(text): return [atoi(c) for c in re.split(r'(\d+)', text)] est_paths = [str(p) for p in (path / 'm1').glob('est_model*.mod')] est_paths.sort(key=natural_keys) pred_paths = [str(p) for p in (path / 'm1').glob('pred_model*.mod')] pred_paths.sort(key=natural_keys) ests = [Model(path) for path in est_paths] preds = [Model(path) for path in pred_paths] res = calculate_results(ests, preds) return res