diff options
Diffstat (limited to 'lib/parameters.py')
-rw-r--r-- | lib/parameters.py | 60 |
1 files changed, 9 insertions, 51 deletions
diff --git a/lib/parameters.py b/lib/parameters.py index 300bb6f..ed56bdd 100644 --- a/lib/parameters.py +++ b/lib/parameters.py @@ -10,6 +10,7 @@ import dfatool.functions as df from .paramfit import ParamFit from .utils import remove_index_from_tuple, is_numeric from .utils import filter_aggregate_by_param, partition_by_param +from .utils import param_to_ndarray logger = logging.getLogger(__name__) @@ -38,57 +39,6 @@ def distinct_param_values(param_tuples): return distinct_values -def param_to_ndarray( - param_tuples, with_nan=True, categorial_to_scalar=False, ignore_indexes=list() -): - has_nan = dict() - has_non_numeric = dict() - distinct_values = dict() - category_to_scalar = dict() - - for param_tuple in param_tuples: - for i, param in enumerate(param_tuple): - if not is_numeric(param): - if param is None: - has_nan[i] = True - else: - has_non_numeric[i] = True - if categorial_to_scalar and param is not None: - if not i in distinct_values: - distinct_values[i] = set() - distinct_values[i].add(param) - - for i, paramset in distinct_values.items(): - distinct_values[i] = sorted(paramset) - category_to_scalar[i] = dict() - for j, param in enumerate(distinct_values[i]): - category_to_scalar[i][param] = j - - ignore_index = dict() - for i in range(len(param_tuples[0])): - if has_non_numeric.get(i, False) and not categorial_to_scalar: - ignore_index[i] = True - elif not with_nan and has_nan.get(i, False): - ignore_index[i] = True - else: - ignore_index[i] = False - - for i in ignore_indexes: - ignore_index[i] = True - - ret_tuples = list() - for param_tuple in param_tuples: - ret_tuple = list() - for i, param in enumerate(param_tuple): - if not ignore_index[i]: - if i in category_to_scalar: - ret_tuple.append(category_to_scalar[i][param]) - else: - ret_tuple.append(param) - ret_tuples.append(ret_tuple) - return np.asarray(ret_tuples), category_to_scalar, ignore_index - - def _depends_on_param(corr_param, std_param, std_lut): # if self.use_corrcoef: if False: @@ -929,6 +879,14 @@ class ModelAttribute: return ret + def build_fol_model(self): + x = df.FOLFunction(self.median, self.param_names) + x.fit(self.param_values, self.data) + if x.fit_success: + self.model_function = x + else: + logger.warning(f"Fit of first-order linear model function failed.") + def fit_override_function(self): function_str = self.function_override x = df.AnalyticFunction( |