{% 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 %} Report Fit 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

{% if versioned_parameters %}{% endif %} {% for pset in parameter_set_ids %}{% endfor %} {% for row in parameters %} {% if versioned_parameters %}{% endif %} {% for value in row.set_values %}{% endfor %} {% endfor %}
parametertarget{{ pset }}lowerupper unit
{{ row.pid }}{{ row.target }}{{ value }}{{ row.lower }}{{ row.upper }} {{ row.unit }}
{% if bound_warnings %}

{% for message in bound_warnings %}{{ message }}
{% endfor %}

{% endif %}
{% endif %} {% if hooks %}

Networks

{% for hook in hooks %} {% endfor %}
networkpattern layerstargets
{{ hook.name }}{{ hook.kind }}{{ hook.description }}{{ hook.targets }}
{% for pset in parameter_set_ids %}{% endfor %} {% for row in arrays %} {% for values in row.set_values %}{% for value in values %}{% endfor %}{% endfor %} {% endfor %}
array elements? estimated?{{ pset }} min{{ pset }} max{{ pset }} norm?lowerupper
{{ row.label }} {{ row.elements }}{{ row.estimated }}{{ value }}{{ row.lower }}{{ row.upper }}
{% if array_bound_warnings %}

{% for message in array_bound_warnings %}{{ message }}
{% endfor %}

{% endif %}
{% endif %}

Settings

{% for key, value in settings.items() %} {% endfor %}
settingvalue
{{ key }}{{ value }}

Data

{% for kind in kinds %}{% endfor %} {% for row in data_summary %} {% for count in row.counts %}{% endfor %} {% endfor %} {% for count in data_total.counts %}{% endfor %}
experiment{{ kind }}mappings
{{ row.experiment }}{{ count }}{{ row.total }}
total{{ count }}{{ data_total.total }}

Results

Metrics

{% for column in metrics_columns %} {% endfor %} {% for row in metrics %} {% for value in row %}{% endfor %} {% endfor %}
{{ column.name }}{% if column.hint %}?{% endif %}
{{ value }}
{% if run_plots %}

Optimization runs

{% for plot in run_plots %}
{{ plot.caption }}
{{ plot.caption }}{% if plot.hint %}?{% endif %}
{% endfor %}
{% endif %} {% if result_plots %}

Predictions and costs

{% for plot in result_plots %}
{{ plot.caption }}
{{ plot.caption }}{% if plot.hint %}?{% endif %}
{% endfor %}
{% endif %} {% if runs %}

Optimization runs ({{ runs | length }})

{% for column in run_columns %} {% endfor %} {% for row in runs %}{% for value in row %}{% endfor %}{% endfor %}
{{ column }}
{{ value }}
{% 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 %}{% endfor %} {% for pid in fisher.pids %} {% for value in fisher.correlation[loop.index0] %}{% endfor %} {% endfor %}
{{ pid }}
{{ pid }}{{ value }}
{% 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

{% for row in identifiability.rows %} {% endfor %}
parametervalue ci lowerci upper unitidentifiability points
{{ row.pid }}{{ row.value }} {{ row.ci_lower }}{{ row.ci_upper }} {{ row.unit }} {{ row.label }}{% if not row.converged %} not converged{% endif %} {{ row.n_points }}
{% if identifiability.plots %}
{% for plot in identifiability.plots %}
{{ plot.caption }}
{{ plot.caption }}{% if plot.hint %}?{% endif %}
{% endfor %}
{% endif %} {% if identifiability.profile_plots %}

Profiles

{% for plot in identifiability.profile_plots %}
{{ plot.caption }}
{{ 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 }}
{{ plot.caption }}{% if plot.hint %}?{% endif %}
{% endfor %}
{% endif %}

Metrics of the fit mappings

{% for column in mapping_metrics_columns %} {% endfor %} {% for row in mapping_metrics %} {% endfor %}
{{ column }}{% if hints.get(column) %}?{% endif %}
{{ 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 }}

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 }}
{{ plot.caption }}{% if plot.hint %}?{% endif %}
{% endfor %}
{% endfor %}
{% endblock %}