F检验临界值表与Friedman检验表:区别、查表与关联
统计从业者大概都有过这种经历做方差分析要翻F分布临界值表做多个相关样本的非参数比较又会被建议去翻Friedman检验临界值表。两本不同的教材、两张名字相近的表再加上“F检验临界值表Friedman检验表”这种带括号的组合写法新手十有八九会以为它们是同一个东西或者觉得Friedman检验就是F检验的非参数版本查表时直接翻F分布表就行。今天就把这两张表放在一起彻底盘清楚包括它们各自解决什么问题、表到底怎么查、什么时候可以互相参照、什么时候绝对不能混用。我先说结论F检验临界值表对应的是F分布服务的是方差分析、回归整体显著性这类参数检验Friedman检验表对应的则是弗里德曼检验是非参数场景下用于比较多个相关样本的统计量。但两者确实能“同框”——当Friedman统计量需要做小样本修正时有一种做法就是把它转换成F分布的近似值这时你查的又确实是F检验临界值表。下文我会把这层关系彻底展开并且用一套可以照着算的例子走完整个查表流程。1. 一表两用先把概念盘干净1.1 F检验临界值表和Friedman检验表是什么关系F检验临界值表在教材里通常就叫“F分布表”或者“F检验临界值表”它罗列的是F分布在指定显著性水平下的右尾临界值。F检验主要用于两组或多组方差比较、方差分析中的组间差异检验、回归模型的整体显著性检验。它的检验统计量是两个卡方变量除以各自自由度之后的比值所以需要两个自由度来定位临界值。Friedman检验表则出现在非参数统计的附表里英文常写作Critical Values for the Friedman Test是弗里德曼检验统计量Q的精确临界值表。Friedman检验解决的问题是有k个处理、n个区组每个区组内部都有k个观测值我想知道这k个处理之间有没有显著差异。它不要求数据正态也不要求方差齐性只要求区组内部的观测值可以排序。因为计算过程中只用到秩所以它是标准的非参数检验。那为什么标题会把两者写成“F检验临界值表Friedman检验表”呢我理解有两种可能。一种可能是整理资料的人把两套表并列放在一起想做一个对照合集。另一种可能就涉及到统计学里一个实际存在的转化Iman和Davenport在1980年提出在小样本情况下Friedman检验的统计量可以转换为一个F统计量用F分布临界值来做推断这样比直接查卡方分布更保守、更稳。于是Friedman检验的查表过程最终真的会落到F检验临界值表上。1.2 什么时候它们开始“同框”先说结论产生的应用场景。F检验的经典场景是单因素方差分析三组以上数据想比较均值是否相等前提是数据近似正态、各组方差齐性。Friedman检验的经典场景则是完全区组设计或者重复测量设计一组受试者分别接受三种处理或者同一批数据集分别跑三个算法得到k组相关样本想比较总体上有没有差异。在机器学习模型比较那一块Friedman检验特别常见。比如我有10个数据集、4个分类器每个数据集上都算出分类精度然后想判断4个分类器是否存在显著差异。每个数据集是一个区组每个分类器是一个处理这不满足正态性时就直接上Friedman检验。而很多论文在报告时会加一句“我们同时使用了Iman-Davenport修正的F分布近似”这一步就是把Friedman检验表的问题交回给了F检验临界值表。所以这两张表不是同一个东西但确实存在一座桥。理解好这座桥查表才不会蒙。2. F检验临界值表怎么读、怎么查、怎么用2.1 F分布的两个自由度与表头结构F分布由分子自由度df1和分母自由度df2决定。这个名字容易让人晕其实可以这么理解F统计量本身是一个比值分子上那个均方的自由度就是df1分母上那个均方的自由度就是df2。在单因素方差分析里df1等于组数减一df2等于总样本量减组数。比如3组数据、每组5个样本总样本量15那么df12df215-312。在回归模型里df1等于自变量的个数df2等于样本量减自变量个数再减一。搞弄清楚df1和df2后面查表就成功了一半。F分布临界值表的经典排版是行放df1列放df2当然也有教材反过来放。我建议拿到表先别急着查先看表头那一行和那一列标注的是“分子自由度”还是“分母自由度”这个动作能省掉后面一大堆麻烦。每个显著性水平α对应一张分表最常见的是α0.05和α0.01。你要用哪一档显著性就翻到对应的那一页。2.2 查表三步法和一个ANOVA实例查表其实就三步第一确定显著性水平第二找到df1和df2第三交叉点读出临界值拿计算得到的F统计量去比。我举个例子。假设三组数据各自5个样本数据是组12、3、4、5、6均值4组26、7、8、9、10均值8组310、11、12、13、14均值12总均值是8。组间平方和等于每组样本量乘以组均值与总均值之差的平方再求和算出来是5×16016160组间均方MSB160/280。组内平方和我算了一下每组都是10三组合计30组内均方MSW30/122.5。于是F80/2.532。查表时df12df212α0.05查F分布临界值表得到F(2,12)3.89附近。32远大于3.89所以拒绝三组均值相等的原假设认为三组均值存在显著差异。这就是F检验临界值表最标准的用法。2.3 查表时最容易翻车的三个细节第一个翻车点是单尾双尾不分。F检验在方差分析里用的是右尾检验查的是右尾临界值这个没问题。但如果你用F检验去比较两个方差的大小比如检验两组方差是否相等这时候需要双尾。双尾情况下上尾临界值查α/2下尾临界值不是直接查表查出来的要用倒数关系F_{1-α/2}(df1,df2)1/F_{α/2}(df2,df1)。这里df1和df2的位置要互换很多教材的核心附表只给右尾所以必须会算倒数。第二个翻车点是自由度颠倒。F(2,12)和F(12,2)完全不是一个量级。F(2,12)在0.05显著性水平下约3.89而F(12,2)则要大得多约19.41。如果表拿反了判断结论可能完全相反。我见过不少人在Excel里用F.DIST.RT时把两个自由度参数搞反然后对着结果一脸困惑。第三个翻车点是不看前提直接上F检验。F检验用于方差分析时数据要先满足正态性和方差齐性否则F统计量的分布会偏离理论分布查表决策就失去了意义。初学者最容易犯的错是数据明显偏态还硬做ANOVA得到显著结果就高兴其实结论根本站不住。3. Friedman检验表非参数多维比较的临界值表3.1 Friedman检验的原理区组内的排序思想Friedman检验的核心思想很直观在每个区组内部把k个处理的值从小到大排秩如果k个处理真没有差异那么每个处理在各区组里的秩应该是随机分布的秩和应该差不多如果某个处理的秩和明显偏大或偏小就说明它和其他处理不一样。这个设计避开了正态性和方差齐性的限制。它把每个区组内部的绝对数值全部丢掉了只保留相对顺序所以对分布形状不敏感。官方一点说原假设是k个处理的总分位数没有差异备择假设是至少有一个处理的分布位置与其他处理不同。适合的使用场景包括同一批受试者依次接受k种治疗方案的评价数据同一批检测样本交给k家实验室检测的对比数据同一组数据集跑k种算法得到的性能指标矩阵。3.2 Friedman统计量计算的完整算例别光看公式直接上手算一遍。假设3种教学方法A、B、C6个学生参与实验每个学生都接受三种方法并得到一个测试成绩。数据我刻意设计得有规律学生ABC160758827270853588090465769557066926637888现在在每个学生内部排秩。学生2的成绩是A72、B70、C85从小到大是BAC所以B的秩是1A的秩是2C的秩是3。学生5是A70、B66、C92从小到大是BAC同样B1A2C3。把所有学生的秩都列出来学生A秩B秩C秩112322133123412352136123于是三个处理的秩和分别为R_A8R_B10R_C18。样本个数n6处理个数k3Friedman统计量Q的计算公式是Q [12 / (n×k×(k1))] × Σ(R_j²) − 3×n×(k1)代入Q [12/(6×3×4)] × (64100324) − 3×6×4 (1/6)×488 − 72 81.333 − 72 9.333。3.3 Friedman检验表与卡方近似、F近似的使用边界拿到Q9.333之后怎么判断显不显著这里就有三条“查表路线”可以走。第一条是查Friedman精确临界值表。很多教材在非参数统计附表里提供小样本精确临界值比如k3、n6、α0.05时临界值大约在8.0附近。我们算的9.333超过了这个值所以拒绝原假设。这是“最正规”的查表方式。第二条是查卡方分布临界值表。在样本量较大的时候Q近似服从自由度dfk−1的卡方分布。本例df2χ²_{0.05,2}5.991。Q9.3335.991同样拒绝原假设。第三条是查F分布临界值表用Iman-Davenport修正。转换公式是F [(n−1)×Q] / [n×(k−1)−Q]代入n6、k3、Q9.333F (5×9.333)/(6×2−9.333) 46.667/2.667 ≈ 17.5。这个F统计量近似服从自由度为(k−1, (n−1)(k−1))的F分布也就是F(2,10)。查F检验临界值表F_{0.05}(2,10)4.10左右17.5远大于4.10还是拒绝原假设。三条路线结论一致这就让你对检验结果很有信心。不过要注意三条路线的适用边界不同精确表适用于小样本卡方近似适用于中等以上样本样本越小越容易“提前拒绝”F近似在小样本下通常比卡方近似更稳所以不少机器学习论文更愿意报告这个修正结果。4. 用一张实际数据表走通查表全流程4.1 数据与场景设定我觉得只看公式不过瘾咱们再完整地走一遍查表流程。场景选朴素一点4个算法模型在6个数据集上的F1分数。每个数据集就是一个区组每个算法就是一个处理。数据如下数据集算法A算法B算法C算法DD10.820.780.850.88D20.760.800.820.79D30.900.850.920.95D40.700.720.750.74D50.840.790.880.86D60.720.750.780.80这里n6k4。我们的原假设是四个算法在F1分数上没有差异。因为F1分数是比例数据在多个数据集上未必满足正态性用Friedman检验比重复测量方差分析更稳妥。4.2 手算秩和与统计量在每个数据集内部排秩得到数据集A秩B秩C秩D秩D12134D21342D32134D41243D52143D61234秩和分别是R_A9R_B10R_C21R_D20。n6k4代入Friedman公式Q [12/(6×4×5)] × (81100441400) − 3×6×5 (12/120)×1022 − 90 102.2 − 90 12.2。4.3 三种临界值对照精确表、卡方表、F表先查卡方分布临界值表自由度dfk−13α0.05χ²_{0.05,3}7.815。Q12.27.815拒绝原假设四个算法整体上有差异。再走F近似路线F (n−1)×Q / [n×(k−1)−Q] (5×12.2)/(6×3−12.2) 61/5.8 ≈ 10.52。F近似的自由度为df1k−13df2(n−1)×(k−1)5×315。查F检验临界值表F_{0.05}(3,15)3.29左右10.52远大于3.29同样拒绝。如果手头有Friedman精确临界值表查k4、n6、α0.05那一格教材附表给的临界值我在多个版本里看到都在7.0到8.0这个区间上下浮动。12.2远超这个范围结论依然是拒绝。三种查表方法得出同一个结论说明这个差异非常显著不是临界值表选哪种带来的侥幸结果。4.4 用软件验证一遍现实中很少有人真的手算我平时会顺手用R或者Python验证一下。R里面一行代码f1 - matrix(c(0.82,0.78,0.85,0.88, 0.76,0.80,0.82,0.79, 0.90,0.85,0.92,0.95, 0.70,0.72,0.75,0.74, 0.84,0.79,0.88,0.86, 0.72,0.75,0.78,0.80), nrow6, byrowTRUE) friedman.test(f1)Python的scipy里也有对应实现from scipy.stats import friedmanchisquare A [0.82, 0.76, 0.90, 0.70, 0.84, 0.72] B [0.78, 0.80, 0.85, 0.72, 0.79, 0.75] C [0.85, 0.82, 0.92, 0.75, 0.88, 0.78] D [0.88, 0.79, 0.95, 0.74, 0.86, 0.80] stat, p friedmanchisquare(A, B, C, D) print(stat, p)跑出来的统计量应该和手算的12.2接近p值远小于0.05。这类软件默认报的是卡方近似如果你想报告Iman-Davenport修正后的F值还需要自己加一步换算。我一般会在论文里把Q和修正F都写上审稿人看着会更放心。5. 这些问题我全踩过查表经验与避坑记录5.1 自由度颠倒的经典教训第一次做方差分析时我查F表查出来的结果跟软件对不上最后发现是表的方向看反了。很多F分布临界值表为了让页面窄一点行是df1、列是df2但有些国外教材的压缩表是行放df2、列放df1。你拿到一张表先花十秒钟确认表头怎么写这个动作比什么都值钱。还有一次是在Excel里用F.INV.RT函数。F.INV.RT(0.05, df1, df2)的第二个参数是分子自由度第三个参数是分母自由度结果我不小心把自由度填反算出来的临界值从3.9变成了19.4差点把一个显著的结论改成不显著。从那以后我每次都会把软件结果和手查表结果交叉验证一遍再下结论。5.2 小样本用错近似的血泪史Friedman检验的卡方近似在样本量小的时候会表现得过于激进简单说就是“更容易拒绝原假设”。早年我做一组k3、n5的配对数据时手算Q6.4查卡方临界值5.991拒绝了原假设。后来我翻到Friedman精确临界值表发现k3、n5、α0.05的精确临界值比5.991要高大约是6.4到6.8这个水平也就是说6.4其实处在一个灰色地带结论并没有那么经得起推敲。这件事之后我养成了一个习惯只要n小于15且k小于等于5尽量查精确临界值表或者用Iman-Davenport修正不要只盯着卡方表。这也是Friedman检验表和F检验临界值表真正产生交集的地方小样本问题把两件事绑在了一起。5.3 结并列秩到底改了什么Friedman检验遇到同一区组里有相同的数值时必须分配平均秩并做出结校正。比如一个区组里有两个并列第一它们的秩就不是1和2而是1.5和1.5。结校正会改变统计量Q的数值通常未校正的Q会偏大一点也就是说你越忽略并列越可能得到一个虚高的Q、越容易“显著”。手算结校正并不复杂但容易算错。我的做法是样本量小、结又少的时候手动算并写清楚结一多直接交给软件。R的friedman.test()和Python的friedmanchisquare()都自动处理了平均秩和结校正手算结果和软件结果不一致时多数时候是我自己的结校正写漏了。5.4 后检验该查哪张表Friedman检验显著之后你往往还得继续回答“究竟哪几个处理之间差异显著”这时就要做后检验。常见的是Nemenyi后续检验它计算的是临界差值CD公式里用到的临界值来自“学生化极差分布”的q临界值表既不是F表也不是卡方表。我踩过的坑是第一次做Nemenyi时拿F检验临界值表去查q值查出来完全对不上。后来才搞清楚q分布和F分布完全是两码事。所以你看统计分析里“查表”不是单纯找数字搞清楚当前在检验什么假设、应该用哪个统计量的分布比查表本身重要得多。6. 一点个人实操心得聊到最后分享几条我这些年总结下来的实操经验。第一查表前先明确自己在做什么检验。F检验临界值表解决的是“方差比值是否异常偏大”的问题Friedman检验表解决的是“多组相关样本的秩和是否存在系统性差异”的问题二者服务的假设不同不能因为Friedman检验的名字里有“F”就直接翻F分布表。第二小样本场景下别把卡方近似当成唯一权威。你要是只想用软件麻烦把软件输出和精确临界值对照一次你要是写论文把Friedman Q值、自由度、p值写全有条件的把Iman-Davenport的F近似也放上去这种细节往往是加分点。第三表格数字是死的人是活的。我见过很多人问“这个表为什么和我书上的表不一样”其实不是表有问题而是显著性水平选的不一样、自由度排布方向不一样或者教材用了不同的近似方法。查表时要报参数前因后果不要只写“查表得临界值”。最后再补一句现在统计软件越来越方便但临界值表作为原理训练的价值依然无可替代。把F检验表读懂了把Friedman检验表的三种查法走一遍你对自由度、近似分布、检验前提这些概念的理解会上一个台阶。真到了该用软件跑结果、写报告的那一天你心里会踏实很多。