Deep methodology knowledge for network meta-analysis including transitivity, consistency assessment, treatment rankings, and model selection. Use when conducting or reviewing NMA.
/plugin marketplace add choxos/BiostatAgent/plugin install choxos-itc-modeling-plugins-itc-modeling@choxos/BiostatAgentThis skill inherits all available tools. When active, it can use any tool Claude has access to.
Comprehensive methodological guidance for conducting rigorous network meta-analysis following NICE DSU and PRISMA-NMA guidelines.
Definition: If we can estimate A vs B directly and B vs C directly, we can estimate A vs C indirectly, provided the studies are sufficiently similar.
Requirements:
Assessment:
For each comparison in network, check:
├── Population similarity
│ - Age, sex, disease severity
│ - Biomarker status, prior treatments
├── Outcome definitions
│ - Same definition of response/event
│ - Same time point of assessment
├── Treatment definitions
│ - Dose, duration, route
│ - Concomitant medications
└── Study design
- Randomization, blinding
- Follow-up duration
Presenting Transitivity Assessment:
Definition: Direct and indirect evidence for the same comparison should agree (within random variability).
Relation to Transitivity:
# netmeta
decomp.design(nma_result)
# Tests overall consistency across network
# Q statistic partitioned into within-design and between-design
# netmeta
netsplit(nma_result)
# gemtc
nodesplit_model <- mtc.nodesplit(network)
Interpretation:
| Direct vs Indirect | Conclusion |
|---|---|
| Similar (p > 0.05) | No evidence of inconsistency |
| Different (p < 0.05) | Possible inconsistency - investigate |
Caution: Multiple testing - expect some false positives.
netheat(nma_result)
# Visual display of inconsistency
# Red: high inconsistency contribution
# Blue: low inconsistency
netrank(nma_result, small.values = "bad")
# P-score: probability of being better than average treatment
# Ranges 0-1
# NOT probability of being best
sucra(mtc_result)
# Similar interpretation to P-score
# Based on cumulative ranking probabilities
rank.probability(mtc_result)
# Full ranking probability matrix
# Prob_best = P(rank = 1)
Critical: Rankings are uncertain - always present with uncertainty measures.
Problems with rankings:
├── Small differences → different rankings
├── Wide credible intervals often ignored
├── Multiple treatments may be effectively tied
├── Rankings don't consider clinical relevance
└── "Best" might have limited evidence
Best Practice:
| Factor | Fixed-Effect | Random-Effects |
|---|---|---|
| Studies similar | ✓ | ✓ |
| Studies different | ✗ | ✓ |
| Few studies per comparison | Consider | Default |
| Inference goal | Included studies | Broader population |
prior_trt = prior_normal(0, sd)
# sd should be large enough to be weakly informative
# Consider scale of effect measure (log OR ~2-3 is large)
prior_het = prior_half_normal(scale)
# Scale depends on expected heterogeneity
# Turner et al. informative priors available
# Lower is better
# Difference of ~3-5 is meaningful
dic(model1)
dic(model2)
Network Structure Assessment:
├── Connectivity
│ - All treatments connected (directly or indirectly)?
│ - Star network? (single common comparator)
│ - Well-connected?
├── Evidence Distribution
│ - Some comparisons well-informed, others sparse?
│ - Imbalanced networks problematic
├── Multi-arm Trials
│ - Must account for correlations
│ - Contribution to network
└── Placebo/Active Control
- Consider clinical relevance of network anchor
# netmeta
netcontrib(nma_result)
# Shows % contribution of each direct comparison to each estimate
netgraph(nma_result,
plastic = FALSE,
thickness = "number.of.studies",
multiarm = TRUE,
points = TRUE)
library(netmeta)
# Fit NMA
nma <- netmeta(TE, seTE, treat1, treat2, studlab,
data = pairwise_data,
sm = "OR",
reference.group = "Placebo",
random = TRUE)
# Network graph
netgraph(nma, plastic = FALSE, multiarm = TRUE)
# Forest vs reference
forest(nma, reference.group = "Placebo")
# League table
netleague(nma)
# Consistency
netsplit(nma)
netheat(nma)
# Rankings
netrank(nma, small.values = "bad")
library(gemtc)
library(rjags)
# Create network
network <- mtc.network(data.ab = arm_data)
# Fit model
model <- mtc.model(network,
likelihood = "binom",
link = "logit",
linearModel = "random")
result <- mtc.run(model, n.adapt = 5000, n.iter = 50000)
# Check convergence
gelman.diag(result)
# Summary
summary(result)
# Rankings
rank.probability(result)
sucra(result)
# Node-splitting
nodesplit <- mtc.nodesplit(network)
ns_result <- mtc.run(nodesplit)
summary(ns_result)
This skill should be used when the user asks to "create a hookify rule", "write a hook rule", "configure hookify", "add a hookify rule", or needs guidance on hookify rule syntax and patterns.
Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.