Analysis: {{ result.analysis_name }}
{% if analysis_file %}Source: {{ analysis_file }}
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 }}
-
{% 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.
Red = above {{ threshold }}, Grey = below {{ threshold }}.
Chunk-Level Coverage
Shows where theme matches occur within documents. Each panel represents one theme. Max similarity within each bin.
Each document is divided into {{ n_bins }} equal bins (0-100% of document). All documents have the same width.
Z-scored values with negative scores truncated to 0. Highlights above-average regions.
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.
Theme Trajectories
How theme coverage varies across document position (LOESS-smoothed average across all documents).
Within-Document Variation
Statistics on max-binned similarity values within each document, averaged across all documents.
| 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) }} |
Group-Level Coverage
Mean coverage scores aggregated by document group.
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.
{{ theme.description }}
{% if theme_name in result.top_chunks_per_theme %}-
{% for chunk in result.top_chunks_per_theme[theme_name] %}
-
{{ chunk.filename }} {{ "%.3f"|format(chunk.similarity) }}{{ chunk.chunk_text }}
{% endfor %}
No chunks available.
{% endif %}Group Statistics
Coverage statistics aggregated by document group.
| Group | N Docs | {% for theme_name in result.theme_names %}{{ theme_name[:15] }}{% if theme_name|length > 15 %}...{% endif %} | {% endfor %}
|---|---|---|
| {{ group.group_name }} | {{ group.n_documents }} | {% for theme_name in result.theme_names %}
{{ "%.2f"|format(group.theme_scores[theme_name]) }}
±{{ "%.2f"|format(group.theme_scores_std[theme_name]) }} |
{% endfor %}
Document Details
Coverage scores for each document across all themes.
| Document | {% if result.groups %}Group | {% endif %}Chunks | {% for theme_name in result.theme_names %}{{ theme_name[:12] }}{% if theme_name|length > 12 %}...{% endif %} | {% endfor %}
|---|---|---|---|
| {{ doc.filename }} | {% if result.groups %}{{ doc.group or '-' }} | {% endif %}{{ doc.n_chunks }} | {% for theme_name in result.theme_names %}{{ "%.2f"|format(doc.theme_scores[theme_name]) }} | {% endfor %}
Participant Counts by Threshold
Number of participants (documents) with at least one chunk exceeding each similarity threshold, per theme.
| Theme | {% for t in count_thresholds %}≥ {{ t }} | {% endfor %}
|---|---|
| {{ theme_name[:50] }}{% if theme_name|length > 50 %}...{% endif %} | {% for t in count_thresholds %}{{ threshold_counts[theme_name][t] }} | {% endfor %}
| Total participants | {% for t in count_thresholds %}{{ result.documents|length }} | {% endfor %}
Calibration
Similarity scores have been transformed using a calibration model trained on paraphrases of varying semantic similarity.
Training Information
| 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
| Category | Target | Mean Raw | Range | ||
|---|---|---|---|---|---|
| {{ cat }} | {{ "%.2f" | format(target) }} | {% if calibration_info.metadata.category_stats[cat] %}{{ "%.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) }} | {% else %}- | - | {% endif %}
Calibration Curve
{% if calibration_info.plot_base64 %}Sample Transformations
| Raw | Calibrated |
|---|---|
| {{ "%.3f" | format(pt.raw) }} | {{ "%.3f" | format(pt.calibrated) }} |
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 %}