Bundle review table

Test 07 — Hub proteins are essential (H314)

Supplied working report; original verdicts not validated.

Review status: Needs review. This is an archival source note, not a passed proof.

README.md

# Test 07 — Hub proteins are essential (H314)

## Result

The claim fails on P2 and P3. Degree strongly correlates with
essentiality — the centrality–lethality baseline is present — but adding partner
redundancy to a degree-only model raises out-of-sample AUC by 0.0056 (95% CI
0.0025–0.0109) in the full model and 0.0002 in the ratio model, against a
pre-specified 0.03 threshold. A label permutation rerunning the cross-validation
gives p = 0.726 and 0.985; such gains are ordinary under the null (mean +0.0049,
SD 0.0149). The within-degree association runs the other way: the highest redundancy
tercile is **more** likely to be essential, not less (Mantel–Haenszel OR 1.37, 95% CI
1.15–1.63, p = 0.0005; clustering OR 1.45, 1.24–1.71, p = 0.001).

## What was asked

> "The probability that a protein is essential is set by the ratio of its interaction
> degree to the redundancy of its partners, not by degree alone."

P1: degree predicts essentiality (the baseline). P2: redundancy terms (clustering,
mean partner degree) improve out-of-sample prediction. P3: within degree strata,
higher-redundancy proteins are less likely to be essential. Support required an AUC
gain of at least 0.03 (CI excluding zero, permutation p < 0.05) **and** a
within-stratum OR below 1 (CI excluding 1). Pre-specification: `hypothesis.md`.

## Design

STRING v12.0 *S. cerevisiae* links were thresholded at `combined_score >= 700`, with
self-loops dropped and `4932.` stripped. The file lists every interaction twice;
collapsing unordered pairs leaves 104,188 edges and 5,791 nodes.
SGD null-allele phenotypes define essentiality: any `inviable` null allele means
essential; otherwise any `viable` null allele means non-essential; neither is
excluded. That gives 6,266 labelled genes (1,245 essential); the graph intersection
is **5,403 proteins, 1,188 essential (22.0%)**.

Features, computed on all graph nodes then subset to labelled proteins: log10 degree,
local clustering, mean partner degree, and log10(degree / mean partner degree).
Three hand-written IRLS logistic models (M1 degree; M2 degree + clustering + mean
partner degree; M3 degree + log ratio) used in-fold standardisation and 20 repeats of
stratified 10-fold CV, folds shared across models. Gains were paired-bootstrapped over
proteins (2,000 resamples) and tested with 200 global label permutations rerunning the
full CV. For P3, proteins were ranked into degree deciles and then within-decile
terciles of each redundancy score; the Mantel–Haenszel OR compares top and bottom
terciles across the ten strata, with a stratified bootstrap CI and 2,000
within-decile permutations.

## Prediction verdicts

**P1 — supported (baseline only).** Degree alone reaches AUC 0.7569 (repeat SD
0.0002) and Spearman rho 0.369 (permutation p = 0.0005, the 2,000-permutation
resolution floor). The essential fraction rises from 0.061 in the lowest degree
decile to 0.487 in the highest. This is the rival explanation, not evidence for it.

**P2 — refuted.** The M2 gain is 0.0056 and the M3 gain 0.0002, far below 0.03.
Permutation p = 0.726 and 0.985; the null gain distributions have mean +0.0049
(SD 0.0149) and +0.0047 (SD 0.0130). The protein bootstrap CI for M2 excludes zero,
but it is conditional on the fitted scores and omits the label/refitting variability
the permutation test measures; the permutation test is decisive. BH q = 0.968 and
0.985.

**P3 — refuted, opposite direction.** MH OR 1.37 (1.15–1.63, p = 0.0005) for
mean-partner-degree redundancy and 1.45 (1.24–1.71, p = 0.001) for clustering, both
q = 0.002. The claim requires OR < 1. The reverse association is concentrated in
degree deciles D5–D9; the ratio score flips again in D10 (0.47 in T1 versus 0.41
in T3).

## Sensitivity

At `>= 400` (281,178 edges, n = 5,783) the picture is unchanged: M2 gain 0.0119
(0.0080–0.0168), p = 0.323; ratio OR 1.35 (1.15–1.58), clustering OR 1.75
(1.48–2.06). At `>= 900` (53,176 edges, n = 4,430) the gains are −0.0035 and −0.0004
(p = 0.841, 0.955) and the ORs attenuate: ratio 1.18 (0.99–1.40), clustering 1.02
(0.86–1.21). The claim is refuted at every threshold; the reverse association is
present at 400 and 700 but not at 900.

## What the test cannot see

STRING is a confidence-scored association network, not a complete interactome;
degree is measured with error, and missing edges attenuate redundancy signals. SGD
labels are observational and heterogeneous across strains and experiments; 202 genes
with both inviable and viable null alleles were labelled essential under the "any
inviable" rule, adding noise. Clustering is zero-inflated at low degree. The
permutation null shuffles labels globally, so it asks whether the gain exceeds
chance, not whether redundancy adds value conditional on a correct degree model.
Nothing here is causal.

## What would change the answer

A threshold-robust AUC gain of at least 0.03 with p < 0.05 would support P2. A
within-stratum OR below 1 (CI excluding 1), stable across 400/700/900, would support
P3. A single-strain essentiality definition, a more complete interactome, or a
different operationalisation of redundancy could change the result — but any such
test run now would be post hoc.

## Numbers and where they live

| Number | `results.json` key |
|---|---|
| n = 5,403; 1,188 essential | `thresholds.700.n`, `.n_essential` |
| AUC 0.7569 / 0.7624 / 0.7571 | `thresholds.700.auc` |
| Gains, CIs, permutation p, nulls | `p2_redundancy_prediction` |
| ORs and P3 p-values | `p3_within_stratum` |
| BH q | `multiplicity.bh_q` |
| Spearman 0.369, p 0.0005 | `p1_baseline.spearman_degree_essential` |
| Sensitivity | `sensitivity.400`, `sensitivity.900` |

## Disclosure

AI-assisted (DeepSeek coding agent), not peer reviewed. Observational data:
"associated with" is the strongest verb available. Not medical, clinical or safety
advice.

hypothesis.md

# Test 07 — Hub proteins are essential (H314)

**Claim, verbatim** (Original Theories, Volume XVI, 30 October 2026):

> "The probability that a protein is essential is set by the ratio of its interaction degree to the redundancy of its partners, not by degree alone."

**Published at:** https://incoprea.com/research-library/original-theories-vol16-20261030/

**Written:** 2026-10-30T17:23Z, before any association between graph features and
essentiality was computed. Only file structure, row counts and label counts had been
inspected at this point (field discovery and feasibility), never an AUC, an odds ratio,
or an essentiality-by-feature table.

## Predictions

- **P1** — degree predicts essentiality (the centrality–lethality rule). This is the
  baseline that the claim has to beat, not a test of the claim by itself.
- **P2** — adding redundancy terms (clustering coefficient, mean partner degree)
  improves out-of-sample prediction of essentiality beyond degree alone.
- **P3** — within degree strata, higher-redundancy proteins are less likely to be
  essential: the ratio, not the degree.

## Pre-specified support / refute criteria

The claim is **supported** only if **both** hold:

1. **P2:** the out-of-sample AUC gain from redundancy is **≥ 0.03**, its paired
   bootstrap 95% CI excludes zero, and the label-permutation p-value is < 0.05.
2. **P3:** the within-degree-stratum Mantel–Haenszel odds ratio for essentiality
   (highest vs lowest redundancy tercile) is **below 1** (more redundancy, less
   essentiality) with a 95% CI excluding 1.

The claim is **refuted** if the gain is indistinguishable from zero, or if the
within-stratum association disappears once degree is held fixed.

P1 is reported as a descriptive baseline. Failing P1 would make the whole framing
moot; passing P1 does not support the claim, because degree alone is the rival
explanation.

## Analysis plan fixed in advance

### Data

- **Graph.** STRING v12.0 *Saccharomyces cerevisiae* protein links,
  `https://stringdb-downloads.org/download/protein.links.v12.0/4932.protein.links.v12.0.txt.gz`.
  Primary threshold `combined_score >= 700`; self-loops dropped (there are none);
  `4932.` stripped from both identifier columns. Features are computed on **all**
  nodes of the filtered graph, including proteins without an essentiality label, so
  that degree and partner degree are not distorted by label availability.
- **Essentiality.** SGD `phenotype_data.tab`,
  `https://downloads.yeastgenome.org/curation/literature/phenotype_data.tab`.
  Rows with `Mutant Type == "null"`. A gene (column `Feature Name`, the systematic
  ORF name) is labelled **essential (1)** if any null-allele row has
  `Phenotype == "inviable"`; **non-essential (0)** only if it has no inviable null
  row but at least one null row with `Phenotype == "viable"`. Genes with neither are
  excluded. A gene with both inviable and viable null alleles is labelled essential
  under the "any inviable" rule; the number of such genes is reported.
- **Analysis sample.** Proteins present in the threshold-700 graph **and** carrying a
  definitive label. n is whatever that intersection gives; no post-hoc exclusions.

### Features (computed on the undirected, unweighted thresholded graph)

- `d` = degree; feature `log10 d` (natural or base-10 log is a monotone rescaling;
  base 10 is used as the brief states).
- `C` = local clustering coefficient, `2 * triangles(i) / (d_i * (d_i - 1))`, 0 when
  `d_i < 2`.
- `m` = mean degree of the protein's partners.
- `R = m / d` (redundancy score); feature `log10(R)` enters M3 as
  `log10(degree / mean partner degree)`.

### Models

Hand-written logistic regression, fitted by iteratively reweighted least squares
(IRLS, numpy only), with an intercept and a small L2 penalty `lambda = 1e-4` on the
coefficients (not the intercept) for numerical stability. Features are standardised
using **training-fold** means and standard deviations only; the same transform is
applied to the held-out fold. M1: `log10 d`. M2: `log10 d + C + m` (raw `m`, as the
brief specifies). M3: `log10 d + log10(d/m)`.

### Cross-validation and uncertainty

- 20 repeats of stratified 10-fold CV, folds stratified by the essentiality label.
  Each repeat uses its own seeded partition; **all three models share the identical
  folds within a repeat**, and the same partitions are reused for every permutation.
- Out-of-fold predicted probability for every protein in every repeat. AUC per repeat
  per model, then mean and SD across the 20 repeats. For the paired bootstrap, each
  protein's predictions are averaged over the 20 repeats.
- **Gain** = AUC(redundancy model) − AUC(M1). Paired bootstrap over proteins, 2,000
  resamples, percentile 95% CI, seed 20261030.
- **Label-permutation p-value**: 200 permutations of the essentiality label (global,
  two-sided), each rerunning the full 20×10 CV for all three models; p = (1 + number
  of permutations with |gain| ≥ |observed gain|) / 201.

### P3

- Degree deciles are formed by ranking the analysis sample on `d` and cutting into ten
  equal-count bins (stable tie order by ORF name). Decile degree ranges are reported.
- Within each degree decile, proteins are split into terciles of the redundancy score
  by the same rank rule: T1 lowest, T3 highest. This is done separately for
  `R = m/d` and for `C`.
- Report the essential fraction in each (decile × tercile) cell.
- **Mantel–Haenszel-style stratified odds ratio**, exposure = T3, reference = T1,
  outcome = essential, strata = degree deciles:
  `OR_MH = sum(a_i d_i / n_i) / sum(b_i c_i / n_i)`. A Haldane–Anscombe 0.5 is added
  to all four cells of any stratum containing a zero cell; the number of such strata
  is reported.
- **Stratified permutation test**: 2,000 permutations of the essentiality label
  *within* each degree decile (preserving each stratum's essential count), two-sided
  on |log OR|; p = (1 + hits) / 2001.
- **CI**: stratified bootstrap over proteins, resampling within each degree decile and
  preserving stratum sizes, 2,000 resamples, percentile 95% CI.

### Multiplicity

The primary family is four tests: the two model gains (M2−M1, M3−M1) and the two P3
stratified permutation tests (`R` and `C`). Benjamini–Hochberg q-values are reported
for this family. The brief's support criterion is stated in terms of the raw
permutation p < 0.05; that is the decision rule. The BH q-values are reported alongside
so a reader can see whether a verdict survives the family correction; any divergence
between the two is stated explicitly.

### Sensitivity (declared in advance, not part of the primary family)

- Rebuild the graph at `combined_score >= 400` and `>= 900`; rerun the full model
  comparison (20×10 CV, gains, bootstrap CI) and P3 (`R` and `C`, MH OR, bootstrap CI)
  on each. Report whether the support criteria hold. These are sensitivity analyses,
  not additional primary tests, and are not used to rescue a failed primary result.

### What would change the answer

A gain below 0.03 or a CI spanning zero refutes P2. A within-stratum OR at or above 1,
or a CI spanning 1, refutes P3. If the sign reverses under the higher or lower STRING
threshold, the result is threshold-dependent and the claim is not established. If the
effect is present only for clustering and not for mean partner degree (or vice versa),
the "ratio" wording is not supported even if P2 passes.

Included code and results