Source code for mud_examples.summary
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
import numpy as np
_logger = logging.getLogger(__name__)
[docs]def extract_statistics(solutions, reference_value):
"""Extracts experiment statistics from solutions set
Assumes keys of dictionary are sample sizes, and each
value is a list containing solutions for each trial.
>>> S = {2: [1, 1, 1], 4: [1, 1, 1]}
>>> means, vars = extract_statistics(S, 0)
>>> print(means)
[1.0, 1.0]
>>> print(vars)
[0.0, 0.0]
"""
num_sensors_plot_conv = solutions.keys()
means = []
variances = []
for ns in num_sensors_plot_conv:
_logger.debug(f"Extracting stats for {ns} measurements.")
mud_solutions = solutions[ns]
num_trials = len(mud_solutions)
err = [np.linalg.norm(m - reference_value) for m in mud_solutions]
assert len(err) == num_trials
mean_mud_sol = np.mean(err)
var_mud_sol = np.var(err)
means.append(mean_mud_sol)
variances.append(var_mud_sol)
return means, variances
[docs]def maybe_fit_log_linear_regression(input_values, output_values):
"""Fits a log-linear regression
>>> import numpy as np
>>> x = np.arange(1,11)
>>> np.round(maybe_fit_log_linear_regression(x,x)[1], 4)
1.0
"""
if 0 in output_values:
x, y = np.array(input_values), np.array(output_values)
_logger.warning("0 in output_values, performing regular regression.")
log = False
else:
x, y = np.log10(input_values), np.log10(output_values)
log = True
X, Y = np.vander(x, 2), np.array(y).reshape(-1, 1)
slope, intercept = (np.linalg.pinv(X) @ Y).ravel()
if log:
regression_line = 10 ** (slope * x + intercept)
else:
regression_line = slope * x + intercept
return regression_line, slope