Analysis: {{ result.analysis_name }}

{% if analysis_file %}

Source: {{ analysis_file }}

{% endif %}

Summary

Themes

{{ result.themes|length }}

Documents

{{ result.documents|length }}

Total Chunks

{{ result.config.n_chunks }}

Chunks/Doc

{{ (result.config.n_chunks / result.documents|length)|round(0)|int }}

Themes Analysed
    {% for theme in result.themes %}
  • {{ theme.name }}
    {{ theme.description }}
  • {% endfor %}

Document-Level Coverage

Coverage scores aggregated across each entire document ({{ result.config.aggregation }} of chunk similarities).

Colour scale from 30th percentile to maximum coverage score.

Theme coverage heatmap (continuous)

Red = above {{ threshold }}, Grey = below {{ threshold }}.

Theme coverage heatmap (thresholded)
{% if normalized_heatmap or absolute_heatmap %}

Chunk-Level Coverage

Shows where theme matches occur within documents. Each panel represents one theme. Max similarity within each bin.

{% if normalized_heatmap %}

Each document is divided into {{ n_bins }} equal bins (0-100% of document). All documents have the same width.

Normalised chunk-level heatmap
{% endif %} {% if normalized_heatmap_zscore %}

Z-scored values with negative scores truncated to 0. Highlights above-average regions.

Z-scored normalised heatmap
{% endif %} {% if absolute_heatmap %}

Chunks grouped by absolute position (groups of ~{{ (result.config.n_chunks / result.documents|length / n_bins)|round(0)|int }} chunks). Documents have variable widths based on length.

Absolute chunk-level heatmap
{% endif %}
{% endif %} {% if theme_trajectories %}

Theme Trajectories

How theme coverage varies across document position (LOESS-smoothed average across all documents).

Theme trajectories across document position
{% endif %} {% if within_doc_variation %}

Within-Document Variation

Statistics on max-binned similarity values within each document, averaged across all documents.

{% for theme_name, stats in within_doc_variation.items() %} {% endfor %}
Theme Avg Max P95
{{ theme_name[:50] }}{% if theme_name|length > 50 %}...{% endif %} {{ "%.3f"|format(stats.avg) }} {{ "%.3f"|format(stats.max) }} {{ "%.3f"|format(stats.p95) }}
{% endif %} {% if group_heatmap %}

Group-Level Coverage

Mean coverage scores aggregated by document group.

Group coverage heatmap
{% endif %}

Top Matching Chunks Per Theme

For each theme, the 50 highest-similarity chunks across all documents. Note that the matching is against the theme text AND the quotes for the theme, so some passages (likely the first few) may have very high similarity scores because they are essentially the same text.

{% for theme in result.themes %} {% set theme_name = theme.name %}

{{ theme.description }}

{% if theme_name in result.top_chunks_per_theme %}
    {% for chunk in result.top_chunks_per_theme[theme_name] %}
  1. {{ chunk.filename }} {{ "%.3f"|format(chunk.similarity) }}
    {{ chunk.chunk_text }}
  2. {% endfor %}
{% else %}

No chunks available.

{% endif %}
{% endfor %}
{% if result.groups %}

Group Statistics

Coverage statistics aggregated by document group.

{% for theme_name in result.theme_names %} {% endfor %} {% for group in result.groups %} {% for theme_name in result.theme_names %} {% endfor %} {% endfor %}
Group N Docs{{ theme_name[:15] }}{% if theme_name|length > 15 %}...{% endif %}
{{ group.group_name }} {{ group.n_documents }} {{ "%.2f"|format(group.theme_scores[theme_name]) }}
±{{ "%.2f"|format(group.theme_scores_std[theme_name]) }}
{% endif %}

Document Details

Coverage scores for each document across all themes.

{% if result.groups %} {% endif %} {% for theme_name in result.theme_names %} {% endfor %} {% for doc in result.documents %} {% if result.groups %} {% endif %} {% for theme_name in result.theme_names %} {% endfor %} {% endfor %}
DocumentGroupChunks{{ theme_name[:12] }}{% if theme_name|length > 12 %}...{% endif %}
{{ doc.filename }}{{ doc.group or '-' }}{{ doc.n_chunks }} {{ "%.2f"|format(doc.theme_scores[theme_name]) }}
{% if threshold_counts %}

Participant Counts by Threshold

Number of participants (documents) with at least one chunk exceeding each similarity threshold, per theme.

{% for t in count_thresholds %} {% endfor %} {% for theme_name in result.theme_names %} {% for t in count_thresholds %} {% endfor %} {% endfor %} {% for t in count_thresholds %} {% endfor %}
Theme≥ {{ t }}
{{ theme_name[:50] }}{% if theme_name|length > 50 %}...{% endif %}{{ threshold_counts[theme_name][t] }}
Total participants{{ result.documents|length }}
{% endif %} {% if calibration_info %}

Calibration

Similarity scores have been transformed using a calibration model trained on paraphrases of varying semantic similarity.

Training Information
{% if calibration_info.metadata.validation %} {% endif %}
Embedding Model {{ calibration_info.metadata.embedding_model }}
Template {{ calibration_info.metadata.embedding_template }}
Training Samples {{ calibration_info.metadata.validation.n_train }}
Test Samples {{ calibration_info.metadata.validation.n_test }}
Category Accuracy {{ "%.1f" | format(calibration_info.metadata.validation.category_accuracy * 100) }}%
Target Values
{% for cat, target in calibration_info.metadata.targets.items() %} {% if calibration_info.metadata.category_stats[cat] %} {% else %} {% endif %} {% endfor %}
Category Target Mean Raw Range
{{ cat }} {{ "%.2f" | format(target) }}{{ "%.3f" | format(calibration_info.metadata.category_stats[cat].mean) }} {{ "%.3f" | format(calibration_info.metadata.category_stats[cat].min) }} - {{ "%.3f" | format(calibration_info.metadata.category_stats[cat].max) }}- -
Calibration Curve
{% if calibration_info.plot_base64 %} Calibration curve {% else %} Raw Similarity Calibrated 0.5 0.75 1.0 0 0.5 1.0 {% for pt in calibration_info.transformation %} {% endfor %} {% endif %}
Sample Transformations
{% for pt in calibration_info.transformation %} {% if loop.index0 % 4 == 0 %} {% endif %} {% endfor %}
Raw Calibrated
{{ "%.3f" | format(pt.raw) }} {{ "%.3f" | format(pt.calibrated) }}
{% endif %}

Configuration

Chunk Size
{{ result.config.chunk_size }} {{ result.config.split_unit }}
Overlap
{{ result.config.overlap }} {{ result.config.split_unit }}
Aggregation Method
{{ result.config.aggregation }}
Embedding Model
{{ result.config.embedding_model }}
Embed Source
{{ result.config.embed_source }}{% if result.config.n_quotes %} ({{ result.config.n_quotes }} quotes){% endif %}
Embedding Template
{{ result.config.embedding_template }}
Heatmap Threshold
{{ threshold }}
Normalised Bins
{{ n_bins }}
Total Documents
{{ result.config.n_documents }}
Total Chunks
{{ result.config.n_chunks_total }}{% if result.config.n_chunks_sampled != result.config.n_chunks_total %} (sampled: {{ result.config.n_chunks_sampled }}){% endif %}
Total Themes
{{ result.config.n_themes }}
{% if result.config.calibration %}
Calibration
Calibrated {{ result.config.calibration.method }} model (trained on {{ result.config.calibration.embedding_model }})
{% endif %}