dsh-probstat
Deterministic probability & statistical inference math for DeepSeek Harness: distribution calculator, z-table math, confidence intervals (z/t/Wilson), event-probability identities, one-sample hypothesis tests (z/t/proportion) and sample-size planning — zero runtime dependencies
- Stars
- 1
- Language
- TypeScript
- Created
- Sep 6, 2026
- Updated
- Oct 20, 2026
Introduction
dsh-probstat
Deterministic probability & statistical-inference math for DeepSeek Harness (dsh). Seven zero-runtime-dependency tools that replace the math agents get wrong most often: hallucinated z-table values, distribution cdf/quantile errors, wrong critical values, sloppy compound-event identities, mis-recalled test decisions, guessed study sizes and hand-waved A/B comparisons.
中文简介:DeepSeek Harness 概率与统计推断数学工具箱——分布计算(正态/二项/泊松/指数/均匀/几何的 pdf/cdf/生存函数/分位数/统计量)、标准正态 z 表换算、置信区间(均值 z/t + 比例 Wilson)、事件概率恒等式(并/交/条件/贝叶斯)、单样本假设检验(均值 z/t + 比例)、目标误差所需样本量(Wald / Wilson)、双样本检验(均值 z/Welch/合并方差 + 双比例)。零运行时依赖,纯确定性计算。
Install
dsh plugin --profile web add github:TYEclipse/dsh-probstat
Tools
| Tool | What it does |
|---|---|
dist_calc | pdf / cdf / survival / quantile / stats for 6 distributions |
z_score | standard-normal table math (z ↔ probability) |
confidence_interval | mean intervals (z or t) and Wilson proportion intervals |
event_probability | union / intersection / conditional / Bayes / complement / at-least-one |
hypothesis_test | one-sample z / t / proportion tests with p-values and the decision |
sample_size | sample size for a target margin of error (mean, proportion) |
two_sample_test | two-group comparisons: difference of means (z / Welch / pooled) and of proportions |
dist_calc
Distributions: normal (mean, sd — default standard normal), binomial (n, p), poisson (lambda), exponential (rate lambda), uniform (a, b), geometric (p). Operations: pdf, cdf (P(X ≤ x)), survival (P(X > x)), quantile (inverse cdf at probability q), stats (mean / variance / sd).
Examples:
distribution: "normal", x: 1.96→ cdf0.9750022(P(Z ≤ 1.96))distribution: "binomial", operation: "quantile", n: 10, p: 0.5, q: 0.95→8distribution: "poisson", operation: "survival", lambda: 3, x: 5→0.08391794distribution: "geometric", operation: "stats", p: 0.5→ mean1, variance2
Conventions: the geometric distribution counts failures before the first success (support k ≥ 0, P(X = k) = p·(1−p)^k). Quantiles of discrete distributions return the smallest k with P(X ≤ k) ≥ q.
z_score
Modes: to_prob (z → probability + percentile), from_prob (probability → z), two_sided (z → two-tailed p-value), between (z1, z2 → probability between; order is sorted internally).
mode: "between", z1: -1.96, z2: 1.96→0.9500043mode: "two_sided", z: 2.5→ p-value0.01241936
confidence_interval
Kinds: mean_z (population mean, known sigma), mean_t (population mean, unknown sigma; Student-t with df = n − 1), proportion (Wilson score interval — stays valid for small samples and extreme proportions, unlike the naive Wald interval). Default confidence level 0.95.
kind: "mean_t", mean: 72.5, sd: 8.2, n: 25→[69.115, 75.885](t* = 2.0639, df = 24)kind: "proportion", successes: 40, n: 100→[0.30940, 0.49800]kind: "proportion", successes: 0, n: 50→[0, 0.07135]
event_probability
Operations: union (P(A or B); independent default true, false treats events as mutually exclusive), intersection (independent events), conditional (P(A|B) = P(A and B)/P(B)), bayes (posterior from prior, true-positive and false-positive rates), complement, at_least_one (1 − (1−p)^n).
operation: "bayes", prior: 0.001, truePositive: 0.99, falsePositive: 0.01→0.09016operation: "at_least_one", p: 0.05, n: 20→0.64151
hypothesis_test
Kinds: mean_z (known sigma), mean_t (unknown sigma; Student-t with df = n − 1), proportion (against p0, normal approximation). Optional tail (two-sided default, left, right) and alpha (default 0.05). Every run reports the statistic, the standard error, all three p-values, the tail-specific critical value and the decision.
kind: "mean_z", sampleMean: 102, mu0: 100, sigma: 15, n: 36→ z0.8, two-sided p0.4237108, critical1.959964→ do not rejectkind: "mean_t", sampleMean: 5.2, mu0: 5, sd: 1.5, n: 12, tail: "right"→ t0.4618802, df11, p0.3265839kind: "proportion", successes: 40, n: 100, p0: 0.5→ z-2, two-sided p0.0455003→ reject at 0.05
The proportion kind warns (in note) when the normal approximation is shaky (n·p0 < 5) rather than quietly returning a p-value.
sample_size
Kinds: mean_z (n = (z·σ/E)²) and proportion (method: "wald" default: n = z²p(1−p)/E²; method: "wilson": the smallest n whose Wilson half-width meets E). p defaults to 0.5, the conservative worst case.
kind: "mean_z", sigma: 15, marginOfError: 5→ n35(exact 34.573129)kind: "proportion", p: 0.5, marginOfError: 0.03→ n1068(Wald)kind: "proportion", p: 0.5, marginOfError: 0.03, method: "wilson"→ n1064(smallest n whose Wilson interval is that narrow)
two_sample_test
Two independent groups. Kinds: mean_z (difference of means, known population sigmas), mean_welch (unknown sigmas, unequal variances — Welch t with the fractional Welch–Satterthwaite df), mean_pooled (unknown sigmas, equal-variance pooled t with df = n₁ + n₂ − 2) and proportion (difference of two proportions, pooled normal approximation). Optional delta0 (the null-hypothesis difference, default 0), tail and alpha. Every run reports both estimates, the difference, the standard error, the statistic, the df, all three p-values, the tail-specific critical value and the decision.
kind: "mean_z", mean1: 102, mean2: 98, sigma1: 10, sigma2: 12, n1: 40, n2: 50→ z1.7245225, two-sided p0.0846135→ do not reject at 0.05kind: "mean_welch", mean1: 5.2, mean2: 4.6, sd1: 1.1, sd2: 0.9, n1: 12, n2: 15→ t1.5248215, df21.166825(fractional by construction), two-sided p0.1421069kind: "mean_pooled"on the same data → pooled variance0.986, df25, t1.5601529kind: "proportion", successes1: 45, n1: 100, successes2: 32, n2: 90→ pooled p0.40526316, z1.3240058, one-sided p0.0927506
Welch is the right default when the variances were not designed to be equal; pick mean_pooled only when equal variances are a stated assumption. The Welch df is reported unrounded — rounding it to an integer silently changes the p-value. The proportion kind flags a shaky approximation (smallest expected cell < 5) instead of hiding it.
Numerics & precision
- Normal cdf: Abramowitz & Stegun 7.1.26 erf fit, absolute error ≤ 1.5e-7 (far beyond published 4-decimal z-tables).
- Normal quantile: Acklam inverse normal, relative error < 1.15e-9.
- Binomial / Poisson: exact pmf via recurrence and cdf by summation (no combinatorics overflow); quantiles by monotone search.
- Student-t: regularized incomplete beta (Lentz continued fraction) + Lanczos log-gamma; cross-checked against published t-table values (2.2281, 2.0452, 1.8125, 1.984).
- Exponential / uniform / geometric: closed forms.
- Hypothesis tests: p-values from the same cdf primitives; critical values via the quantile functions. Wilson sample size: binary search on a half-width that is strictly decreasing in n.
- Two-sample tests: the Welch–Satterthwaite df is used as-is (fractional), never rounded; the pooled kind reports its pooled variance so the assumption is checkable.
- All validation errors return
valid: falsewith an explanatoryerrorstring; no tool ever throws on bad numeric input.
Development
pnpm install
pnpm build
pnpm test # 59 tests; anchors from test/oracle/anchors.py (independent Python oracle)
pnpm lint
License
MIT