{% extends "report_base.html" %}
{% block title %}{{ title }}{% endblock %}
{% block items %}mappings{% endblock %}
{% block heading %}{{ fit_id }}{% endblock %}
{% block subtitle %}{{ opid }}{% endblock %}
{% block placeholder %}Search parameters, mappings, metrics …{% endblock %}
{% block badges %}{% for badge in badges %}{{ badge.label }} {{ badge.value }}{% endfor %}{% endblock %}
{#
Two tabs: "Report" is the report document (methods, results, references)
followed by the overview, the results and the identifiability of the fit,
"Fit mappings" the figures of the cost and weight and of the residuals of
every fit mapping, the table of the metrics of every fit mapping and a card
per fit mapping. A tab is a link with `data-tab`, its
panel a `.tab-panel` with `data-panel`; the page opens on the report, or on
the tab of the element its address names.
#}
{% block head %}
{% endblock %}
{% block nav %}
ReportFit mappings
{% endblock %}
{% block chips %}
{% for kind in kinds %}
{% endfor %}
{% endblock %}
{% block footer %}{% for file in files %}{{ file.label }}{% if not loop.last %} · {% endif %}{% endfor %}{% endblock %}
{% block content %}
{% if pdf_error %}
The PDF could not be created: {{ pdf_error }}. The Typst source report.typ is kept, every other output was written.
{% endif %}
{{ document_title }}
{% if downloads %}{% for file in downloads %}{{ file.label }}{% if not loop.last %} · {% endif %}{% endfor %}{% endif %}
{{ report_html | safe }}
Overview
Fit
{% for key, value in fit_info.items() %}
{{ key }}
{{ value }}
{% endfor %}
{% if parameters %}
Parameters
parameter
{% if versioned_parameters %}
target
{% endif %}
{% for pset in parameter_set_ids %}
{{ pset }}
{% endfor %}
lower
upper
unit
{% for row in parameters %}
{{ row.pid }}
{% if versioned_parameters %}
{{ row.target }}
{% endif %}
{% for value in row.set_values %}
{{ value }}
{% endfor %}
{{ row.lower }}
{{ row.upper }}
{{ row.unit }}
{% endfor %}
{% if bound_warnings %}
{% for message in bound_warnings %}{{ message }} {% endfor %}
{% endif %}
{% endif %}
{% if hooks %}
Networks
network
pattern
layers
targets
{% for hook in hooks %}
{{ hook.name }}
{{ hook.kind }}
{{ hook.description }}
{{ hook.targets }}
{% endfor %}
array
elements?
estimated?
{% for pset in parameter_set_ids %}
{{ pset }} min
{{ pset }} max
{{ pset }} norm?
{% endfor %}
lower
upper
{% for row in arrays %}
{{ row.label }}
{{ row.elements }}
{{ row.estimated }}
{% for values in row.set_values %}{% for value in values %}
{{ value }}
{% endfor %}{% endfor %}
{{ row.lower }}
{{ row.upper }}
{% endfor %}
{% if array_bound_warnings %}
{% for message in array_bound_warnings %}{{ message }} {% endfor %}
{% endif %}
{% endif %}
Settings
setting
value
{% for key, value in settings.items() %}
{{ key }}
{{ value }}
{% endfor %}
Data
experiment
{% for kind in kinds %}
{{ kind }}
{% endfor %}
mappings
{% for row in data_summary %}
{{ row.experiment }}
{% for count in row.counts %}
{{ count }}
{% endfor %}
{{ row.total }}
{% endfor %}
total
{% for count in data_total.counts %}
{{ count }}
{% endfor %}
{{ data_total.total }}
Results
Metrics
{% for column in metrics_columns %}
{{ column.name }}{% if column.hint %}?{% endif %}
{% endfor %}
{% for row in metrics %}
{% for value in row %}
{{ value }}
{% endfor %}
{% endfor %}
{% if run_plots %}
Optimization runs
{% for plot in run_plots %}
{{ plot.caption }}{% if plot.hint %}?{% endif %}
{% endfor %}
{% endif %}
{% if result_plots %}
Predictions and costs
{% for plot in result_plots %}
{{ plot.caption }}{% if plot.hint %}?{% endif %}
{% endfor %}
{% endif %}
{% if runs %}
Optimization runs ({{ runs | length }})
{% for column in run_columns %}
{{ column }}
{% endfor %}
{% for row in runs %}
{% for value in row %}
{{ value }}
{% endfor %}
{% endfor %}
{% endif %}
{% if groupings %}
Evaluation
{% for grouping in groupings %}
{% endfor %}
{% for grouping in groupings %}
{% for plot in grouping.plots %}
{{ plot.caption }}
{% endfor %}
{% for column in grouping.columns %}
{{ column }}{% if hints[column] %}?{% endif %}
{% endfor %}
{% for row in grouping.rows %}
{% for value in row %}
{{ value }}
{% endfor %}
{% endfor %}
{% endfor %}
{% endif %}
{% if fisher or identifiability %}
Identifiability
{% endif %}
{% if fisher %}
Fisher information
The curvature of the cost at the parameters, FIM = J'J with the jacobian of the weighted residuals, from which the standard errors and the correlations of the parameters follow. It is a local statement: the intervals are exact for a cost which is a quadratic around the optimum and approximate for a non-linear model, where the profile likelihood is the one to trust. The errors and the intervals are computed in the space the optimizer searches, so an interval on a logarithmic scale is not symmetric around the value.
{% if not fisher.identifiable %}
The information does not have full rank: the data does not constrain every direction in parameter space, so the errors and the correlations of the unconstrained directions cannot be read. A parameter which no data informs is such a direction.
{% endif %}
Analysis
{% for key, value in fisher.info.items() %}
{{ key }}
{{ value }}
{% endfor %}
eigenvalues?
{{ fisher.eigenvalues | join(", ") }}
Parameters
{% for column in fisher.columns %}
{{ column.name }}{% if column.hint %}?{% endif %}
{% endfor %}
{% for row in fisher.rows %}
{% for value in row %}
{{ value }}
{% endfor %}
{% endfor %}
Correlation?
{% if fisher.note %}
{{ fisher.note }}
{% endif %}
{% for pid in fisher.pids %}
{{ pid }}
{% endfor %}
{% for pid in fisher.pids %}
{{ pid }}
{% for value in fisher.correlation[loop.index0] %}
{{ value }}
{% endfor %}
{% endfor %}
{% endif %}
{% if identifiability %}
Profile likelihood
Profile likelihood of the parameters: every parameter is fixed at values around the optimum and the other parameters are optimized again. A parameter is identifiable if its profile crosses the threshold of the confidence level on both sides of the optimum, i.e., its confidence interval is finite; practically non-identifiable if the profile stays below the threshold up to a bound of the parameter; structurally non-identifiable if the profile is flat. An open side of an interval is shown as the bound of the parameter.
{% if identifiability.better_optimum %}
A profile found a cost below the cost of the parameter set, the fit did not converge to the optimum. The threshold is relative to the lowest cost.
{% endif %}
Analysis
{% for key, value in identifiability.info.items() %}
{{ key }}
{{ value }}
{% endfor %}
Parameters
parameter
value
ci lower
ci upper
unit
identifiability
points
{% for row in identifiability.rows %}
{{ row.pid }}
{{ row.value }}
{{ row.ci_lower }}
{{ row.ci_upper }}
{{ row.unit }}
{{ row.label }}{% if not row.converged %} not converged{% endif %}
{{ row.n_points }}
{% endfor %}
{% if identifiability.plots %}
{% for plot in identifiability.plots %}
{{ plot.caption }}{% if plot.hint %}?{% endif %}
{% endfor %}
{% endif %}
{% if identifiability.profile_plots %}
Profiles
{% for plot in identifiability.profile_plots %}
{{ plot.caption }}{% if plot.hint %}?{% endif %}
{% endfor %}
{% endif %}
{% endif %}
{% if fisher or identifiability %}
{% endif %}
Fit mappings ({{ mappings | length }})
{% if mapping_plots %}
Cost, weight and residuals of the fit mappings
{% for plot in mapping_plots %}
{{ plot.caption }}{% if plot.hint %}?{% endif %}
{% endfor %}
{% endif %}
Metrics of the fit mappings
{% for column in mapping_metrics_columns %}
{{ column }}{% if hints.get(column) %}?{% endif %}
{% endfor %}
{% for row in mapping_metrics %}
{{ row.parameter_set }}
{{ row.experiment }}
{{ row.mapping }}
{{ row.kind }}
{{ row.n }}
{{ row.mse }}
{{ row.rmse }}
{{ row.nrmse }}
{{ row.rmse_w }}
{{ row.r2 }}
{{ row.within_2fold }}
{% endfor %}
Data and simulation of the fit mappings
{% for mapping in mappings %}
{{ mapping.mapping }}{{ mapping.experiment }} · {{ mapping.observable }}{{ mapping.kind }}
{% for key, value in mapping.metrics.items() %}{{ key }} {{ value }}{% endfor %}
{% for plot in mapping.plots %}
{{ plot.caption }}{% if plot.hint %}?{% endif %}
{% endfor %}