S.T.a.R.S-NET Stratigraphic & Taphonomic Reconstruction System — Network Extension

Read full text
Authors: Kevin FRADIER
Cited by: 0

Abstract

. 🩮🌐 S.T.a.R.S-NET Stratigraphic & Taphonomic Reconstruction System — Network Extension Auteur : Kevin Fradier — Chercheur indĂ©pendantDate : 2026Licence : © 2026 Kevin Fradier — CC BY-NC-ND 4.0Statut : Publication mĂ©thodologique · Testable · FalsifiablePosition Ă©pistĂ©mique : NeutralitĂ© stricte (aucune affirmation ontologique) 1. ProblĂšme scientifique ciblĂ© (rĂ©el, dur, reconnu) En palĂ©ontologie, les signaux de diversitĂ©, d’extinction ou de radiation sont comparĂ©s entre bassins, corrĂ©lĂ©s entre coupes, et alignĂ©s temporellement. Mais : Les bassins ne sont pas indĂ©pendants Les corrĂ©lations sont forcĂ©es a posteriori Les datations sont incertaines, hĂ©tĂ©rogĂšnes, non synchrones Les “extinctions de masse” peuvent Ă©merger par simple agrĂ©gation biaisĂ©e 👉 ProblĂšme clĂ© : Un signal inter-bassin est-il rĂ©el ou rĂ©sulte-t-il d’un couplage taphonomique + temporel + mĂ©thodologique ? 2. Principe fondamental (rupture mĂ©thodologique) STaRS-NET ne cherche pas Ă  : synchroniser les Ă©vĂ©nements, reconstruire une chronologie globale, infĂ©rer des causes biologiques ou climatiques. STaRS-NET teste une seule chose : 👉 La cohĂ©rence observĂ©e entre bassins est-elle robuste sous modĂšles de bruit rĂ©alistes inter-connectĂ©s ? 3. Changement de reprĂ©sentation (clĂ©) Au lieu de : courbes de diversitĂ© comparĂ©es pics alignĂ©s visuellement corrĂ©lations simples 👉 STaRS-NET reprĂ©sente le systĂšme comme un rĂ©seau. 4. ReprĂ©sentation rĂ©seau NƓuds Chaque nƓud reprĂ©sente : un bassin une coupe stratigraphique ou un intervalle temporel agrĂ©gĂ© ArĂȘtes Les arĂȘtes reprĂ©sentent : corrĂ©lations de diversitĂ© co-apparitions / co-disparitions de taxons similaritĂ©s de profils stratigraphiques ⚠ Aucune arĂȘte n’est interprĂ©tĂ©e causalement. 5. Modules STaRS-NET (tout-en-un) 5.1 CorrĂ©lations inter-bassins (STaRS-NET) CorrĂ©lations non linĂ©aires SimilaritĂ©s robustes Ă  la sous-dĂ©tection Tests sous permutations inter-bassins 👉 Une corrĂ©lation n’est conservĂ©e que si elle survit au bruit contraint. 5.2 Temps incertain (STaRS-TIME intĂ©grĂ©) Chaque niveau est un intervalle, pas une date Les alignements sont tirĂ©s alĂ©atoirement dans les incertitudes Le rĂ©seau est recalculĂ© Ă  chaque tirage 👉 On observe : la stabilitĂ© des arĂȘtes la persistance des motifs rĂ©seau 5.3 Artefacts d’extinction de masse (STaRS-EXT intĂ©grĂ©) Test clĂ© : Un â€œĂ©vĂ©nement global” apparaĂźt-il sans coordination rĂ©elle ? MĂ©thode : bruitage diffĂ©rentiel par bassin suppression partielle asynchrone dĂ©phasage temporel contrĂŽlĂ© 👉 Si le “pic global” survit → signal robuste👉 S’il s’effondre → artefact d’agrĂ©gation 6. Mesures rĂ©seau (agnostiques) STaRS-NET mesure sans interprĂ©ter : densitĂ© du rĂ©seau stabilitĂ© des arĂȘtes entropie topologique persistance des communautĂ©s robustesse sous perturbation Ces mesures ne disent rien sur la cause, seulement sur la tenue. 7. Score final : NRSS Network Reality Support Score Score ∈ [0,1] 0 → rĂ©seau compatible avec bruit taphonomique + temporel 1 → structure inter-bassin robuste et persistante ⚠ NRSS ≠ preuve d’évĂ©nement rĂ©elNRSS = le signal rĂ©siste aux tests minimaux 8. Couplage STaRS × ESE (niveau “sale”, assumĂ©) STaRS-NET peut produire : matrices de corrĂ©lation graphes pondĂ©rĂ©s sĂ©ries de rĂ©seaux temporels 👉 Ces objets peuvent ĂȘtre injectĂ©s dans ESE : dĂ©tection de motifs rĂ©seau Ă©mergents invariants topologiques persistance multi-Ă©chelle ⚠ Le couplage n’ajoute aucune interprĂ©tation, seulement un diagnostic structurel transversal. 9. Ce que la publication AUTORISE (et interdit) AutorisĂ© “Ce signal inter-bassin est robuste” “Cette extinction globale ne tient pas sous test” “Les donnĂ©es ne contraignent pas une synchronisation” Interdit cause climatique mĂ©canisme biologique Ă©vĂ©nement global affirmĂ© narration historique 10. Pourquoi STaRS-NET est dangereux (dans le bon sens) DĂ©truit les faux consensus visuels Neutralise les “extinctions Ă©videntes” Forcer les donnĂ©es Ă  tenir seules Compatible avec toutes les bases fossiles Impossible Ă  rejeter sans test 11. Positionnement final STaRS-NET n’est pas : une thĂ©orie un modĂšle du passĂ© une explication C’est : un crash-test universel des corrĂ©lations palĂ©ontologiques ✅. ========================= STaRS-NET — CORE ========================= import numpy as np import networkx as nx import hashlib from scipy.stats import spearmanr AUTHOR_SIGNATURE = "Kevin Fradier | STaRS-NET | 2026" # -------------------------------------------------- # Utilitaires # -------------------------------------------------- def shannon_entropy(x): x = np.asarray(x) if np.sum(x) == 0: return 0.0 p = x / np.sum(x) p = p[p > 0] return -np.sum(p * np.log2(p)) def hash_result(obj): h = hashlib.sha256() h.update(str(obj).encode()) h.update(AUTHOR_SIGNATURE.encode()) return h.hexdigest() # -------------------------------------------------- # Bruit taphonomique inter-bassins # -------------------------------------------------- def taphonomic_noise_matrix(matrix, loss_rate=0.3): noisy = matrix.copy() mask = np.random.rand(*matrix.shape) > loss_rate return noisy * mask # -------------------------------------------------- # Construction rĂ©seau inter-bassins # -------------------------------------------------- def build_interbasin_network(basin_curves, n_iter=100, corr_threshold=0.3): """ basin_curves : dict {basin_id: diversity_curve} """ basins = list(basin_curves.keys()) G = nx.Graph() for b in basins: G.add_node(b) for i in range(len(basins)): for j in range(i + 1, len(basins)): b1, b2 = basins[i], basins[j] corrs = [] for _ in range(n_iter): c1 = taphonomic_noise_matrix(basin_curves[b1]) c2 = taphonomic_noise_matrix(basin_curves[b2]) v1 = np.sum(c1, axis=1) v2 = np.sum(c2, axis=1) if np.std(v1) > 0 and np.std(v2) > 0: corr, _ = spearmanr(v1, v2) corrs.append(corr) if corrs: mean_corr = np.nanmean(corrs) if abs(mean_corr) >= corr_threshold: G.add_edge(b1, b2, weight=float(mean_corr)) return G # -------------------------------------------------- # Robustesse rĂ©seau # -------------------------------------------------- def network_robustness(G, n_iter=100, drop_rate=0.2): densities = [] nodes = list(G.nodes()) edges = list(G.edges(data=True)) for _ in range(n_iter): H = nx.Graph() H.add_nodes_from(nodes) for u, v, d in edges: if np.random.rand() > drop_rate: H.add_edge(u, v, weight=d["weight"]) densities.append(nx.density(H)) return float(np.mean(densities)), float(np.std(densities)) # -------------------------------------------------- # Score NRSS # -------------------------------------------------- def compute_nrss(G): if G.number_of_nodes() == 0: return 0.0 density = nx.density(G) entropies = [] for n in G.nodes(): weights = [abs(G[n][m]["weight"]) for m in G.neighbors(n)] entropies.append(shannon_entropy(weights)) entropy_mean = np.mean(entropies) if entropies else 0.0 nrss = density * (1 - entropy_mean) return float(np.clip(nrss, 0, 1)) # -------------------------------------------------- # Interface principale STaRS-NET # -------------------------------------------------- def STaRS_NET_analyze(basin_curves): """ basin_curves : dict {basin_id: np.array(levels x taxa)} """ G = build_interbasin_network(basin_curves) rob_mean, rob_std = network_robustness(G) nrss = compute_nrss(G) result = { "nodes": G.number_of_nodes(), "edges": G.number_of_edges(), "network_density": nx.density(G), "robustness_mean": rob_mean, "robustness_std": rob_std, "NRSS": nrss, "signature": AUTHOR_SIGNATURE } result["hash"] = hash_result(result) return G, result ========================= ESE — NETWORK EXTENSION ========================= # ========================= # ESE-NET (rĂ©seaux) # ========================= def network_signature(G): degrees = np.array([d for _, d in G.degree()]) if len(degrees) == 0: return 0.0 return float(np.mean(degrees)) def perturb_network(G, noise_level=0.3): H = G.copy() for u, v in list(H.edges()): if np.random.rand() < noise_level: H.remove_edge(u, v) return H def ESE_network_analyze(G, n_iter=100): base_sig = network_signature(G) sigs = [] for _ in range(n_iter): H = perturb_network(G) sigs.append(network_signature(H)) sigs = np.array(sigs) result = { "base_signature": base_sig, "stabilized_signature": float(np.mean(sigs)), "signature_std": float(np.std(sigs)), "signature": "Kevin Fradier | ESE-NET | 2026" } result["hash"] = hash_result(result) return result ========================= EXEMPLE MINIMAL (TEST) ========================= if __name__ == "__main__": np.random.seed(42) # Simuler 3 bassins, 20 niveaux, 10 taxons basin_data = { "Basin_A": np.random.poisson(2, (20, 10)), "Basin_B": np.random.poisson(2, (20, 10)), "Basin_C": np.random.poisson(2, (20, 10)), } G, stars_result = STaRS_NET_analyze(basin_data) ese_result = ESE_network_analyze(G) print("STaRS-NET :", stars_result) print("ESE-NET :", ese_result) ✅ STaRS-NET complet (corrĂ©lations, bruit, rĂ©seau, NRSS) ESE-NET indĂ©pendant, branchable ou non Hash traçable partout Aucun discours imposĂ© Aucun modĂšle causal Licence : © 2026 Kevin Fradier — CC BY-NC-ND 4.0

Publication details

Journal / source
Zenodo (CERN European Organization for Nuclear Research)
Publication date
8 January 2026