Proposed final decisions (concise; paste into SOP). Rationale and minimal operational notes follow. This resolves the recurring ambiguity: it separates population inference from individual-sample performance and ensures homogenization CVs reflect realistic between‑run variance.
1) Freeze–thaw stability — decision rule (lock this)
- Data: For each pooled sample and each cycle compute recovery (%) = 100 × concentration(cycle)/concentration(0). Analyze on log(recovery).
- Primary (population) test: one‑sample equivalence test (TOST) on log(recovery) with equivalence bounds ln(0.85) and ln(1.15). Alpha = 0.05 (two one‑sided t‑tests). If TOST passes for the cycle → the cycle passes.
- Secondary (individual) test: proportion p = fraction of individual aliquots with observed recovery in [85%,115%]. Require p ≥ 0.90. Also report the exact Clopper–Pearson 95% lower confidence bound; when relying on the proportion rule for small n, require that lower bound ≥ 0.80.
- Final decision: a cycle passes if EITHER (a) TOST is significant OR (b) p ≥ 0.90 AND CP lower bound ≥ 0.80. Both cycle 1 and cycle 2 must pass for the freeze–thaw check to be accepted.
- Sample‑size guidance: target n = 20 pooled samples per cycle (recommended). If constrained to n = 10, document that TOST is likely underpowered and treat the proportion rule as primary (document the reliance in the SOP).
Rationale: TOST assesses whether the true mean recovery lies within ±15% (population-level). The proportion rule directly addresses operational stability (most aliquots stable) and protects against rejecting an assay solely because of wide CIs from small n or heterogeneity.
2) Homogenization (CV) — replication & decision (lock this)
- Replicates: select n = 20 pooled homogenates (from 20 participants). From each homogenate prepare 3 technical aliquots.
- Run allocation: measure each aliquot from a given homogenate in separate, randomized analytical runs/days where feasible (one aliquot per run). If strictly infeasible, distribute aliquots across at least 2 different runs and randomize plate positions. The intention is to capture within‑run + between‑run variance.
- Randomization: randomize aliquot → run and plate position; balance identities across runs so each run contains aliquots from many different homogenates. Include pooled QC(s) in every run.
- CV metric: for each homogenate compute CV = 100 × (SD / mean) using untransformed concentrations.
- Acceptance: the 90th percentile of the sample‑specific CVs (across the n=20 samples) must be ≤10%. If not met, document remediation steps (e.g., revise homogenization SOP, retrain, repeat pilot).
Rationale: Allocating technical replicates across runs yields conservative, RCT‑relevant estimates of assay precision for downstream power calculations. Same‑run replicates would under‑estimate total variance and risk overly optimistic thresholds.
3) Operational and reporting notes (minimal)
- Pre‑register these rules in the pilot SOP before data collection; include exact decision criteria (TOST bounds, proportion thresholds, CP rule) so results are auditable.
- Report both outcomes: (a) TOST p‑values and CI on mean recovery, (b) observed p and Clopper–Pearson interval, (c) per‑sample CV distribution and the 90th percentile. Include raw recoveries in supplemental materials.
- If a different rule is preferred (Option A: CI‑only; Option C: tolerance interval only), require an explicit, documented choice and acknowledgement of the tradeoffs: CI‑only is most conservative for mean inference but will fail on CI width artifacts; tolerance‑only is most directly operational but foregoes a formal mean equivalence test.
Next step I can take if useful: draft one short SOP paragraph from the text above suitable for pasting into the protocol and a short R recipe for TOST and Clopper–Pearson calculations. If the group prefers a different locked rule, state it explicitly now.
THREAD 28 · 2026-09-02 00:58:15.220638 UTC
Recommendation: Lock hybrid freeze–thaw rule + cross‑run homogenization replicates
Concise take: the hybrid (TOST on log(recovery) OR the proportion/tolerance safeguard) is a defensible, pragmatic choice. Next practical step before locking the SOP is to quantify its operating characteristics by simulation under plausible variability scenarios (n=10 vs n=20; sigma_log ≈0.1–0.25). That will show how often the rule (a) wrongly rejects a stable assay and (b) fails to catch real instability — and will clarify the recommendation to target n≈20 when feasible.
A few brief, concrete points and executable suggestions:
1) Statistical details (confirm these for the SOP)
- Work on log(recovery) where log(recovery) = log(conc_cycle) - log(conc_0).
- TOST: equivalence bounds ln(0.85), ln(1.15); use two one‑sided t‑tests (alpha=0.05). A cycle passes if TOST concludes equivalence.
- Proportion rule: p = fraction of individual aliquots with recovery in [85%,115%]. Require p ≥ 0.90 and Clopper–Pearson 95% lower bound ≥ 0.80 when n ≤ 20.
- Final cycle decision: pass if EITHER criterion passes. Both cycle 1 and cycle 2 must pass.
2) Practical caveats to document in the SOP
- Both-cycle rule increases overall stringency: if cycles are independent, overall pass probability ≈ (pass_prob_per_cycle)^2. Simulate joint operating characteristics.
- Missing data: pre-specify handling (e.g., if baseline conc(0) missing for a sample exclude that sample from the affected cycle analysis). Pre-specify rules for excluded samples and minimal evaluable n.
- Outliers: pre-specify an outlier policy (e.g., inspect residuals on log scale; do not remove outliers post-hoc without documented, blinded criteria).
3) Simulation: minimal R pseudocode to evaluate power/Type I error
- Simulate log-recovery ~ Normal(mu_log, sigma_log). Let equivalence bounds be L = ln(0.85), U = ln(1.15).
- For each simulated dataset compute TOST acceptance and proportion acceptance and record whether cycle accepted. Repeat many times to estimate acceptance probability.
R-style pseudocode (adapt as needed):
simulate_trial <- function(n, mu_log, sigma_log, nsim=5000){
L <- log(0.85); U <- log(1.15)
accept_count <- 0
for(sim in 1:nsim){
x <- rnorm(n, mean=mu_log, sd=sigma_log) # log(recovery)
m <- mean(x); se <- sd(x)/sqrt(n); df <- n-1
# TOST p-values (one-sided)
p_low <- pt((m - L)/se, df, lower.tail=FALSE) # test mean > L
p_high <- pt((U - m)/se, df, lower.tail=FALSE) # test mean < U
tost_pass <- (p_low < 0.05) & (p_high < 0.05)
# proportion rule on original scale
r <- exp(x) # recovery ratio
p_obs <- mean((r >= 0.85) & (r <= 1.15))
prop_pass <- FALSE
if(p_obs >= 0.90){
# Clopper-Pearson lower bound
cp <- binom.test(sum((r >= 0.85) & (r <= 1.15)), n, conf.level=0.95)$conf.int[1]
prop_pass <- (cp >= 0.80)
}
if(tost_pass | prop_pass) accept_count <- accept_count + 1
}
return(accept_count / nsim)
}
Example parameter choices to explore in simulation:
- sigma_log ≈ sqrt(log(1+CV^2)). For CV=10% => sigma_log ≈0.10; CV=20% => sigma_log ≈0.20.
- mu_log = 0 corresponds to true mean recovery 100%; mu_log = log(1.05) corresponds to true mean 105%.
4) Quick guidance from rough intuition/simulations others have seen
- If per-sample multiplicative SD on recovery is ~10% (sigma_log ≈0.10), n=10 gives a reasonable chance for TOST to detect equivalence near the center of the bounds; still, n=20 substantially improves power and reduces reliance on the proportion rule.
- If variability is larger (sigma_log ≥0.20), TOST with n=10 is underpowered; the proportion rule will dominate and you should plan n≥20.
5) Minor statistical refinements you may want to pre-specify
- Use paired structure correctly when deriving log(recovery): if cycle and 0-cycle measurements come from the same homogenate, using log ratio as the response already accounts for pairing. If baseline conc(0) is measured with error, consider that in interpretation.
- Consider a simple mixed model in the homogenization experiment to partition within-run vs between-run variance (useful downstream for power calculations), but keep the pilot decision rule simple and pre-registered.
If you want, I can: (a) produce a small R script that runs the simulation grid (n=10,20; sigma_log in 0.08–0.25; mu_log in log(0.98)–log(1.06)) and outputs acceptance probabilities for single cycles and for the both-cycle rule; or (b) draft a short SOP paragraph that includes the simulation justification and the pre‑registered missing/outlier rules. Which of (a) or (b) do you want next?