ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

方差分析完全指南:从F检验到MATLAB实现

方差分析完全指南:从F检验到MATLAB实现

做数据分析这几年,我越来越觉得**方差分析(ANOVA)**是一个被严重低估的工具。上个月某实验室的A同学拿着一组三工艺对比数据来找我,他的第一版分析报告里做了三个独立t检验,准备逐个下结论。我问他:你知道这么拆着比,整批结论的犯错误概率已经膨胀到多少了吗?他愣了一下。这个场景太常见了。很多人学统计时都听过ANOVA这个名字,但真正轮到自己上手分析,却总想用更“直接”的两两t检验绕开它。

这篇文章我打算把ANOVA彻底讲透:它到底解决什么问题、家族里有哪几类、F统计量背后的运算逻辑、分析前必须做的假设置验、一个完整案例从头跑到尾的MATLAB实现,以及事后多重比较该怎么选。不管你是刚上手的科研小白,还是经常跟实验数据打交道的工程师,这篇文章都能直接拿来当操作手册用。

1. 为什么说“先做ANOVA再拆组”是统计底线的第一课

1.1 三组数据的t检验连环套问题

假设你有三个处理组:A组、B组、C组,每组各测了若干个样本。最朴素的想法是:A和B比一次,B和C比一次,A和C再比一次,三次t检验搞定。听起来很直观,对吧?问题是,这三次比较每次都有约5%的概率“冤枉好人”——也就是本来没有差异,却因为随机波动被判为有差异。

三次比较下来,至少犯一次这种错误的概率是多少?按独立情况近似计算:1 - (1 - 0.05)^3 ≈ 0.1426。也就是说,你宣称“三组之间有显著差异”的把握,实际上打了差不多86折。如果是五组数据,两两比较就有10次,整体犯错误概率直接飙到40%以上。这个数字足够让任何谨慎的分析师心里发毛。

这还只是单因素、只关心两两差异的情形。如果分析稍微复杂一点,组合数量还会爆炸。ANOVA的核心价值,就是先做一次全局检验,回答“这些组的均值到底有没有任何差异”这个总问题,把整体犯错误的概率控制在名义水平附近,再去问“具体哪两组不同”。

1.2 F检验像一个“先筛查后细查”的漏斗

你可以把ANOVA里的F检验理解成体检中的初筛:先判断身体各主要指标整体有没有异常,如果初筛亮红灯,再针对具体指标做细查。这个流程相比一上来就做十个单项检查,能避免大量假阳性。

所以在实际项目里,我的第一原则是:只要涉及三组及以上均值的比较,先跑ANOVA,只有F检验显著时才谈事后多重比较。如果F检验不显著,还硬要从两两比较里挑一个显著的p值出来讲故事,那基本属于自欺欺人。当然,如果实验设计阶段就明确指定了少数几个比较,比如“新工艺必须优于旧工艺”,可以在没有整体F检验的情况下做有计划的比较,但那属于LSD等方法的适用范围,我会在第7章专门讨论。

2. 方差分析的家谱:单因素、双因素、交互效应与重复测量

2.1 单因素ANOVA——最常见的入门形态

单因素ANOVA是最基础的形态:一个分类自变量(因素),若干个水平,一个连续因变量。比如三种不同加工温度处理同一种材料,测量抗拉强度;三种教学方法下学生的期末成绩;四个种子品种的亩产量。这个“因素”可以是工艺、温度、品种、地区、时间点,本质上是分组变量。

数学模型可以写成: y_ij = μ + α_i + ε_ij

μ是总均值,α_i是第i组的水平效应,ε_ij是随机误差,假定服从均值为0的正态分布。零假设是“所有组的均值相等”,备择假设是“至少有一组均值不同”。注意,备择假设不是“所有组都不同”,这也是为什么F检验显著后还需要事后比较的原因。

2.2 双因素ANOVA与交互效应

一个因素不够用的时候,双因素ANOVA就上场了。常见场景:温度和催化剂浓度同时影响化学反应转化率;药物剂量与给药方式共同决定疗效。双因素ANOVA不仅能看两个因素各自的主效应,还能看交互效应。

交互效应这个概念很多人初次接触会绕。简单来说,如果A因素在B因素的低水平下影响很大,在B因素的高水平下影响很小甚至消失,那就说明两个因素“不独立”,存在交互。画个交互图最能说明问题:两组连线平行,说明没有交互;连线交叉或呈明显不平行,说明交互存在。

MATLAB里实现双因素ANOVA,我一般直接用anovan,而不是anova2。原因后面代码部分会说,一句话提示:anovan的通用性和输出可读性都要好得多。

2.3 多因素、嵌套设计与重复测量

因素再多几个,就是多因素ANOVA,同样用anovan处理。比如考察温度、压力、保温时间三个因素对材料性能的影响,可以同时分析三个主效应和任意阶交互。需要注意,因素越多,需要的样本量越大,高阶交互越难解释,设计时要克制。

嵌套设计的典型场景是:多个车间,每个车间若干台设备,每台设备测若干产品。设备嵌套在车间里,不能用普通交叉设计简单处理。对这种结构,anovan也支持嵌套模型声明。

重复测量ANOVA则是针对同一批被测对象在多个时间点或条件下重复观测的。比如20名受试者在三个时间点的血压值。它的优势是能剔除个体差异带来的组间波动,统计效力更高,但代价是引入了同一对象多次测量之间的相关性。MATLAB中可以用fitrm拟合重复测量模型,再用ranova输出方差分析表,同时还要关注球形假设是否满足。

2.4 协方差分析与其他扩展方向

如果除了分类因素,还有一个连续的协变量需要控制,比如比较三种减肥方案的效果,需要扣除受试者初始体重的影响,那就属于协方差分析(ANCOVA)。这类问题用fitlm将分组变量和协变量一起放进线性模型就行,aoctool也提供了交互式分析界面。

当你有多个因变量需要同时考察时,比如测量产品的强度、韧性、硬度三个指标,不能用三个ANOVA各自跑一遍了事,因为三个指标之间存在相关性。这时应该用多元方差分析(MANOVA),MATLAB中可以用manova1。MANOVA的核心思想是把多个因变量合并成一个线性组合,使得组间差异在这个组合上最大化。教科书常说MANOVA能控制“多重指标联合检验”的总体错误率,这一点在工程项目的多性能指标对比中非常实用。

为了直观对照,我把整个家族的适用场景和对应函数整理成一张表:

分析类型典型问题自变量/因变量特点MATLAB入口
单因素ANOVA三种工艺下产品强度是否一致一个分类变量,一个连续因变量anova1
双因素ANOVA温度和配比是否影响转化率两个分类变量,一个连续因变量anovan
多因素ANOVA温度、压力、时间对性能的影响多个分类变量,一个连续因变量anovan
嵌套ANOVA多个车间内多台设备的差异因素间存在嵌套关系anovan
重复测量ANOVA同一批对象多个时间点上的差异同一对象重复测量fitrm+ranova
ANCOVA排除协变量后的组间差异分类变量+连续协变量,一个因变量fitlm/aoctool
MANOVA多个指标联合考虑时组间差异多个连续因变量manova1

3. F值的逻辑:把总变异拆成可解释与不可解释两部分

3.1 方差分解:总平方和 = 组间平方和 + 组内平方和

ANOVA的核心数学逻辑是做一次平方和分解。把所有观测值的总波动(总平方和SST)拆成两块:一块是组间平方和(SSB),衡量各组均值相对总均值的偏离程度,它反映的是“处理因素带来的差异”;另一块是组内平方和(SSE),衡量同一组内各样本相对该组均值的偏离程度,它反映的是“随机误差”,也就是同一种处理下个体之间的自然波动。

公式是: SST = SSB + SSE

拿运动员打靶来类比:不同运动员之间的平均环数差距是“组间差异”,同一个运动员多次脱靶的散布是“组内差异”。如果运动员之间的实力差距远大于每个人自己发挥的波动,你才能信服地说“他们水平不一样”。

3.2 自由度与F统计量的构造

平方和本身会随样本量增大而变大,所以不能直接用SSB和SSE比大小,得各自除以自由度,得到“均方”。组间自由度dfB = k - 1,组内自由度dfE = N - k,其中k是组数,N是总样本量。

MSB = SSB / (k - 1) MSE = SSE / (N - k)

F统计量就是这两个均方的比值: F = MSB / MSE

这个比值越大,说明组间差异相对组内随机波动越突出,处理因素越可能真的有效。F分布有两个自由度参数,就是上面说的dfB和dfE。得到F值之后,统计软件会算出一个p值:在“所有组均值相等”这个大前提下,出现这么大F值的概率。

3.3 一个具体的数值演示

后面第5章会给出一个三工艺对比的完整案例,这里先剧透一下关键数值。那个案例里,组间平方和约273.88,组内平方和约110.76,组数k=3,总样本量N=24。于是:

MSB = 273.88 / 2 ≈ 136.94 MSE = 110.76 / 21 ≈ 5.27 F = 136.94 / 5.27 ≈ 25.96

对应F(2,21)分布,p值远小于0.001。这个结果说明:三组工艺之间的均值差异,相比同一工艺内部样品之间的波动,大到基本不可能是随机造成的。

我经常跟人说,F值本身没有绝对的好坏标准,必须结合分子分母自由度和实际业务背景来看。有的场景样本量大、测量精度高,很小的效应也会得到很大的F值;有的场景数据噪声大,F值不大但实际差异可能很重要。所以分析结果的时候,除了p值,务必看一眼MSB和MSE的具体量级,它们往往能告诉你差异到底“大不大”,而不是仅仅“显不显著”。

4. 检验前的体检:正态性、方差齐性与计算顺序

4.1 独立性优先于一切

方差分析的第一个假设是观测独立。这个要求通常由实验设计来保证:随机分组、独立测量、样品之间互不影响。统计检验本身很难检验独立性,所以只能靠实验设计的合理性来保障。如果你的数据来自同一个样品重复测了好几次,或者一个测量值会影响后面的测量值,那么任何后续的ANOVA结果都不可信,这时候就得考虑重复测量设计。

4.2 正态性检验:样本量大于30可以松一口气

理论上,ANOVA要求各组残差服从正态分布。实际操作中,残差正态性比原始数据正态性更重要,而且当每组样本量较大(通常认为不低于30)时,中心极限定理会让均值检验对正态性偏离相当稳健。

我常用的检查手段有三个:一是画Q-Q图,看残差点是否大致落在45度参考线上;二是lillietest或jbtest做正式检验;三是看每组数据的直方图有没有明显的双峰或极端偏斜。

这里有一个经验:不要一看到正态性检验p<0.05就急着放弃ANOVA。正态性检验本身对样本量很敏感,样本量大时微小的偏离也会显著。更务实的做法是结合Q-Q图和偏度、峰度数值做判断。只有出现明显偏态、极端离群点时,才考虑数据变换或换用非参数方法。

4.3 方差齐性:Levene比Bartlett更抗造

第二个控制性假设是方差齐性,也就是各组总体方差大致相等。如果一组数据特别散、另一组特别集中,F检验会被方差大的组牵着走。

MATLAB里可以用vartestn做方差齐性检验。它默认提供多种方法,其中Levene检验对数据分布偏离正态不敏感,是我更依赖的那个。Bartlett检验虽然功效更高,但对正态性要求也高,数据分布有点偏就可能给出误导性的结论。

还有个经验法则:如果各组标准差的比值不超过2,一般问题不大;超过2了,就要认真考虑补救措施。

4.4 体检不通过时的备选路径

如果方差齐性不满足,最直接的替代方案是Welch方差分析,它通过修正自由度和F值来缓解方差不齐的问题。另一个选择是Kruskal-Wallis检验,这是非参数版本,只检验分布位置是否相同,不要求正态性,也不要求方差齐性。代价是如果数据确实服从正态分布,它的检验功效大约比ANOVA低5%到10%。

数据变换是另一种思路。对右偏的数据取对数或倒数,往往能同时改善正态性和方差齐性。我遇到计数数据或时间数据,一般会先尝试对数变换,再重新体检。但要注意,变换后的解释要和业务场景对齐,毕竟你在分析的不是原始指标了。

还有一点要记住:这些前置体检本身也会消耗“统计自由度”。我在实际操作中,会把这些检验当作诊断工具,而不是巴洛克式的通关条件。只要数据没有严重偏离假设,ANOVA的结论通常还是可靠的。

5. 一个完整案例:三种加工工艺的材料强度对比分析

5.1 研究背景与数据设计

某实验室想评估三种材料加工工艺对最终产品抗拉强度的影响。三种工艺分别是旧工艺A、改进工艺B、新工艺C。每种工艺各准备8个样品,共24个样品,安排上完全随机,每组样品独立加工、独立测试。

数据我整理成下面这样(单位MPa):

组别样品1样品2样品3样品4样品5样品6样品7样品8
工艺A77.175.279.374.878.676.380.177.8
工艺B83.481.285.682.784.180.983.885.2
工艺C88.286.589.187.485.890.286.988.7

每个样品之间的测量误差和材料本身的微观差异构成了组内噪声。

5.2 描述性统计与箱线图预判

拿到数据的第一件事不是跑检验,而是算描述性统计、画箱线图。三组的均值和标准差:

组别均值标准差
工艺A77.401.80
工艺B83.361.61
工艺C85.351.49

从数值上看,工艺A明显偏低,B和C都高于A,B与C之间的差距相对较小。箱线图能更直观地展示这一点:三个箱体的位置依次抬高,A和B、A和C之间的间隔明显大于各组内部的箱体宽度。这时候我已经预感ANOVA大概率是显著的,但差异具体落在哪两组之间,还得靠事后比较确认。

5.3 ANOVA检验与平方和表

对这24个数据做单因素ANOVA,得到的结果可以整理成一张标准方差分析表:

变异来源平方和(SS)自由度(df)均方(MS)F值p值
组间273.882136.9425.96<0.001
组内110.76215.27
总变异384.6423

p值远小于0.05,所以我们可以拒绝“三种工艺均值相等”的零假设。但注意:这个结论只说“至少有一组不同”,还没告诉我们到底是A和B不同,还是A和C不同,还是三者都不同。

5.4 事后比较与最终结论

这时再调用Tukey HSD事后比较。从返回结果看,工艺A与工艺B的差异显著,工艺A与工艺C的差异也显著,而工艺B与工艺C之间的差异没有达到显著水平。于是最终结论是:工艺B和工艺C都能显著提升抗拉强度,两者自身差异在统计上还没有足够证据支持;若要进一步区分B和C,需要更大样本量或更高精度的测试。

这个案例很有代表性:整体ANOVA显著,但事后比较只找出了部分组间差异。如果只报告F检验的p值,读者就会误以为三组互相都不同;如果只做两两t检验,又会有多重比较带来的膨胀问题。完整的分析链条是:描述统计 → 假设体检 → 总体F检验 → 事后多重比较 → 结合均值排序给出业务结论。

6. MATLAB代码实战:从anova1到anovan的完整调用链

6.1 anova1的调用格式与返回结构

单因素ANOVA最直接的函数是anova1。基本语法:

[p, tbl, stats] = anova1(data, group, 'off');

其中data是长度N×1的列向量,group是同样长度的分组变量,可以是数值向量,也可以是cell字符串数组。第三个参数'off'表示不自动显示箱线图。返回值中,p是F检验的p值,tbl是方差分析表(cell格式),stats是包含组均值、样本量等信息的结构体,稍后可以直接传给multcompare做后续分析。

用第5章的数据,完整代码是这样:

data = [ 77.1 75.2 79.3 74.8 78.6 76.3 80.1 77.8 83.4 81.2 85.6 82.7 84.1 80.9 83.8 85.2 88.2 86.5 89.1 87.4 85.8 90.2 86.9 88.7 ]'; dataVec = data(:); % 转换为长格式列向量 group = [ones(8,1); 2*ones(8,1); 3*ones(8,1)]; [p, tbl, stats] = anova1(dataVec, group, 'off'); disp(p); disp(tbl);

注意我用data(:)把矩阵转成了列向量,顺序是逐列展开,所以组A的8个数据在前,组B的8个数据居中,组C的8个数据在后,和group的分组一一对应。tbl的输出中,第二行是组间信息,第三行是组内信息,列依次是SS、df、MS、F和Prob>F。如果想在脚本里自动提取F值和p值,可以这样:

Fval = tbl{2, 5}; pval = tbl{2, 6};

6.2 multcompare事后比较与经典图

拿到了显著的F检验结果,下一步就是事后比较:

[res, means, h] = multcompare(stats, 'CType', 'hsd'); disp(res); disp(means);

res是一个k行6列的矩阵,每一行代表一次两两比较。六列依次是:第一组编号、第二组编号、置信区间下限、均值差估计、置信区间上限、p值。如果某一行的置信区间不包含0,或p值小于0.05,就说明这两组差异显著。means包含各组的均值和标准差,可以顺手用来做标记。

h是图像句柄,multcompare会画一张交互式的比较图,组间均值差以蓝色区间标出,红色表示差异显著的组。这张图用来快速跟同事汇报结论非常直观。

6.3 双因素与多因素场景用anovan

anova2只适用于每组样本量相同的双因素平衡设计,灵活性差,我一般直接推荐anovan。它的调用方式是:

[p, tbl, stats] = anovan(y, {factorA, factorB}, ... 'model', 'interaction', 'varnames', {'温度', '配比'});

其中y是连续因变量列向量,factorA和factorB是等长的分组变量。'model'参数可以设为'linear'(只含主效应)、'interaction'(含两两交互)或'full'(含所有阶交互)。varnames会在输出表里显示各自变量名称,配合表格结果能让报告更易读。

如果需要指定某个因素为随机效应,可以用'random'参数标明这是随机因素。这个功能在分析嵌套数据时尤其有用。

6.4 重复测量与协方差分析的代码骨架

重复测量场景下,我通常先构造table,再用fitrm和ranova:

tbl = table(subjectID, time1, time2, time3, ... 'VariableNames', {'Subject', 'T1', 'T2', 'T3'}); rm = fitrm(tbl, 'T1-T3 ~ 1', 'WithinDesign', [1 2 3]); ranovatbl = ranova(rm);

协方差分析则用fitlm一步到位:

lm = fitlm(dataTable, 'Strength ~ Process + InitialWeight'); anova(lm);

把分类变量Process和连续协变量InitialWeight一起放进模型,anova(lm)输出后,Process那一项的p值就是排除协变量影响后的组间差异检验。

6.5 可复制的单因素脚本模板

如果把整条分析串成一个脚本,下面是适合直接套用的模板:

% 数据准备:dataMat的每行代表一个组别,每列代表该组的一个样本 dataMat = [ 77.1 75.2 79.3 74.8 78.6 76.3 80.1 77.8 83.4 81.2 85.6 82.7 84.1 80.9 83.8 85.2 88.2 86.5 89.1 87.4 85.8 90.2 86.9 88.7 ]; dataVec = dataMat(:); group = repmat([1;2;3], 1, size(dataMat, 2)); group = group(:); % 单因素ANOVA [p, tbl, stats] = anova1(dataVec, group, 'off'); % 在p < 0.05 时做Tukey事后比较 if p < 0.05 [res, means] = multcompare(stats, 'CType', 'hsd'); end

我在实际工作中会把这个模板存成函数文件,输入数据矩阵和分组数,自动返回p值、F值和事后比较结果,配合生成的箱线图,20分钟就能完成一次标准分析。

7. 事后多重比较:什么时候做、用哪个方法、怎么解释

7.1 F检验显著之后的“最后一公里”

F检验显著只告诉你“组间不是全都一样”,但这句话太含糊了。你需要知道具体哪两组有差异、哪两组没有,这就是事后多重比较的职责。

为什么不能直接做t检验?因为多次比较会累积犯第一类错误的概率,这一点在第1章已经详细算过。事后比较方法就是在“尽量发现真实差异”和“控制总体错误率”之间寻找平衡。

7.2 LSD、Tukey、Bonferroni与Scheffe的取舍逻辑

我按从宽松到保守的顺序整理一下:

**LSD(最小显著差数)**最宽松,等价于直接用t检验比较各组,但前提是整体F检验显著。它适合实验设计阶段就明确指定少数几个比较的情形,比如新工艺对比旧工艺。如果搜索范围很大且没有预先计划,不建议使用。

**Tukey HSD(诚实显著差异)**专门针对“所有组两两配对比较”设计,能在控制总体错误率的前提下保持较高的发现能力。它是Engineering和科研报告中最常用的一种,也是我的默认选择。

Bonferroni把显著性水平除以比较次数,α/m,结果最保守。当比较次数很多、样本量又有限时,它可能把真实差异也一并“保护”没了。但它的优点是概念清晰、实现简单,什么比较都能用,不限于两两配对。

Scheffe适用于更复杂的比较,比如任意线性组合、多条对比的联合检验。它的代价是效力较低,一般用得少。

不同方法的选择,本质是在回答同一个问题:你愿意为“找到更多差异”承担多大的假阳性风险?如果你只是常规探索,就选Tukey;如果每组样本量很大、比较数量不多,Bonferroni也可以接受;如果有明确的先验假设,LSD才有用武之地。

7.3 MATLAB中的实现选项与结果解读

multcompare的CType参数支持不同方法:

CType取值对应方法适用场景
'lsd'LSD有明确计划、比较数量少的检验
'hsd'Tukey HSD常规无计划的全部两两比较
'bon'Bonferroni需要严格总体错误率控制
'scheffe'Scheffe复杂自定义对比
'dunn-sidak'Dunn-Sidak修正版Bonferroni

从multcompare返回的res矩阵读结果时,重点看两组之间的置信区间。比如某一行是[1 2 3.2 5.5 7.8 0.001],表示第1组均值比第2组低5.5个单位,95%置信区间是[3.2, 7.8],不包含0,p=0.001,差异显著。如果区间两端一正一负,包含0,就表示差异不显著。

报告事后比较结果有个常见方式是用字母标记:共享同一个字母的组别之间没有显著差异。比如最终结果是A组标a,B组和C组都标b,说明A和B、A和C都不同,B和C同组。这种方式在论文和工程报告里特别常见,简洁且信息量高。

8. 实操复盘:不平衡数据、方差不齐与效应量的处理经验

8.1 不平衡数据与III型平方和的陷阱

实际项目里各组样本量常常不相等,这叫不平衡设计。这时候SSB的分解方式就不是唯一的了:Type I、Type II、Type III平方和会给出不同的结果。Type I按因素输入顺序逐次校正,后输入的因素会“吸收”前面因素没解释的部分;Type III则每个因素都在其他因素和交互项存在的前提下独立检验,更稳健。

anovan默认使用Type III平方和,这也是统计界最普遍推荐的类型。我的建议是:除非你有特别强的理由,否则默认Type III就好。如果数据是平衡设计(每组样本量相同),三种类型的差别会消失,不必纠结。

8.2 方差不齐时的几条处理思路

方差不齐的陷阱我在第4章提过,这里给几条实操路径。首先试试vartestn,如果发现各组方差差异明显,可以改用Welch修正,MATLAB里anova1不支持Welch,需要自己写几行,或者直接在R里跑。数据量少时,Kruskal-Wallis检验是稳妥的退路。

我自己的习惯是:先看标准化残差图是不是“喇叭形”——残差随着拟合值增大而发散,这是方差不齐的典型信号。如果确实存在,先尝试对数变换或Box-Cox变换,变换后重新体检,往往能一石二鸟地解决方差不齐和右偏问题。最后实在不行才考虑非参数方法,因为非参数检验的结论解释起来不如均值差异那么直观。

8.3 效应量η²:比p值更该报告的数字

p值告诉你“差异是否显著”,效应量告诉你“差异有多大”。这是两件不同的事。样本量足够大时,哪怕0.5%的微小差异也能做出p<0.001;样本量小时,哪怕效应很明显也可能不显著。所以报告ANOVA结果时,我建议同时给出效应量η²:

η² = SSB / SST

这个比值可以理解为处理因素解释了总变异的比例。回到第5章案例,SSB=273.88,SST=384.64,η²≈0.71。意思是抗拉强度的总变异中,约71%是由工艺差异造成的。这个数字比单纯说“p<0.001”有信息量得多——它让读者直观地感受到工艺因素的主导地位。

在MATLAB里,从tbl中取出SSB和SST就能算:

etaSq = tbl{2,2} / tbl{4,2};

有几个约定俗成的判断参考:η²=0.01左右是小效应,0.06左右是中等效应,0.14以上是大效应。按这个标准,0.71已经是“大到不能再大”的水平。放到项目报告中,领导看完这个数,基本就能理解为什么要换工艺了。

8.4 异常值与一份谨慎心态

箱线图里冒出来的离群点总能让人心慌。我的处理流程是:先查原始记录和测量日志,确认不是录入错误或传感器故障;如果是真实测量值,不要轻易剔除,可以做一次包含与不包含离群点的敏感性分析,看看结论是否改变。只要结论方向一致,离群点就可以放在报告里说明;如果结论翻转了,说明数据太脆弱,这时候最该做的是补测样本,而不是继续纠结统计方法。

做了这么多年数据分析,我养成了一个习惯:拿到数据先画图,跑统计必看效应量,报告结论先交代假设检验是否成立。这个习惯帮我少踩了很多坑。你也别嫌前面的体检步骤麻烦——方差分析这个工具,用对了是利器,用错了就是给人留话柄的破绽。照着这篇文章的流程,从描述统计一路走到事后比较,你的三组对比分析就不会再被人挑出硬伤了。

返回列表