Data Analysis
umap-tsne-analysis
Performs sample-level dimensionality reduction and visualization on abundance or OTU-style matrices with a companion group file, generating UMAP and/or t-SNE coordinates and scatter plots for group separation assessment.
85100Total Score
Core Capability
85 / 100
Functional Suitability
11 / 12
Reliability
10 / 12
Performance & Context
7 / 8
Agent Usability
13 / 16
Human Usability
7 / 8
Security
11 / 12
Maintainability
10 / 12
Agent-Specific
16 / 20
Medical Task
22 / 25 Passed
90Both UMAP and tSNE on OTU matrix with 3 groups
5/5
87UMAP-only with custom column names and no normalization
5/5
84Single-group input
4/5
85Both methods with 120-second timeout
4/5
81Partial sample ID overlap between group file and matrix
4/5
Veto GatesRequired pass for any deployment consideration
Skill Veto✓ All 4 gates passed
✓
Operational Stability
System remains stable across varied inputs and edge cases
PASS✓
Structural Consistency
Output structure conforms to expected skill contract format
PASS✓
Result Determinism
Equivalent inputs produce semantically equivalent outputs
PASS✓
System Security
No prompt injection, data leakage, or unsafe tool use detected
PASSResearch Veto✅ PASS — Applicable
| Dimension | Result | Detail |
|---|---|---|
| Scientific Integrity | PASS | No fabrication of statistical values; dimensionality reduction outputs computed by Rtsne and umap packages on user data |
| Practice Boundaries | PASS | No medical diagnoses; skill produces visualization coordinates and plots, not clinical conclusions |
| Methodological Ground | PASS | t-SNE with perplexity and UMAP with n_neighbors are standard approaches; Hellinger normalization appropriate for abundance data; single-group hard stop is methodologically correct |
| Code Usability | PASS | Syntactically correct; both methods use well-maintained R packages; timeout wrapper with with_timeout() is correct; no infinite loops; clean exit codes |
Core Capability85 / 100 — 8 Categories
Functional Suitability
Covers both methods independently and together, custom column resolution, normalization control, and timeout; minor gap: no explicit handling documented for datasets where n_samples < perplexity
11 / 12
92%
Reliability
Seven SKILL_* codes including SKILL_TIMEOUT; conditional R.utils dependency is correct; validate_groups() enforces design requirements; one gap: SKILL_SAMPLE_MISMATCH does not list specific mismatched IDs
10 / 12
83%
Performance & Context
SKILL.md is 314 lines within budget; references directory for algorithm details; version-pinned dependency baseline in dependencies.lock.tsv; one minor gap: no per-dataset-size timeout guidance
7 / 8
88%
Agent Usability
Agent Response Contract specifies 5 outputs; When to Read External Files table present; three Examples cover common scenarios; one gap: error messages lack specific ID lists; feedback for single-group case does not identify the group
13 / 16
81%
Human Usability
Natural trigger language; When Not to Use clear; prerequisites section clearly warns packages must be installed; Forgiveness: strict validation correct; one gap: package-before-file error ordering documented in troubleshooting note
7 / 8
88%
Security
No hardcoded credentials; no eval/exec; norm_method passed to vegan::decostand() but limited to documented string choices; one minor gap: norm_method not validated against allowed vegan choices
11 / 12
92%
Maintainability
Modular 7-script structure; dependency lock file adds reproducibility; testthat coverage mentioned in Implementation Checklist; one gap: install_dependencies.R not validated as part of polished package; no version lock integration in main flow
10 / 12
83%
Agent-Specific
Precise trigger language for UMAP and t-SNE; SKILL.md under 500 lines; idempotent via fixed seed; escape hatches present; conditional R.utils dependency is elegant; minor gap: no documentation of recommended perplexity ranges for different sample counts
16 / 20
80%
Core Capability Total85 / 100
Medical TaskExecution Average: 85.4 / 100 — Assertions: 22/25 Passed
90
Canonical
Both UMAP and tSNE on OTU matrix with 3 groups
5/5 ✓
87
Variant A
UMAP-only with custom column names and no normalization
5/5 ✓
84
Edge
Single-group input
4/5 ✓
85
Variant B
Both methods with 120-second timeout
4/5 ✓
81
Stress
Partial sample ID overlap between group file and matrix
4/5 ✓
90
Canonical✅ Pass
Both UMAP and tSNE on OTU matrix with 3 groups
Full workflow documented; both methods independently executable; set.seed applied
Basic 36/40|Specialized 54/60|Total 90/100
✅A1Output routes to CLI with required parameters
✅A2Both method workflows documented and independently executable
✅A3set.seed applied for reproducibility
✅A4SKILL_* codes cover all failure modes including SKILL_TIMEOUT
✅A5Scope rejection defined for DEG, scRNA-seq, and clustering without group file
Pass rate: 5 / 5
87
Variant A✅ Pass
UMAP-only with custom column names and no normalization
Column resolution flexible; normalize=FALSE bypasses vegan; UMAP-only produces only UMAP outputs
Basic 35/40|Specialized 52/60|Total 87/100
✅A1sample_id_col and group_col resolution implemented
✅A2n_neighbors validated greater than 1
✅A3normalize FALSE skips vegan decostand
✅A4UMAP-only mode produces only UMAP outputs
✅A5Normalization method documented in Methods section
Pass rate: 5 / 5
84
Edge✅ Pass
Single-group input
SKILL_INVALID_PARAMETER correctly triggered; rationale documented; group name not shown in error
Basic 34/40|Specialized 50/60|Total 84/100
✅A1SKILL_INVALID_PARAMETER triggered for single-group input
✅A2Rationale for hard stop documented in SKILL.md
✅A3At least 2 samples per group requirement enforced
❌A4Error message identifies which group is the only one found
✅A5Scope rejection for analyses without group file defined
Pass rate: 4 / 5
85
Variant B✅ Pass
Both methods with 120-second timeout
SKILL_TIMEOUT documented; R.utils conditionally required; timeout wraps both methods; no size-based guidance
Basic 34/40|Specialized 51/60|Total 85/100
✅A1SKILL_TIMEOUT error code documented in Error Handling table
✅A2R.utils only required when timeout greater than 0
✅A3Timeout wraps both UMAP and tSNE workflows
❌A4Recommended timeout values for different dataset sizes documented
✅A5Timeout 0 disables the limit and is documented
Pass rate: 4 / 5
81
Stress✅ Pass
Partial sample ID overlap between group file and matrix
SKILL_SAMPLE_MISMATCH triggered; IDs not listed; zero-abundance removal documented
Basic 33/40|Specialized 48/60|Total 81/100
✅A1SKILL_SAMPLE_MISMATCH triggered for ID mismatch
✅A2No fuzzy-matching attempted
❌A3Mismatched sample IDs listed in error message
✅A4Zero-abundance sample removal post-alignment documented
✅A5Package-before-file error ordering documented
Pass rate: 4 / 5
Medical Task Total85.4 / 100
Key Strengths
- Conditional R.utils dependency (only required when timeout > 0) demonstrates thoughtful dependency management
- Version-pinned dependency baseline in dependencies.lock.tsv enables reproducibility audits across environments
- Flexible column name resolution via resolve_sample_id_col() and resolve_group_col() reduces input format rigidity
- Correct methodological hard stop for single-group inputs with documented rationale
- SKILL_TIMEOUT with R.utils setTimeLimit() wrapper provides reliable execution bounds for large datasets