Technical report · TriboGuard

Counting What a Plate Cannot Tell You

A treatment that halves a cell population may have killed half the cells or stopped half of them dividing. From averages alone, those are not merely hard to separate — they are provably identical.

Method, results and corrections · birth–death inference, conformal abstention, cost-aware design · 925 tests, all code and artifacts reproducible

1 Summary

Cell-viability assays report one number per well. This work shows that number cannot, even in principle, distinguish cell killing from growth inhibition; identifies the quantity that can; and builds a system that refuses to name a mechanism when the evidence does not support one.

The mean of a birth–death process depends on birth minus death. Two treatments with the same net rate — one killing, one stalling — produce identical average trajectories at every timepoint. The variance between replicate wells depends on birth plus death, so the mechanism lives in the spread between wells, which a bulk assay destroys by averaging.

Four consequences follow, each measured rather than argued. Extra timepoints buy almost nothing. Three wells per condition — the shape of most published dose–response work — pin the birth-to-death split only to within a factor of 146. An endpoint assay such as MTS costs four times the plate of live imaging for identical information. And a conformal guarantee calibrated on one experimental design collapses when applied to another.

A fifth result comes from the other end of the pipeline. Imaging is only cheaper than an endpoint assay if a segmenter can see the cells, and measured against the hand-drawn outlines of 34,129 cells in four cell lines, it cannot see the damaged ones. At moderate damage Cellpose finds 85–97% of untouched cells and at most 5% of damaged ones in the same images. The test was pre-registered before three of the four lines were measured, and it replicated on all three. The same blindness biases a morphology readout downward and a count readout upward.

And the same reasoning applied to the study's selectivity claim finds that the contrast it reports needs no selective compound to produce it. A compound that kills nothing and only slows division reproduces the reported effect in the dividing cancer arm, and its absence in the non-dividing normal arm, exactly.

2 The problem

A viability assay measures a population property: total metabolic activity, total ATP, total absorbance. A 40% fall in that signal is consistent with 40% of cells dying, with every cell surviving at 60% of its former metabolic rate, and with any mixture of the two. The reading is the same in all three cases.

This matters because the follow-up experiments diverge. A compound that kills is a candidate cytotoxic agent; a compound that stalls division is a candidate cytostatic one, and the two are developed, dosed and combined differently. A paper that reports the fall and names the mechanism has made a claim its measurements do not carry.

3 The identifiability result

Model a well as a linear birth–death process: each cell divides at rate b and dies at rate d, per hour. Starting from N0 cells, the population at time t has

mean(t) = N₀ · exp((b − d)·t)
variance(t) = N₀ · (b + d)/(b − d) · exp((b − d)·t) · (exp((b − d)·t) − 1)

The mean depends on b − d and on nothing else. So for any treatment, another treatment with a different mechanism and the same net rate produces an identical mean curve — exactly equal in real arithmetic, and equal to within 1×10−12 in floating point. No schedule of extra timepoints helps, because every timepoint measures the same degenerate combination.

Conditionbirthdeath netturnovermean at 48 h variance at 48 h
Control0.0550.0050.0500.060——
Killing (death raised)0.0550.0250.0300.0804220.736 249
Stalling (birth slowed)0.0350.0050.0300.0404220.718 125
Two different mechanisms, identical mean trajectories. The means agree to 1×10−12 at every timepoint tested; the variance across wells differs by exactly 2.00×, the ratio of the turnovers. The variance is the only channel carrying the mechanism.

A sample variance from r wells has r − 1 degrees of freedom. Three wells buy two. This is why replicates are not a statistical nicety in this problem: they are the only channel through which the mechanism is visible at all.

4 Method

The system has four stages, each answering a question the previous one raises.

  1. Estimation. Net rate from the slope of log mean count against time; turnover from a one-parameter regression of the between-well variance onto the model's variance curve. Method-of-moments rather than maximum likelihood, so a wrong number traces to a line rather than to an optimiser.
  2. Calibrated abstention. Split conformal prediction over whole experiments, returning a set of mechanisms that contains the truth at a stated rate. A set of size one is a conclusion; larger sets are the system declining to choose.
  3. Cost-aware design. Ranks extra wells against extra timepoints by information per unit cost, and charges a destructive assay for the wells it destroys.
  4. Failure boundary. Sweeps designs and effect sizes, sorting each into reliable, abstaining, or overconfident.

Simulation is exact rather than Gillespie: a linear birth–death process from n ancestors is a sum of n independent single-ancestor processes with a closed-form law, so a well of 105 cells costs one draw per ancestor per interval instead of one per division event.

5 Results

5.1 The estimator is unbiased, and the uncertainty is the hard part

Over 30 independent datasets at 200 wells, the estimator recovers a true turnover of 0.0600 at 0.0605. It is noisy, not wrong. All the difficulty is in reporting how noisy.

5.2 Wells buy the mechanism; timepoints do not

Designwellstimepointsinterval width
Sparse schedule, few wells331.999
Dense schedule, few wells391.979
Sparse schedule, more wells2430.082
Tripling the number of timepoints moves the turnover interval from 1.999 to 1.979. Multiplying the wells by eight moves it to 0.082. This result is what makes a design tool necessary: if measuring more often fixed the problem, the advice would be free.

5.3 What a design can constrain

Because the interval comes from a chi-squared law, its width depends on the well count alone. That makes the question “how many wells do I need” answerable in closed form, and answerable for a study that never reported its replicate count.

Wells per conditionSplit known to withinRelative interval width
3 — typical published design×145.739.23
12×5.72.38
24×3.31.36
48×2.30.88
66×2.00.71
Two distinct quantities, reported separately because an earlier version of this work conflated them (§9). “Known to within a factor of” is the ratio of the interval's endpoints; the relative width is its span divided by the estimate.

5.4 The assay changes the price, not the information

MTS produces its colour change by lysing cells, so a well cannot be read twice and every timepoint needs its own wells. For a three-well, four-timepoint design that is 12 wells consumed against 3 for live imaging — a cost of 13.80 against 4.80 for identical information.

A convenient property falls out of the estimator: it reads a mean and a variance at each timepoint and never follows one well through time. So a destructive assay costs money here but not information, and switching to imaging is a pure saving rather than a trade.

That holds for the well count. It does not hold unconditionally for what imaging then measures, and §7 puts a number on the gap.

5.5 Coverage holds only within a design

Conformal prediction guarantees coverage when calibration and test data are exchangeable. A three-well experiment is not exchangeable with a thirty-well one, and calibrating on the second while predicting on the first fails in the dangerous direction.

WellsCoverage, pooledConfidently wrong, pooled Coverage, stratifiedConfidently wrong, stratified
30.530.450.970.00
200.930.070.950.05
600.970.030.950.05
Target coverage 0.90. Pooled calibration reaches 0.53 at three wells with 45% of verdicts confidently wrong. Stratifying by design restores the guarantee; at three wells the system then abstains on 100% of experiments and is confidently wrong on none. Thresholds run from 0.895 at three wells to 0.585 at sixty.

5.6 The failure boundary

Each cell below calibrates on its own design and is evaluated on 80 held-out experiments of that design. A cell is overconfident when coverage breaks, or when the answers the system committed to are wrong more often than the nominal level allows.

effect size
wells0.100.250.400.701.20
3no contrastabstainsabstainsoverconfidentoverconfident
6no contrastoverconfidentoverconfidentoverconfidentabstains
12no contrastoverconfidentoverconfidentreliableabstains
24no contrastoverconfidentabstainsoverconfidentreliable
48no contrastabstainsreliablereliablereliable
Six reliable, five abstaining, nine overconfident, five with no contrast to test. The reliable corner is bottom-right: many wells, large effects. Overconfidence concentrates at few wells with large effects — a strong effect makes the system willing to commit while few wells leave it unable to tell which rate moved. The boundary is a gradient rather than a line, and 80 experiments per cell do not resolve it cleanly.

Marginal coverage is not conditional coverage. At six wells and effect 0.25 the system holds 0.91 coverage overall — the guarantee is intact — while 75% of the verdicts it committed to are wrong. The wide sets carry the average for the narrow ones. Split conformal promises the first kind of coverage and not the second, and the gap is a real limitation of the method rather than a bug in this implementation.

5.7 When there is nothing to find

Five cells in the map have only one true mechanism — "no effect" — so they cannot test separation and the classifier sets them aside. They test something else, which that label nearly hid: whether the system invents a mechanism from nothing.

WellsCommits onWrong when it commitsSpurious mechanism claims
30.00—0.0%
60.00—0.0%
120.011.001.2%
240.061.006.2%
480.160.6911.2%
The rate rises with the well count, which reads alarming and is mostly not. The smallest swept effect is a real 10% change in a rate, sitting below the 15% the classifier needs before it calls anything a mechanism. Ground truth says "no effect" while a well-powered experiment is precise enough to resolve the change — and is scored wrong for succeeding. That is a hard threshold on a continuous quantity behaving as hard thresholds do. It is reported anyway, because every laboratory reporting "cytotoxic" or "no effect" is applying some threshold, and the boundary behaves the same way for them.

6 Case study

The system was applied, frozen, to the study that motivated it: a 2022 report on Tribonema aqueous extract against RAW264.7 cells, measured by MTS. The paper is the case study, not the training data — it contains a few dozen numbers, far too few to fit or calibrate anything, and they are the wrong kind. No rates are estimated from it.

What is assessed is whether the design could carry each conclusion drawn from it. Claims declare what they require, the design declares what it provides, and support is set inclusion.

ConclusionVerdictBlocking requirement
The extract affected the cellssupported—
Comparable in size to doxorubicinsupported—
About 40% of the cells diednot establishedcell counts
The surviving 60% were resistantnot establishedcell counts, recovery test
Killing rather than growth inhibitionnot establishedcell counts, replicate variance
A specific death mechanismnot establisheddeath markers
Selective for cancer over normal cellsnot establishedmatched normal population — and see §8
Two of seven conclusions are supported by the design. The reported effect is one of them.

Two absences are findings in their own right. The report states no replicate count anywhere, and its methods section describes 48-hour incubation where every results section describes 24 hours. Neither is resolved here; choosing one would be inventing data.

At an assumed three wells — the most favourable reading — the birth-to-death split would be pinned only to within a factor of about 146, and narrowing that to a factor of two would take roughly 66 wells per condition.

None of this is evidence against the extract having an effect. The reported effect stands. It is a statement about which further conclusions the measurements can carry.

7 The same blindness, one layer up

§5.4 recommends imaging over an endpoint assay, on the grounds that it costs a quarter of the plate for identical information. That recommendation needs a qualification, and the qualification is measurable.

Segmenters are trained on healthy cultures, because that is what annotated datasets contain. If they find damaged cells less reliably than healthy ones, then a measurement built on segmentation is blind in exactly the region where the biology is happening. That is testable without a laboratory: LIVECell ships a hand-drawn outline for every cell, so damage can be applied to known cells in known amounts and the detection rate read off against the truth.

The design is paired inside each image. Every annotated cell is assigned to damaged or untouched by coin flip, both arms sit in the same frame, and so no difference between them can be illumination, focus or confluence. Four cell lines, twenty images each, 34,129 hand-outlined cells, every one scored at five damage severities by three segmenters: the three-class network trained here, a binary U-Net whose mask is split into cells by watershed, and Cellpose. A cell counts as found when one predicted object covers at least half of it.

This result was pre-registered. The hypotheses, the primary endpoint and every pass/fail rule were fixed in preregistration/damage_blindness_v1.json before any result existed for MCF7, SHSY5Y or SkBr3. Each run recorded the plan’s SHA-256 as it started, and the evaluation refuses results scored under any other version, so the rules could not move after the data arrived. A172 is exploratory only, because an earlier and flawed version of this experiment had already been run on it (§9). Cellpose is the primary segmenter because it is the only one this project did not train. The unit of analysis is the acquisition group: the gap is computed per image, and its interval resamples whole groups, because cells in one frame are not independent trials.

Cell lineRole Intact foundDamaged found Gap [95% interval]No-damage control Result
MCF7confirmatory0.850.00+0.848 [+0.801, +0.898][−0.018, +0.004]pass
SHSY5Yconfirmatory0.860.00+0.855 [+0.836, +0.874][−0.032, +0.003]pass
SkBr3confirmatory0.970.05+0.913 [+0.865, +0.952][−0.010, +0.004]pass
A172exploratory0.940.00+0.939 [+0.922, +0.957][−0.003, +0.034]pass
Cellpose at severity 0.6, the pre-registered primary endpoint. Rates are means over images; intervals resample acquisition groups, 15 to 18 per line. The verdict is replicated: the plan’s bar was an interval lower bound above ten percentage points, and every confirmatory line clears it by at least seventy. With no damage applied, every segmenter on every line shows no gap — every interval lies within ±0.034, inside the plan’s ±0.05. The secondary criteria pass on every line as well: all three segmenters clear the bar, the result holds at detection thresholds of 0.3 and 0.7, and the gap never shrinks as damage grows.

7.1 The strongest segmenter is the most blind

One pattern was not pre-registered and is reported as exploratory. At moderate damage the three segmenters part company, and not in the order their general reputations would suggest.

Damaged cells found, severity 0.4 A172MCF7 SHSY5YSkBr3
three-class0.340.680.690.83
U-Net + watershed0.420.800.630.86
Cellpose0.100.050.070.56
Means over images. Cellpose — trained by somebody else on far more data, and the strongest general-purpose segmenter available — finds the fewest damaged cells on every one of the four lines, and a tenth or fewer on three of them, while still finding 0.84 to 0.97 of the untouched cells in the same images. Its cell-size setting was tuned on A172 alone, which may contribute on the other lines; the pre-registered baseline check rules out outright failure, not every mismatch.

7.2 What it costs, in two opposite directions

The consequence is not one number, and getting this wrong was the most instructive mistake in the project. A morphology readout — averaging a shape feature over segmented cells, which is what this project’s treatment pipeline does — is diluted by blindness, because the cells carrying the signal are dropped from the average. A count readout is inflated by the same blindness, because a dying cell that cannot be seen is indistinguishable from one that has gone.

Severity 0.6 Cellpose: morphology shift recovered Cellpose: kill a count reports Three-class: morphology recovered Three-class: kill a count reports
A1720.010.500.170.45
MCF70.000.500.390.37
SHSY5Y0.010.500.480.34
SkBr30.100.470.470.34
Half the cells affected, none killed; means over images. Through Cellpose a morphology endpoint recovers at most a tenth of a real effect, while a count reports close to a 50% kill that never happened. The three-class network is less blind at this severity, and its errors are correspondingly smaller in both directions — the same blindness, in proportion. Both columns come from synthetically damaged cells that are still in the well, and they need different evidence on real cells. A death stain such as propidium iodide can test the morphology column. The count column concerns cells that are damaged but alive — missing a cell that is truly dead is correct for a survival count — so testing it needs a marker for cells dying but not yet dead, such as a caspase reporter.

7.3 What a count can still conclude

Blindness need not end the analysis; it can bound it. Write a treated well relative to its control as cells genuinely absent (a fraction g), cells damaged but present (k), and the rest intact. If intact cells are found at rate h and damaged ones at d, the counted ratio is

R = 1 − g − k·b,    b = 1 − d/h  (the segmenter’s blindness)
g ∈ [ max(0, (1 − R − b) / (1 − b)),  1 − R ]

One observation and two unknowns, so the absent fraction is an interval. It closes to a single value when the segmenter sees damaged cells as well as healthy ones, and opens to the whole range when it sees none of them. The sweep measures b, so the interval can be computed — and the system abstains when it straddles the effect threshold. Note what g is not: separating death from slowed division inside it is still the problem of §3.

SegmenterSeverityBlindness measured Absent, given a 40% count dropVerdict
three-class0.20.00–0.0735–40%resolved
three-class0.40.12–0.710–40%abstain
three-class0.60.60–0.940–40%abstain
U-Net + watershed0.20.01–0.1132–40%resolved
U-Net + watershed0.40.08–0.540–40%abstain
U-Net + watershed0.60.34–0.870–40%abstain
Cellpose0.20.00–0.1827–40%absent, size unresolved
Cellpose0.40.34–1.000–40%abstain
Cellpose0.60.89–1.000–40%abstain
Exploratory, and not part of the pre-registered plan. Suppose the study’s 40% had been measured as an image-based count rather than by MTS — which is what switching to imaging would mean. Each blindness range spans the 95% interval bounds of the gap, divided by the intact rate, across all four lines, which errs toward abstaining. At mild damage the three-class network and the U-Net pin the answer to 35–40% and 32–40%; Cellpose, already slipping, establishes that cells are gone but not how many. From severity 0.4 onward every segmenter’s count is consistent with anything from no cells absent to all 40%, and the system abstains. Imaging buys the answer only while the segmenter can still see the damaged cells.

Synthetic damage is not real damage. What is measured is how a segmenter responds to a controlled loss of contrast, edge definition and interior texture. Whether dying cells in a real plate degrade along those axes is what a real experiment settles — and the source study’s own morphology figure is where to check, since its pale, vacuolated, arrow-marked cells were the ones a segmenter failed to outline.

8 Selectivity the compound did not cause

§6 recorded the study's selectivity claim as unsupported for want of a matched normal population. That is true and it is also the weakest available reading, because it describes something the authors did not do. The stronger question is whether the comparison they did run could have shown selectivity at all.

The two arms were a dividing cancer line and primary peritoneal lymphocytes, which in short-term culture largely do not divide. And “% cytotoxicity” is not measured against the starting population: it is measured against an untreated control read at the same time, which has been dividing all day in one plate and sitting still in the other.

That asymmetry is enough by itself. A compound that stops division and kills nothing removes cells the cancer control would have gained, and is invisible in cells that were never going to divide. The result is a large number in one arm, none in the other, and no selective action anywhere.

The threshold needs no assumptions. Inverting the question removes every unknown: a compound that kills nothing reproduces the reported 40% in 24 hours in any control whose cells divide at least 0.0213 times per hour — one division per cell every 47 hours on average. No replicate count, no assumed growth rate, no raw data — which matters, because the report supplies none of them.

That threshold is a division-event rate, not a growth rate, and the distinction is not pedantry: the two coincide only when nothing dies. A population doubling only every 50 hours while dividing and dying briskly clears this bar, and an earlier draft of this section quoted a doubling time that would have excluded it.

ArmControl behaviour Apparent cytotoxicityCells actually killed
RAW264.7divides, ~12 h doubling40.0%0.0%
Peritoneal lymphocytesstatic0.0%0.0%
One compound, applied identically to both arms, with no selective action of any kind: it stops a third of divisions and adds no death at all. It reproduces the effect reported in the cancer arm and the absence of cytotoxicity reported in the normal one, while killing nothing anywhere. It does not reproduce the rest of the normal-arm result: that viability was reported as more than doubled, and no cell-number model puts a signal above its own untreated control, so that half is left unexplained rather than accounted for. The 12-hour doubling is a stated assumption used only for this illustration; the threshold in the box above is what the argument rests on.

8.1 The contrast measures the division rate

Holding the compound fixed and varying only how fast the normal arm divides shows what the reported gap is actually made of.

Normal armApparent in cancer Apparent in normalApparent gap
never divides (as run)40.0%0.0%+40.0%
doubles every 96 h40.0%9.2%+30.8%
doubles every 48 h40.0%14.2%+25.8%
doubles every 24 h40.0%23.5%+16.5%
doubles every 12 h (matched)40.0%39.0%+1.0%
The compound never changes down this column; only the normal arm's division rate does. Apparent selectivity falls from 40 points to one as the two arms are matched, which makes this a design fault with a fix rather than only a criticism: comparing populations matched for division rate removes the artifact entirely.

8.2 Two further things the reported numbers cannot settle

The same inversion applied to the cancer arm alone reproduces §3 on the study's own figure. A 40% fall at 24 hours is consistent with 40% of the cells genuinely killed at one end and none killed at all at the other, with every mixture in between; the reported number selects no point on that range.

And the study's time course does not come from one unchanging treatment. Read as a constant-rate effect, its three points imply net-rate changes that differ four-fold — 10% at 3 h, 40% at 6 h, and still 40% at 24 h cannot all describe the same steady process. This is a second internal inconsistency, independent of the 24-versus-48-hour contradiction §6 records.

None of this says the extract is not selective. It may well be. The claim here is only that this experiment cannot separate a selective compound from one that slows division, which is the same claim the rest of the report makes about mechanism. One further route is not modelled at all: MTS absorbance is treated throughout as proportional to viable cell number, so a compound that lowers metabolism per cell without touching one produces the identical fall. And the normal arm's viability was reported as having more than doubled — a signal that rose, which needs proliferation or raised metabolism to explain and cannot be read as safety without distinguishing them.

9 What was wrong along the way

Eleven errors were found and corrected during development. Nine were caught by a measurement; the two in the damage experiment were caught by an outside review, and then confirmed by measuring them. They are listed because a system whose purpose is preventing overconfident claims should show its own.

ErrorConsequenceWhat caught it
Turnover interval by bootstrap 100% of three-well resamples collapsed onto the variance floor; the interval came out narrower at 3 wells (0.005) than at 24 (0.030) — maximum confidence at minimum evidence Comparing interval widths across well counts
Guard rejecting a negative denominator Refused to simulate pure killing, the case of most interest Its own unit test
Calibration pooled across designs 0.53 coverage against a 0.90 target; 45% of verdicts confidently wrong Evaluating per design instead of in aggregate
Closed form for minimum calibration size 0.9/(1−0.9) evaluates to 9.000000000000002, so the advertised minimum was one experiment too high at every round confidence A parametrised test at 0.8 and 0.9
Fixed 5% cutoff for “overconfident” At 90% target coverage 10% of answers are expected to be wrong, so the rule demanded better than the guarantee promises and flagged 10 of 25 cells including the easiest Noticing the easiest cells were red
Degenerate effect grid Two whole columns contained only one true mechanism, so they tested nothing about separation while still being scored Counting distinct truths per cell
“Factor” used for relative width Understated the gap nearly fourfold (39 quoted where the ratio is 146) and priced “a factor of two” at 39 wells when it is 66 Computing both quantities before writing them down
Detection bias modelled for the wrong readout §7 first claimed blindness makes a treatment look weaker. The arithmetic underneath was a count readout, where blindness makes it look stronger: at severity 0.6 it manufactures a 50% kill out of nothing A test asserting the two readouts move in opposite directions
Partial correlation on a fully explained series When cell size accounted for the shape index exactly, the residuals were constant and the correlation undefined — the one case the control was built to detect. It surfaced as a warning from inside SciPy rather than as the answer “nothing survives” Running the suite in the pinned environment
Damage leaking into the control arm The blur applied to a damaged cell reached across into its neighbours. On confluent images 89% of the supposedly untouched control cells had pixels altered — in an experiment whose whole claim rests on that arm being untouched. A test had passed throughout, because its two synthetic cells sat 42 px apart Outside review; confirmed by counting altered pixels in every control cell
Cells pooled as independent trials Thousands of cells from twenty frames were summarised as one rate, overstating precision — inconsistent with this project’s own benchmark, which already resampled acquisition groups Outside review
Three of these — the bootstrap collapse, the pooled calibration, and the fixed cutoff — passed every test that checked only point estimates. Each was found by asking whether the uncertainty behaved correctly, not whether the answer looked right.

10 Limitations

11 Reproduction

python scripts/reproduce.py --list     # every stage, in dependency order
python scripts/reproduce.py --fast     # everything except the damage sweep
python scripts/reproduce.py            # everything, including the sweep
python -m pytest                       # the test suite

Every figure in this report is produced by one of those commands and written to a JSON artifact recording the code revision and package versions that made it. The interactive version of the design analysis runs the same closed-form arithmetic in the browser, with chi-squared quantiles tabulated rather than approximated.