DX 戴璇 · daixuan.cloud

DATA LAB / 交互统计沙盒

把统计,变成可以拖动的直觉。

四个经典问题,全部在浏览器里现场模拟:拖一根滑块,图表立刻重算。 没有后端、没有第三方库,也没有预先录好的动画——你看到的每一条柱子,都是这一秒刚抽出来的样本。

  • 零依赖 · 纯静态
  • 随机种子可复现
  • 每个实验都能分享深链
  • 深浅双主题

玩法:拖动滑块 → 看图表与读数同步变化 → 点「复制链接」把当前这组参数发给别人,对方打开会看到一模一样的图。

实验 01 / CENTRAL LIMIT THEOREM

无论总体长得多奇怪,样本均值的分布都会变正态

左边选一个总体分布,右边看它的样子;下面那张图,是「每次抽 n 个观测、算一次均值」重复几千次之后, 这些均值自己形成的分布。把 n 从 2 拖到 30,看它怎么从「和总体一样歪」变成一口标准的钟形。

被抽样的「真实世界」长什么样

一次抽样里包含多少个观测;n 越大,均值越稳定

重复次数越多,直方图越平滑(不影响结论,只影响观感)

A总体分布 指数分布
B样本均值的抽样分布 叠加理论正态曲线
总体均值 μ
—
总体标准差 σ
—
理论标准误 σ/√n
—
实测标准误
—
抽样分布的偏度
—

正在计算…

这条曲线为什么重要?

中心极限定理说的是:只要观测之间独立、方差有限,样本均值的抽样分布会随着 n 增大趋近正态, 而且这个正态的均值等于总体均值 μ、标准差等于 σ/√n —— 后者就是「标准误」。

注意图 B 的横轴比图 A 窄得多,而且随 n 增大越来越窄。这就是为什么「平均值」这种统计量如此好用: 单个观测可能很吵,但它的平均值的波动被 1/√n 压下去了。

两个前提别忘:独立性(观测之间不能强相关)与有限方差。 厚尾到方差都不存在的分布(比如 Cauchy),这条定理不成立——实验 03 会让你看到厚尾的代价。

实验 02 / BOOTSTRAP CONFIDENCE INTERVAL

只有一份样本时,误差有多大?自己重抽样问出来

图 A 是你唯一拿到的那份样本(这里的真实总体是对数正态,真实均值 μ ≈ 1.197)。 图 B 把这份样本「有放回地重抽」几千次,每次算一个均值——这些均值的分布,就是置信区间的来源。 点「模拟覆盖率」还能做一次元实验:造 200 份独立样本,看这些区间到底盖住了真值几次。

样本越小,区间越宽、越容易偏

B 越大,区间端点越稳定

区间覆盖真值的名义概率

A你手上的那份样本 n = 25
BBootstrap 分布与置信区间 阴影 = 百分位区间
样本均值 x̄
—
样本标准差 s
—
百分位区间
—
正态近似区间
—
区间宽度
—
真实 μ
1.197

正在计算…

百分位区间和正态近似区间,该信哪个?

百分位区间直接取 bootstrap 分布的 2.5% 与 97.5% 分位数——不假设任何分布形状,是默认选择。 正态近似区间用 x̄ ± 1.96·SE,只有在 bootstrap 分布近似对称时才靠得住。

把 n 拖到 5 再点「模拟覆盖率」:95% 的区间实际只盖住真值 76% 上下; n 提到 50 才回到 93% 左右(本页 M=200 实测)。因为对数正态右偏, 小样本的 bootstrap 分布本身也偏,百分位区间会系统性偏移。这不是代码错了,这是 bootstrap 的真实局限, 也是它需要 n 别太小的原因。

实验 03 / EFFICIENCY vs ROBUSTNESS

均值更「省」,中位数更「稳」——换分布就换赢家

同样是估计「中心位置」,均值和中位数谁更靠谱?答案取决于总体有没有离群点。 图 B 把两个统计量的抽样分布画在同一根横轴上,谁的分布更窄,谁的估计就更精确。

离群点越多,均值的优势越小

两个统计量用完全相同的样本

用于估计两个统计量各自的波动

A总体分布 正态分布
B抽样分布对比 均值中位数
均值标准误 SE(x̄)
—
中位数标准误 SE(med)
—
相对效率 SE(med)/SE(x̄)
—
均值的偏度
—
中位数的偏度
—

正在计算…

「相对效率」怎么读?

SE(med)/SE(x̄) 就是中位数相对均值要多花多少样本量才能达到同样的精度。这个比值 ≈ 1 时两者打平; 1.25 意味着中位数需要多约 1.25² ≈ 1.6 倍的样本量。

正态总体下这个比值约 1.253(理论值 √(π/2))—— 均值赢得干净利落,因为它用上了每一个观测的具体数值。 但换成 t(3) 或掺了离群点的污染正态,均值会被极端值反复拽偏,比值迅速跌到 1 以下, 中位数反而更准。这就是「稳健性」的价格:在理想世界里吃点亏,换极端情况下的不崩盘。

实验 04 / SIMPSON'S PARADOX

每个分组都赢,合并起来却输了

方案 A 与方案 B 各自面对「轻症」和「重症」两类病例。默认参数下,A 在轻症组赢、在重症组也赢—— 但合并统计时 B 反而领先。差别只在于:重症病例被更多地分给了 A。拖一拖「重症占比」的两个滑块,看结论什么时候翻转。

病情轻时,方案 B 的成功率

病情重时,方案 B 的成功率

A 在两个组里分别比 B 高出多少(固定为正)

这就是「混杂因素」——它让 A 看起来更差

两个占比拉平,悖论就消失

A分组比较 同一层内,A 始终更高
B合并比较 不分层时的总体成功率
C病例构成 重症(深色)在每组里的比例
数值明细(成功率 = 成功数 / 该格病例数)
分层 方案 A 方案 B A − B
轻症 — — —
重症 — — —
合并 — — —

正在计算…

这不是数字游戏,是真实发生过的事

当分组变量同时影响「谁进入哪一组」和「结果」时,合并统计量就会把组间差异和构成差异混在一起。 本实验里,A 组重症占比高,所以它被迫在更难的人群里作战,合并成功率被拖低。

识别它的办法很朴素:把可能影响分配的因素都分层看一遍。点「随机化分配」把两组构成拉平, 悖论立刻消失——这正是随机对照试验(RCT)要随机化的原因:随机化让构成差异在期望上归零。

关于这个实验室

数字是怎么算出来的

全部在浏览器里现场模拟,没有预渲染、没有后端、不引任何图表库。直方图用 Canvas 2D 绘制,柱高来自真实的抽样计数。

为什么同一链接结果一样

所有随机数来自可播种的生成器(mulberry32),种子写进链接里。分享出去的不是一张图,而是「重放这段实验的完整配方」。

口径说明

样本方差用 n−1(无偏);偏度用 Fisher–Pearson 标准化矩;正态近似区间用 z 分位数,百分位区间用 bootstrap 分位数。中位数在偶数样本量时取中间两个值的平均。

已知取舍

为了交互流畅,重复次数上限设为 5000、覆盖率元实验固定 200 份样本,因此读数会有约 1–2% 的蒙特卡洛抖动。抖动是模拟的常态,不是 bug。

想聊统计建模、工业工程或这个页面的实现?在主页找我,或直接看 应用统计案例分析。