Hub Proteins Are Essential
Supplied working report; original verdicts not validated.
Review status: Held for correction. This is an archival source note, not a passed proof.
README.md
# Hub Proteins Are Essential **Verdict: refuted as stated** (posted hypothesis, Incoprea Research Vol. XVI #60). Interaction degree predicts essentiality, and it does so on its own: the degree-only model reaches cross-validated AUC 0.756, and essential proteins have a median of 39 partners against 12 for the rest. What the proposal adds on top of that — the redundancy of a protein's partners — is real but negligible: **ΔAUC = 0.0048** (95% CI over repeats 0.0047–0.0049; gene-level bootstrap 0.0013–0.0093), below the pre-specified 0.010 practical floor and inside the label-permutation null (**p = 0.34**). The within-degree-decile association that looks like support in the simplest specification (**OR 0.504**, 0.41–0.62) collapses once continuous degree is controlled (**OR 0.93**, 0.80–1.08) — it is residual collinearity with degree, not redundancy. There is one result the proposal did not anticipate. Clustering, the other structural proxy for "partners that can cover for each other", runs in the **opposite** direction: at fixed degree, essential proteins sit in *more* clustered neighbourhoods (OR 1.24, 1.15–1.35). Dense local neighbourhoods, in this network, mark essential complexes rather than redundant ones. ## The proposal > **Claim.** "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." > **Mechanism.** "A hub can be bypassed if its partners are redundant; essentiality > depends on whether losing it disconnects a function." > **Prediction.** "Essentiality should track the ratio." > **Refute criterion.** "Essentiality tracking degree would remove redundancy." `hypothesis.md` fixed two tests before the final run. **P1**: does anything beyond log degree improve cross-validated prediction of essentiality, by at least 0.010 AUC? **P2**: within degree deciles, is a higher redundancy ratio associated with *lower* essentiality, with the effect surviving an explicit continuous-degree control (S2)? The verdict rule was fixed in advance: supported only if both pass; refuted if P1 fails and P2 fails or runs opposite. ## Data STRING v12.0 *S. cerevisiae* protein links, `combined_score >= 700` — 208,376 directed rows out of 2,824,842, collapsed to **104,188 unique undirected edges** over **5,791 proteins** (31 components; 98.7% in the giant component). STRING identifiers were mapped to SGD standard names, one-to-one. Essentiality from SGD `phenotype_data.tab` (201,632 rows): a gene is essential if it has at least one null-mutant record with phenotype `inviable`, non-essential if it has null records but none inviable, excluded if it has no null record. That yields **5,553 labelled genes, 1,188 of them essential (21.4%)**, and 238 graph nodes excluded for want of a label. The redundancy ratio is the mean degree of a protein's partners divided by its own degree — the degree-normalised statement of "can the partners route around this protein". Because the mean neighbour degree is itself a degree sum, the ratio is mechanically tied to 1/degree; that is exactly why the decisive test is run inside degree strata. ## Result 1 — degree does the work | Model | Predictors | CV AUC (10-fold × 20 repeats) | |---|---|---| | M1 | log degree | **0.7555** | | M2 | log degree + clustering + log mean-neighbour-degree | **0.7603** | ΔAUC = +0.0048. The repeat-to-repeat interval is very narrow (0.0047–0.0049) because it measures fold noise only; the honest sampling interval, resampling genes, is 0.0013–0.0093, and the pre-specified floor is 0.010. The label-permutation null, which destroys the degree signal along with everything else, gives p = 0.34: the increment is not distinguishable from chance at that resolution. The sharper **within-degree-decile feature rotation** — permuting clustering and mean neighbour degree among genes of similar degree, labels and degree held fixed — gives **p = 0.005**, so the increment is real, but it is about half an AUC point. Both nulls are reported because they answer different questions, and the disagreement between them is the result: there is a small genuine redundancy signal, far too small to carry the claim. Degree alone is also the larger share of the joint signal: **99.4%** of the AUC achieved by the full model is already achieved by log degree. ## Result 2 — the decile analysis is collinearity Logistic models of essentiality within degree deciles, OR per 1 SD of the redundancy ratio, percentile bootstrap over genes: | Specification | OR (95% CI) | Reading | |---|---|---| | S0 — unadjusted | **0.198** (0.138–0.283) | strong raw association, direction the mechanism predicts | | S1 — degree-decile fixed effects | **0.504** (0.410–0.620) | survives decile dummies | | S2 — decile FE + continuous log degree | **0.932** (0.802–1.083) | collapses to the null | The top decile spans degrees 86–440, so a decile dummy leaves a strong within-decile gradient of 1/degree — precisely the collinearity the claim must survive. It does not. The pre-specified S2 test fails, and the pre-specified reading of S1-significant-but-S2-null is residual degree collinearity. The companion analysis of clustering makes the same point from the other side: clustering is positively associated with essentiality at fixed degree (**OR 1.24**, 1.15–1.35), which is the opposite of the bypass mechanism. ## Sensitivity | Variant | ΔAUC | S2 OR (95% CI) | Verdict moves? | |---|---|---|---| | STRING threshold 400 (281,178 edges) | 0.0112 | 1.091 (1.023–1.163) | no — P2 fails, and now runs opposite | | Drop degree-1 proteins | 0.0060 | 1.001 (0.898–1.116) | no | | Alternative proxy (partner clustering) | 0.0071 | 1.327 (1.209–1.458) | no — P2 opposite | | Drop discordant labels (both null phenotypes) | 0.0057 | 0.919 (0.772–1.094) | no | The one variant that crosses the ΔAUC floor (threshold 400) does so by 0.001 while its conditional odds ratio turns significantly positive. Across every specification the verdict is the same: the redundancy term does not deliver what the claim requires. ## What this test cannot see STRING is a database of evidence, not a measurement of physical interaction: its scores mix experiments, databases, text mining and co-expression, and the 700 cut is a convention. Essentiality is a laboratory phenotype under one growth condition in one strain background; genes that are dispensable in rich medium but required elsewhere are labelled non-essential here. The graph is static — it cannot see compensatory rewiring, which is the mechanism the proposal invokes. "Redundancy" is proxied by three graph quantities (mean neighbour degree, its ratio to own degree, partner clustering), none of which measures functional redundancy; a paralogue pair with low connectivity is functionally redundant and is invisible to all three. The analysis is cross-sectional and observational, so even a clean association would not be causal. Finally, the AUC is a ranking metric over a class-imbalanced label: a 0.005 increment is small in ranking terms but not necessarily zero in mechanism terms, and the test can say only that this formulation of the claim is not supported by this network. ## Files - `hypothesis.md` — the proposal verbatim and the pre-specified tests - `run.py` — graph construction, labels, models, nulls, both figures - `data/analysis_table.csv` — one row per gene - `results.json` — every number above - `figures/fig1_degree_and_delta_auc.png`, `figures/fig2_redundancy_within_degree_strata.png` - `SOURCE.md` — URLs, fetch timestamp, row counts, SHA-256 *Designed and executed with AI assistance (DeepSeek via its coding agent). Not peer reviewed. Nothing here is medical or drug-target advice.*
hypothesis.md
# Hub Proteins Are Essential — pre-specified test
**Source.** Incoprea Research, *Original Theories*, Volume XVI, #60.
<https://incoprea.com/research-library/original-theories-vol16-20261030/>
Posted as a speculative proposal and, at the time of writing, untested.
## The proposal, verbatim
- **Title:** "Hub Proteins Are Essential"
- **Claim:** "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."
- **Mechanism:** "A hub can be bypassed if its partners are redundant;
essentiality depends on whether losing it disconnects a function."
- **Prediction:** "Essentiality should track the ratio."
- **Refute criterion:** "Essentiality tracking degree would remove redundancy."
## What is being tested
The claim has two separable parts:
1. **Directional part.** Essentiality rises with interaction degree. This is the
centrality–lethality regularity the proposal is arguing against, and the
proposal's own refute criterion concedes that degree tracking would count
against it.
2. **Incremental part ("not by degree alone").** Given degree, the redundancy of
a protein's partners carries additional information about essentiality, in the
direction stated by the mechanism: partners that are themselves well connected
provide bypass routes, so a well-connected protein whose partners are also
well connected should be *less* likely to be essential.
The test is therefore two-part and both parts must pass for the claim to stand.
## Data and operational definitions
Frozen before the final run of `run.py`; inspection of the raw files (column
names, value sets, graph size, score distribution) informed the filter choices
below, but no outcome model had been fitted when this file was written.
- **Network.** STRING v12.0 *Saccharomyces cerevisiae* protein links, restricted
to `combined_score >= 700` (the high-confidence band; 208,376 of 2,824,842
scored pairs). Each pair appears twice in the file (once per direction) and is
collapsed to one undirected edge; self-loops are dropped. STRING identifiers
(`4932.YAL001C`) are stripped of the `4932.` prefix and mapped to the SGD
standard gene name via the `Gene name` column of `phenotype_data.tab`; the 722
identifiers with no standard name keep their systematic name. No two STRING
identifiers map to the same name, so the map is one-to-one.
- **Essentiality.** `phenotype_data.tab` (SGD, 201,632 rows, no header, 14
columns) is filtered to rows with `Mutant type == "null"` and
`Phenotype == "inviable"`. A gene is **essential** if it has at least one such
row; **non-essential** if it has null-mutant rows but none inviable; and
**unlabelled** (excluded) if it has no null-mutant row at all. Genes with both
inviable and viable null records are labelled essential (the inviable record
wins) and the discordance is carried into a sensitivity analysis.
- **Metrics** (simple undirected graph, local definitions):
- `degree` = number of distinct interaction partners.
- `clustering` = local clustering coefficient, 2·(edges among neighbours) /
(k·(k−1)); 0 when k < 2.
- `mean_neighbour_degree` (mnd) = mean degree of the k partners.
- `redundancy_ratio` = mnd / degree. **Justification.** The dynamic quantity in
the claim is how many alternative routes exist if the protein is lost; a
partner set that is on average better connected than the protein itself
provides such routes, so the ratio of partner connectivity to own
connectivity is the natural degree-normalised statement of "redundancy of
its partners". Ratio > 1 means the protein is the least connected node in its
own neighbourhood (a candidate bottleneck); ratio < 1 means it is the hub of
hubs. Because mnd is itself a degree sum, the ratio is mechanically tied to
1/degree; that is exactly why the decisive test below is run *inside* degree
strata.
- `neighbour_clustering` = mean local clustering coefficient of the partners,
used only as an alternative redundancy proxy in sensitivity analysis.
## Primary test (P1): does anything beyond degree improve prediction?
Repeated stratified 10-fold cross-validated AUC, 20 repeats, l2 = 1.0, seed
1007. Continuous predictors are log-transformed (natural log) and then
standardised so that the ridge penalty is on a common scale. Both models include
an unpenalised intercept.
- **M1:** essential ~ log(degree)
- **M2:** essential ~ log(degree) + clustering + log(mean_neighbour_degree)
Reported: mean AUC per model, ΔAUC = M2 − M1, the paired percentile bootstrap CI
over the 20 repeats (10,000 resamples), and a **label-permutation p-value**:
essentiality labels are permuted across genes without replacement (500
permutations, 3 CV repeats each, seed 2002), both models refitted on every
permuted label vector, and p = (1 + #{ΔAUC_perm ≥ ΔAUC_obs}) / (1 + 500).
Because label permutation also destroys the degree signal and therefore inflates
the null variance of ΔAUC, a second, sharper null is reported alongside:
**feature rotation** — the (clustering, log mnd) pair is permuted jointly among
genes *within* each degree decile (200 permutations, 3 CV repeats, seed 777),
holding degree and labels fixed. A gene-level bootstrap (300 resamples, one CV
repeat each, seed 4242) gives a CI that reflects sampling of genes rather than
fold noise.
**Support threshold for P1 (pre-specified):** ΔAUC ≥ 0.010 with a 95% CI
excluding 0. One AUC point is the smallest increment that would change a
ranking-based use of the score; an increment below it is treated as practically
nil regardless of its p-value.
## Secondary, decisive test (P2): the "not by degree alone" clause
Genes are binned into ten equal-count degree deciles (by degree rank). Within
each decile, the redundancy ratio is split into equal-count quartiles. The raw
essential fraction is reported for all 10 × 4 cells with cell counts, so the
reader can see the pattern before any model is fitted.
Two logistic models, both with degree-decile fixed effects (nine dummies), report
the odds ratio per 1 SD of the redundancy ratio:
- **S1 (as specified):** essential ~ decile FE + z(redundancy_ratio).
- **S2 (strict degree control, governs the verdict):** essential ~ decile FE +
z(log degree) + z(redundancy_ratio).
S2 is included in advance because the top decile spans degrees 86–440: a decile
dummy alone leaves a strong within-decile gradient of 1/degree, which is exactly
the collinearity the claim must survive. CIs are percentile bootstrap over genes
(10,000 resamples, seed 5005).
**Support threshold for P2 (pre-specified):** the S2 odds ratio is < 1 with a 95%
CI excluding 1 (higher partner redundancy associated with lower essentiality, the
direction the mechanism requires). If S1 is significant but S2 is not, the
apparent effect is read as residual degree collinearity, not redundancy.
The same two specifications are also run for `clustering` and for
`neighbour_clustering` as descriptive companions; they do not enter the verdict.
## Verdict rule (pre-specified)
- **Supported** only if P1 passes *and* P2 passes.
- **Refuted** if P1 fails and P2 fails, or if P1 fails and the conditional
association runs opposite to the mechanism.
- **Half-supported / ambiguous** if exactly one passes; the surviving clause is
then named explicitly.
## Pre-specified sensitivity analyses
Each re-derives the whole analysis pipeline and reports ΔAUC and the S2 odds
ratio; the question asked is only "did the verdict move?".
1. **Lower-confidence network:** `combined_score >= 400` instead of 700.
2. **Peripheral proteins removed:** drop genes with degree 1 (their clustering is
undefined and their ratio is 1/k by construction).
3. **Alternative redundancy proxy:** replace log(mnd) with
`neighbour_clustering` in M2 and in the S1/S2 models.
4. **Discordant labels removed:** drop the genes with both inviable and viable
null records.
## Seeds
CV 1007; repeat bootstrap 3003; label permutations 2002; feature rotation 777;
gene bootstrap 4242; odds-ratio bootstrap 5005; crude permutation tests 7.