summaryrefslogtreecommitdiff
path: root/lib/parameters.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/parameters.py')
-rw-r--r--lib/parameters.py60
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(