资讯动态

正态分布、卡方分布、t分布与F分布:四大统计分布的推导链条与Python验证

发布时间:2026/10/5 9:35:41 来源:尧图企业网站定制
正态分布、卡方分布、学生t分布和F分布这四位凑在一起基本上就是数理统计推断的整块地基。我当年学这部分的时候老师一口气把四个公式甩到黑板上丢下一句“记住就行”结果考试全忘考完更忘。后来真刀真枪做数据分析才开始后怕t检验为什么非要小样本用方差分析里的F值到底在比什么卡方拟合优度检验的“自由度”为什么总是n-1减一这些如果当年能顺着一条逻辑链捋清楚后面能少走太多弯路。所以这篇不打算照着课本念。我想把这四大分布拆开揉碎讲清楚它们各自在解决什么问题、核心公式长什么样、自由度这个玄学概念到底是怎么回事再用Python把它们的“亲子关系”现场验一遍。适合正在学概率论与数理统计的学生、刚入门数据分析想补充统计底子的朋友以及工作中经常碰假设检验但一直停留在“会用函数不会讲原理”的从业者。看完之后你会发现这四个分布根本不用死记硬背它们之间有一条清晰的推导链理解了这条链所有检验公式摊开在你面前都是顺理成章。1. 四大分布到底在解决什么问题1.1 它们的共同身份统计量的抽样分布先统一一个认知正态分布、卡方分布、t分布和F分布在数理统计里的核心身份不是“描述一组原始数据长什么样”而是描述“从总体里反复抽样算出来的统计量”的分布。这个区别特别重要。我的理解方式是这样的总体分布描述的是“每个个体”的随机性比如某个城市成年男性的身高近似服从正态分布这是总体的天然属性。但数理统计很少能拿到所有数据只能抽一个样本然后拿样本均值、样本方差这类统计量去反推总体。问题来了——如果我这次抽30个人算出平均身高是172cm下次再抽30个人可能是173.2cm这个“样本均值本身”也是随机变量它也有自己的分布。四大分布里至少有三个正是用来描述这类“统计量的随机性”的。正态分布除了描述总体数据更重要是描述样本均值的分布在中心极限定理加持下哪怕总体不是正态样本均值在大样本下也趋近正态。卡方分布描述样本方差经过标准化后的分布。t分布描述样本均值在总体标准差未知、且用样本标准差替代时的标准化统计量分布。F分布描述两个样本方差比值的分布。一说“统计量的分布”很多教材后面那些神奇的“抽样分布定理”就有了出场意义。你算的t统计量、F统计量本身都是随机变量得知道它们在零假设下服从什么分布才能算出p值或找到临界值。这四个分布就是那套“零假设下的裁判标准”。1.2 每个分布的定位与适用场景速览先给一张速查表后文再展开讲原理和实操。这张表建议大家直接存下来当笔记用考试、面试、写报告的时候都省事。分布定义核心典型统计量场景参数/自由度期望方差正态分布自然界大量连续数据的近似模型样本均值大样本、误差项μ、σ²μσ²卡方分布n个标准正态随机变量的平方和样本方差估计、拟合优度检验、列联表独立性检验自由度vv2vt分布标准正态除以卡方/自由度的根总体标准差未知时的均值检验、回归系数显著性检验自由度v0v1v/(v-2)v2F分布两个独立卡方各自除自由度后的比值方差比检验、方差分析ANOVA、回归模型整体显著性分子自由度u、分母自由度vv/(v-2)v2较复杂一般不手算从表里能读出一个重要信息后三个分布本质上都由“标准正态分布”加工而来。这就是我前面说的推导链——正态是原材料卡方是“正态的平方和”t是“正态与卡方的组合”F是“两个卡方的比例”。理解到这一层后面所有公式都是顺出来的。2. 核心公式、参数与自由度的本质2.1 四个分布的关键公式一张表别急着死记密度函数先看定义式因为定义式才能暴露分布之间的关系。标准正态分布Z分布密度函数 f(x) (1/(√(2π))) · e^(-x²/2)这里x的取值是整个实数轴均值是0方差是1。更一般的正态分布写为N(μ, σ²)密度函数就是标准正态密度做了一个平移和缩放。卡方分布χ²分布设Z₁, Z₂, ..., Zₖ是k个独立的标准正态随机变量则 χ²(k) Z₁² Z₂² ... Zₖ²k就是自由度。这个分布只取非负值因为平方和不可能为负。期望E(χ²)k方差Var(χ²)2k。卡方分布的密度曲线是右偏的自由度越小偏得越厉害自由度大了慢慢变得像正态。学生t分布设Z服从标准正态分布W服从自由度为v的卡方分布且Z与W独立则 t(v) Z / √(W/v)这个统计量服从自由度为v的t分布。这里的v就是卡方分布的自由度。t分布关于0对称形状和标准正态很像但尾巴更厚——也就是说出现极端值的概率更高。自由度越小尾巴越厚自由度趋于无穷时t分布收敛到标准正态分布。F分布设U服从自由度为u的卡方分布V服从自由度为v的卡方分布且U与V独立则 F(u, v) (U/u) / (V/v)服从分子自由度为u、分母自由度为v的F分布。F分布只取非负值同样是右偏分布。注意分子分母千万别交换F(u,v)和F(v,u)不是一回事——分子自由度对应第一个卡方的自由度分母自由度对应第二个卡方的自由度。2.2 自由度到底是什么一个被讲玄了的词自由度是初学统计时最劝退的概念之一。我自己的理解是自由度就是“可以自由变动的数据个数”或者说“用来估计某个参数时独立信息的数量”。最经典的例子是算样本方差。为什么样本方差的分母是n-1而不是n因为样本均值x̄是从这n个数据里算出来的给定x̄之后n个离差x₁-x̄, x₂-x̄, ..., xₙ-x̄并不全部自由它们加起来的和必须等于0所以只要知道其中n-1个最后一个就自动被确定。这n-1就是方差估计里的自由度。放到卡方分布里更清晰。χ²(k)的自由度k代表的是你往“平方和”里塞了几个独立标准正态变量。塞一个就是χ²(1)塞10个就是χ²(10)。自由度越大这个平方和的期望就越大分布越往右移、越接近正态。t分布的自由度是由分母那个卡方分布决定的。如果分母的自由度是v那整个t分布的自由度就是v。v越小你对总体标准差的估计越不准所以t分布的尾巴越粗——因为极端值比正态更容易出现。F分布有两个自由度因为它是两个卡方做比例分子那个卡方的自由度是u分母那个卡方的自由度是v。这就好理解了N(0,1)样本数量多少分别影响分子和分母的波动。生活化类比自由度有点像你手里拥有的“独立线索”数量。每使用一个样本数据去估计一个参数就相当于用掉一条线索去“定”那个参数剩下的线索才能用来评估随机波动也就是不确定性本身的大小。2.3 记忆技巧抓住四条推导关系如果让我只保留一张“关系图”存放在脑子里那就是下面四条标准正态的平方 → χ²(1)k个独立的χ²(1)相加 → χ²(k)也就是k个独立标准正态的平方和标准正态 除以 “√(χ²(v)/v)” → t(v)两个独立卡方各自除以自由度后再相除 → F(u, v)而且这四条之间还能再连出一条线t分布的自由度为v那t(v)的平方恰好服从F(1, v)。这个结论平时不太起眼但它揭示了t检验和F检验的内在等价性——很多教材里没点破实际在做线性回归的时候你会发现单个系数的t检验和方差分析里的F检验p值经常是完全一致的根本原因就在这。3. 用Python模拟验证四大分布原来是“一家人”3.1 直接生成样本看分布形态理论说再多不如动手模拟一次。我用Python把前面的定义式直接“翻译”成代码看看生成出来的数据是否真的服从对应的分布。这也是我建议大家自己动手做一遍的原因——公式可能会骗人数据分布不会。import numpy as np import matplotlib.pyplot as plt from scipy import stats np.random.seed(42) n 200000 # 标准正态分布原材料 z np.random.normal(0, 1, sizen) # 卡方分布k个标准正态的平方和 k 5 Z_matrix np.random.normal(0, 1, size(n, k)) chi2_5 np.sum(Z_matrix**2, axis1) # t分布标准正态 / sqrt(卡方/自由度) v_t 5 z_new np.random.normal(0, 1, sizen) chi2_v np.sum(np.random.normal(0, 1, size(n, v_t))**2, axis1) t_5 z_new / np.sqrt(chi2_v / v_t) # F分布两个独立卡方各自除以自由度后的比值 u, v_f 5, 10 chi2_u np.sum(np.random.normal(0, 1, size(n, u))**2, axis1) chi2_vf np.sum(np.random.normal(0, 1, size(n, v_f))**2, axis1) F_5_10 (chi2_u / u) / (chi2_vf / v_f) # 直方图对比理论密度 fig, axes plt.subplots(2, 2, figsize(12, 9)) x_range np.linspace(-5, 5, 300) axes[0, 0].hist(z, bins100, densityTrue, alpha0.6, label模拟样本) axes[0, 0].plot(x_range, stats.norm.pdf(x_range), r-, label理论密度N(0,1)) axes[0, 0].set_title(标准正态分布) x_range_chi2 np.linspace(0, 20, 300) axes[0, 1].hist(chi2_5, bins100, densityTrue, alpha0.6, label模拟样本) axes[0, 1].plot(x_range_chi2, stats.chi2.pdf(x_range_chi2, dfk), r-, label理论密度χ²(5)) axes[0, 1].set_title(卡方分布 χ²(5)) x_range_t np.linspace(-6, 6, 300) axes[1, 0].hist(t_5, bins100, densityTrue, alpha0.6, label模拟样本) axes[1, 0].plot(x_range_t, stats.t.pdf(x_range_t, dfv_t), r-, label理论密度t(5)) axes[1, 0].plot(x_range_t, stats.norm.pdf(x_range_t), g--, label标准正态对比) axes[1, 0].set_title(t分布 t(5)) x_range_f np.linspace(0, 5, 300) axes[1, 1].hist(F_5_10, bins100, densityTrue, alpha0.6, label模拟样本) axes[1, 1].plot(x_range_f, stats.f.pdf(x_range_f, dfnu, dfdv_f), r-, label理论密度F(5,10)) axes[1, 1].set_title(F分布 F(5,10)) for ax in axes.flat: ax.legend() ax.set_ylabel(密度) plt.tight_layout() plt.show()跑完这段代码你会看到模拟直方图和理论密度曲线几乎完全重合。这一步虽然简单但价值不小它验证了这几个分布的定义式不是凭空而来而是直接从正态分布层层推导出来的结构。以后再遇到“某个统计量服从什么分布”的结论都可以自己写几行代码按定义式构造统计量然后画个图验证一下比自己硬背结论靠谱太多。3.2 实证小样本均值为什么t分布是小样本救星前面验证了定义式接下来验证一个更贴近实际应用的结论从正态总体里抽样如果总体标准差未知用样本标准差替代之后构造的t统计量确实服从t分布而不是标准正态分布。from scipy import stats np.random.seed(123) mu, sigma 10, 3 sample_size 8 trials 20000 t_values [] for _ in range(trials): sample np.random.normal(mu, sigma, sizesample_size) x_bar np.mean(sample) s np.std(sample, ddof1) # 样本标准差分母n-1 t_values.append((x_bar - mu) / (s / np.sqrt(sample_size))) t_values np.array(t_values) x_range np.linspace(-5, 5, 300) plt.figure(figsize(8, 5)) plt.hist(t_values, bins80, densityTrue, alpha0.6, label仿真t统计量) plt.plot(x_range, stats.t.pdf(x_range, dfsample_size-1), r-, labelt(7)理论密度) plt.plot(x_range, stats.norm.pdf(x_range), g--, label标准正态) plt.legend() plt.title(小样本均值的t统计量分布n8) plt.show()我特意把样本量设成8目的就是展示t分布和标准正态的区别。样本量这么小的时候t分布的尾巴明显比标准正态“胖”如果不管三七二十一拿正态分布去做检验会低估极端值出现的概率导致p值偏小、更容易“显著”——这其实是很多论文里小样本假阳性偏高的原因之一。自由度越小影响越大自由度到了30以上两者差异小到可以忽略这也是很多教材说“大样本下t检验约等于z检验”的原因。4. 四大分布在统计检验中的实战定位4.1 正态分布从“总体模型”到“抽样分布引擎”正态分布的第一个角色是总体数据的模型。测量误差、人体身高体重、产品尺寸波动这些场景下正态分布经常是好用的近似。第二个角色才是数理统计意义上的“引擎”——因为中心极限定理存在无论原始总体是什么形态当样本量够大时样本均值近似服从正态分布。这个结论可以说是整个参数检验的底气。哪怕你面对的是偏态明显的总体只要样本量足够大一般经验值n≥30对样本均值做推断时就可以光明正大地用正态近似。但实战里也有个容易被忽略的分寸中心极限定理救的是“样本均值”不是“单次观测值”。如果你要评估某个单次观测是否异常比如一批零件里测到一个尺寸偏差很大的这看的还是总体分布本身不能指望中心极限定理帮你兜底。4.2 卡方分布方差估计与拟合优度检验的主场卡方分布在实战中最经典的两个出场位置一个是关于方差的推断一个是以“拟合优度”为代表的一类计数检验。先说方差推断。如果我们从方差为σ²的正态总体里抽样本那么统计量 χ² (n-1)·s² / σ²服从自由度为n-1的卡方分布。这里s²是样本方差。用这个关系可以给总体方差做置信区间也可以做方差是否等于某个特定值的假设检验。为什么自由度是n-1还是回到2.2讲的样本均值消耗了一个自由度。再说拟合优度检验。比如你想验证一枚骰子是不是公平的掷了600次理论每个面应该出现100次实际次数各有偏差。检验统计量 χ² Σ (观测频数 - 期望频数)² / 期望频数近似服从卡方分布。如果分类有k类且参数全部事先给定自由度是k-1如果还要从数据里估计参数自由度还要继续扣。这里的“近似”是有条件的——每个类别的期望频数不能太小通常要求不低于5否则卡方近似的误差会很大这个我放到最后一节的避坑清单里细说。4.3 t分布总体标准差未知时的均值推断主力学生t分布出现的动机非常实际做均值检验时统计量公式的分母是标准差。但如果总体标准差σ未知怎么办那就用样本标准差s代替。可这一“替”统计量的分布就不再是标准正态了而变成了t分布。这个修正极其重要。我举过一个我自己印象很深的例子早年做AB测试某个实验只积累了10来个样本我直接用z检验口算了一下显著性看起来是显著的。后来老老实实换成t检验重算发现p值比z检验大了不少结论差点反转。t分布的“厚尾”就是在替“你用样本标准差代替总体标准差”的不确定性买单。你只有10个数据对σ的估计本身就不稳定统计量更可能出现极端值所以要拿更宽松的临界值去卡。t分布的实战足迹远不止单样本均值检验。两独立样本的均值差检验尤其是方差不齐时用Welch修正版、配对样本检验、线性回归里回归系数的显著性检验全都在用t分布。做数据分析时看回归结果的那一列t值和Pr(|t|)背后全是这个分布在站岗。4.4 F分布方差比较与方差分析的统计依据F分布的主要舞台有两个一个是比较两个总体的方差是否相等另一个是整个方差分析ANOVA的显著性检验。方差比较的思路特别简洁两个独立的正态总体方差分别为σ₁²和σ₂²各自抽样本算方差s₁²和s₂²那么在两个总体方差相等σ₁²σ₂²的零假设下统计量 F s₁² / s₂²服从分子自由度n₁-1、分母自由度n₂-1的F分布。要注意的是F检验对方差齐性的检验对正态性假设比较敏感如果数据偏态很厉害结论要谨慎解读。方差分析里的F统计量核心逻辑其实也是比较方差 F 组间均方 / 组内均方组间方差反映的是不同处理组均值之间的差异组内方差反映的是随机误差。如果各组的真实均值都一样组间均方和组内均方估计的是同一个东西F值应该接近1如果组间差异远大于随机波动F值显著大于1就有理由拒绝“各组均值全相等”的零假设。线性回归里的整体F检验也是同一套思想——比较回归能解释的变异和残差不能解释的变异。我第一次看明白这个逻辑的时候有点懊恼因为它实在太顺了先构造一个“零假设下已知分布”的统计量再看实测统计量落在分布的哪个位置。四大分布全部服务于这条统一流程。5. 新手最容易踩的坑自由度、样本量与应用边界5.1 自由度写错结果全变自由度出错是我见过最常见的统计错误表现形式五花八门把样本量n当成自由度、把卡方拟合优度检验的自由度写成k而不是k-1、在列联表独立性检验里忘了自由度是(r-1)(c-1)。任意抽样分布的自由度本质是“独立信息数”。样本方差用掉一个均值所以方差相关的分布自由度减1列联表每一行、每一列的合计都是约束所以每条边都要减1。与其背公式不如每次拿到一个统计量先问自己——这里面估计了几个参数用了几个独立样本数量这个习惯能帮你避免九成以上的自由度错误。5.2 小样本硬套正态近似假阳性暴涨这是t分布相关的高频坑。很多软件默认输出正态近似的z值或者一些老旧的线上工具只给z检验结果数据量小的时候很容易误判。经验法则样本量低于30、总体标准差未知优先考虑t分布甚至我个人的习惯是只要总体标准差是估计出来的一律用t分布反正自由度大了两者几乎没差别也不会吃亏。我在2.2的部分跑过一个模拟样本量只有8时t统计量的分布和标准正态差异肉眼可见尾部差距非常大。这种差异在p值上有直接体现——本来应该0.05的显著性用正态近似可能算出0.03甚至更小这就是假阳性的温床。5.3 卡方检验的期望频数限制卡方检验用的是一种大样本近似它的适用条件在课本里经常就一句话带过实战中却特别容易翻车期望频数不能太小。一个常用的经验法则是所有期望频数不低于5如果类别很多可以放宽到“不超过20%的格子的期望频数小于5且所有期望频数不小于1”。如果你的数据不满足这个条件别硬用卡方可以考虑合并类目、用精确检验、或者用Fisher精确检验对2×2列联表尤其常用。5.4 F检验对正态性和方差齐性都很敏感F检验名义上是比较两个方差但它对总体的正态性假设非常敏感。如果总体偏态明显F检验的实际显著性水平可能和名义水平差很多。数据明显非正态时方差比较可以考虑Levene检验这类对分布更稳健的方法或者直接用不依赖方差相等假设的Welch ANOVA。同样的提醒也适用于方差分析场景。经典ANOVA有三个前提各组近似正态、各组方差齐性、观测独立。前两个可以适当放宽——如果各组样本量接近ANOVA对方差齐性的违反不太敏感但独立性一旦被破坏比如数据存在时间相关性或聚类结构ANOVA的结果基本就不能信了。5.5 只看p值不效应量检验结果容易误读这个坑放在最后说因为它已经不仅是“四大分布”层面的问题而是整个统计推断习惯的问题。t检验和F检验能告诉你“差异是否显著”但显著性受样本量影响巨大——样本量足够大时再微小的差异也能被标成显著。一个判断“有没有差异”的问题和一个判断“差异有多大”的问题是两码事。实操建议给均值差异的t检验附上Cohens d给方差分析的F检验附上η²或ω²这类效应量指标。p值告诉你是否值得关注效应量告诉你怎么解释这个结论的实际意义两个搭配着看才有完整的信息。6. 关于这套知识我个人的一个实操体会每次我在实际项目里看到有人拿一堆数据直接跑回归、也不管自由度是什么就直接看星号我都想把他拽回这四大分布重新过一遍。其实统计软件再强大也只是帮你把统计量算出来并假设计算结果服从某个理论分布。你要是不知道这个分布是怎么来的、自由度对不对、样本量够不够软件给的p值就是一堆没有根基的数字。反过来只要你理解了正态到卡方、卡方到t、卡方到F这三条核心推导路径再看大多数检验的统计量公式就成了解谜游戏——先找到统计量里的“正态”再找到对应的“卡方”最后看它们的组合方式分布自然就出来了。如果这篇能帮你把四大分布从“背公式”变成“老朋友”那我的目的就达到了。建议你按3.1节里的模拟代码自己跑一遍改改自由度亲眼看看分布形态的变化。统计这东西真不是靠背书能学到位的。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑