Shunyaya Symbolic Mathematical Chemistry — How to compute Z_t (signal-to-drift) (5.2)

Why this page. ZEOZO-Core turns raw telemetry into a single, zero-centric drift dial Z_t (calm near 0; higher when conditions are variable or stressed). The construction is bounded, monotone in a variability measure, and observation-only.


Lane fusion (bounded inputs, ASCII)

Normalize each lane to [0,1], then fuse with non-negative weights that sum to 1.

# lanes (examples): F_t, W_t, V_t, E_t, Sspace_t in [0,1]
# meanings per domain (e.g., energy, solvation/flow, mixing/momentum, structure, coherence)

wF, wW, wV, wE, wS >= 0
wF + wW + wV + wE + wS = 1

S_t = wF*F_t + wW*W_t + wV*V_t + wE*E_t + wS*Sspace_t

Lane normalization (copy-ready helpers, ASCII)

Use any sane, published recipe; keep it fixed within a study.

clip(x, lo, hi):        return min(max(x, lo), hi)
lin01(x, lo, hi, eps):  return (clip(x, lo, hi) - lo) / max(hi - lo, eps)

# robust logistic squashing (optional)
logi01(x, k, x0):       return 1 / (1 + exp(-k*(x - x0)))   # k > 0, center x0

# example normalization
F_t = lin01(F_raw_t, F_lo, F_hi, eps)
W_t = logi01(W_raw_t, kW, x0W)
# repeat as declared for all lanes...

Drift extractor (windowed variability, ASCII)

Use a bounded, monotone function of recent variability over a short window [t-L, t].

# default: windowed variance of S_t with soft log compression
Var_t  = variance(S_tau over tau in [t-L, t])

Z_raw  = log(1 + Var_t)         # non-negative, grows sublinearly
Z_t    = Z_raw / (1 + Z_raw)    # maps [0, +inf) -> [0,1)

# simple slow track (default)
A_t    = 1 / (1 + Z_t)

Robust alternatives (choose one, publish it)

All are zero-centric and monotone after the same [0,1] compression:

# clipped MAD
m_mid = median(S_tau over [t-L, t])
MAD_t = median(|S_tau - m_mid| over [t-L, t])
Z_raw = MAD_t

# EWMA of squared residuals
r_t    = S_t - EMA(S over [t-L, t])
EWMS_t = lambda*EWMS_{t-1} + (1 - lambda)*r_t^2   # lambda in (0,1)
Z_raw  = EWMS_t

# spectral bump (band power) if frequency structure matters
P_band = bandpower(S over [t-L, t], f_low, f_high)
Z_raw  = log(1 + P_band)

# final compression to [0,1] for any Z_raw >= 0
Z_t = Z_raw / (1 + Z_raw)

Calibration (lightweight, ASCII)

Pick a target Z_target for a “typical” variable period and set the compression accordingly.

# general saturating map
Z_t = 1 - exp(-beta * Z_raw)      # beta > 0

# choose beta by
beta = -log(1 - Z_target) / Z_raw_ref
# where Z_raw_ref is a chosen percentile (e.g., 0.75) of observed Z_raw over a calibration set

If you use the default Z_t = Z_raw / (1 + Z_raw), no extra parameter is needed; publish the window L and any EMA/MAD settings.

Minimal pseudocode (reference, ASCII)

input:
  lanes_raw_t = {F_raw_t, W_raw_t, V_raw_t, E_raw_t, S_raw_t}
  norm_recipes, weights wF..wS  (non-negative, sum to 1)
  window L > 0, eps > 0
  method in {"var-log", "mad", "ewma2", "bandpower"}  # pick one

# 1) normalize lanes to [0,1]
F_t      = normalize(F_raw_t, norm_recipes.F, eps)
W_t      = normalize(W_raw_t, norm_recipes.W, eps)
V_t      = normalize(V_raw_t, norm_recipes.V, eps)
E_t      = normalize(E_raw_t, norm_recipes.E, eps)
Sspace_t = normalize(S_raw_t, norm_recipes.S, eps)

# 2) fuse
S_t = wF*F_t + wW*W_t + wV*V_t + wE*E_t + wS*Sspace_t

# 3) drift extractor over [t-L, t]
if method == "var-log":
  Var_t = variance(S_tau over tau in [t-L, t])
  Z_raw = log(1 + Var_t)
elif method == "mad":
  m_mid = median(S_tau over [t-L, t])
  Z_raw = median(|S_tau - m_mid| over [t-L, t])
elif method == "ewma2":
  r_t   = S_t - EMA(S over [t-L, t])
  Z_raw = EMA(r_t^2 over [t-L, t])
elif method == "bandpower":
  Z_raw = log(1 + bandpower(S over [t-L, t], f_low, f_high))

# 4) compress to [0,1]
Z_t = Z_raw / (1 + Z_raw)               # or: 1 - exp(-beta * Z_raw)

# 5) slow track (default)
A_t = 1 / (1 + Z_t)

return Z_t, A_t

Policy (publish in manifest)

  • Lane meanings, normalization recipes (with parameters), weight vector, and window L.
  • Chosen drift extractor (var-log, mad, ewma2, or bandpower) and any compressor parameters (e.g., beta).
  • Confirmation that Z_t and A_t lie in [0,1], and that the same recipe is used across the study.
  • Any data-quality guards (missing values, clipping ranges, outlier rules).

Navigation
Previous — Unified Time-Aware Alignment (g_t) (5, 5.1)
Next — How to compute A_t (slow track) and Q_t (calm accumulator) (5.3, 5.4)

Disclaimer (observation-only). All formulas and results are observation-only—not predictive or operational—and require peer validation and governance before any deployment.