def test_choose_param_init(pheno_path, testdata): model = Model(pheno_path) params = (model.parameters['OMEGA(1,1)'], model.parameters['OMEGA(2,2)']) rvs = RandomVariables(model.random_variables.etas) init = _choose_param_init(model, rvs, params) assert init == 0.0118179 model = Model(pheno_path) model.source.path = testdata # Path where there is no .ext-file init = _choose_param_init(model, rvs, params) assert init == 0.0031045 model = Model(pheno_path) omega1 = S('OMEGA(3,3)') x = stats.Normal('ETA(3)', 0, sympy.sqrt(omega1)) x.variability_level = VariabilityLevel.IIV rvs.add(x) ie = model.modelfit_results.individual_estimates ie['ETA(3)'] = ie['ETA(1)'] model.modelfit_results = ModelfitResults(individual_estimates=ie) init = _choose_param_init(model, rvs, params) assert init == 0.0118179
def psn_frem_results(path, force_posdef_covmatrix=False, force_posdef_samples=500, method=None): """Create frem results from a PsN FREM run :param path: Path to PsN frem run directory :return: A :class:`FREMResults` object """ path = Path(path) model_4_path = path / 'final_models' / 'model_4.mod' if not model_4_path.is_file(): raise IOError(f'Could not find FREM model 4: {str(model_4_path)}') model_4 = Model(model_4_path) if model_4.modelfit_results is None: raise ValueError('Model 4 has no results') cov_model = None if method == 'cov_sampling': try: model_4.modelfit_results.covariance_matrix except Exception: model_4b_path = path / 'final_models' / 'model_4b.mod' try: model_4b = Model(model_4b_path) except FileNotFoundError: pass else: cov_model = model_4b with open(path / 'covariates_summary.csv') as covsum: covsum.readline() raw_cov_list = covsum.readline() all_covariates = raw_cov_list[1:].rstrip().split(',') # FIXME: Not introducing yaml parser in pharmpy just yet. Options should be collected # differently. Perhaps using json logtransformed_covariates = [] with open(path / 'meta.yaml') as meta: for row in meta: row = row.strip() if row.startswith('rescale: 1'): rescale = True elif row.startswith('rescale: 0'): rescale = False if row.startswith("log: ''"): logtransformed_covariates = [] elif row.startswith('log: '): logtransformed_covariates = row[5:].split(',') # add log transformed columns for the -log option. Should be done when creating dataset df = model_4.dataset if logtransformed_covariates: for lncov in logtransformed_covariates: df[f'LN{lncov}'] = np.log(df[lncov]) model_4.dataset = df nunique = model_4.dataset.pharmpy.baselines[all_covariates].nunique() continuous = list(nunique.index[nunique != 2]) categorical = list(nunique.index[nunique == 2]) intmod_names = [ 'model_1.mod', 'model_2.mod', 'model_3.mod', 'model_3b.mod' ] intmods = [] for m in intmod_names: intmod_path = path / 'm1' / m if intmod_path.is_file(): intmod = Model(intmod_path) intmods.append(intmod) model1b = Model(path / 'm1' / 'model_1b.mod') model1 = intmods[0] model1b.modelfit_results = model1.modelfit_results model1b.modelfit_results.parameter_estimates = model1b.parameters.nonfixed_inits psn_reorder_base_model_inits(model1b, path) res = calculate_results( model_4, continuous, categorical, method=method, force_posdef_covmatrix=force_posdef_covmatrix, force_posdef_samples=force_posdef_samples, cov_model=cov_model, rescale=rescale, intermediate_models=intmods, seed=np.random.default_rng(9843), ) return res