当前位置:首页 > 问答 > 正文

树叶云带你简单聊聊SAS里那个Fisher精确测试到底咋用,步骤和注意点都在这儿

树叶云带你简单聊聊SAS里那个Fisher精确测试到底咋用,步骤和注意点都在这儿 主要整理和参考了树叶云平台上的学习笔记、SAS官方文档的通俗解释以及一些统计学论坛的常见问题讨论)

嗨,咱们今天就来掰扯掰扯SAS里的Fisher精确测试,这个名字听起来挺唬人,好像特别高深,其实它的核心思想很简单,就是用在当你的数据量太小,用平常的卡方检验不太靠谱的时候,它来帮你判断两个分类变量之间到底有没有关系,你想看看一种新药是不是比老药更有效,但你能找到的病人总共就二十来个,这时候Fisher精确测试就派上大用场了。

Fisher精确测试是啥?为啥要用它?

先说说它出现的场景,我们最常用的卡方检验有个暗含的要求,就是数据表里的期望频数不能太小(通常要求不能有超过20%的格子期望频数小于5,并且不能有任何格子期望频数小于1),如果你的数据表很“稀疏”,比如是个2x2的表,但某个格子里的实际人数只有1个或者甚至是0个,这时候再用卡方检验,结果就可能不准了,因为它背后的近似计算会出问题。

那Fisher精确测试牛在哪呢?它不依赖那种近似计算,它的思路非常“暴力”直接:我直接计算出在行合计和列合计固定不变的情况下,得到当前这张表格、以及比当前这张表格更极端的所有可能表格的概率是多少,然后把这些概率加起来,看看这个总概率(也就是我们常说的P值)是不是小到让我们觉得“哎呀,这事儿不太可能是碰巧发生的”,如果P值很小(比如小于0.05),我们就认为这两个变量之间很可能存在关联。

简单记:当你的数据表很小,尤其是2x2表格里有格子的频数小于5时,优先考虑用Fisher精确检验。

在SAS里怎么跑这个检验?(一步步来)

在SAS里,做Fisher精确测试超级方便,通常就藏在PROC FREQ过程步里,咱们用一个例子来走一遍流程。

假设我们研究两种教学方法(新方法 vs 传统方法)对学生是否通过考试的影响,数据如下:

教学方法 通过 未通过 合计
新方法 8 2 10
传统方法 4 6 10
合计 12 8 20

你看,这是个典型的2x2表,而且有两个格子的数值(2和4)都小于5,正好是Fisher精确检验的用武之地。

你的SAS程序可能会这么写:

data teaching;
    input method $ result $ count;
    datalines;
新方法 通过 8
新方法 未通过 2
传统方法 通过 4
传统方法 未通过 6
;
run;
proc freq data=teaching;
    tables method * result / fisher;  /* 关键就在这个 fisher 选项 */
    weight count; /* 告诉SAS,count变量是频数 */
run;

对,就这么简单!核心就是你在TABLES语句后面加上一个/ fisher选项。

结果怎么看?

你运行完上面的程序,SAS会输出一大堆表格,别慌,我们只盯住几个关键的看。

  1. 首先看“频率表”:确认一下你的数据有没有输错,看看每个格子里的数字是不是跟你预想的一样。
  2. 然后直奔“Fisher精确检验”的表格:这个表里会有好几行,对于2x2表,我们最关心的是下面这两行:
    • 左侧概率:这个通常不太用。
    • 右侧概率:这个可以理解为“右边更极端”的概率。
    • 双尾概率这是我们最常用的P值! 它综合考虑了两种可能的极端情况。

在我们的例子里,你最后会看到一个叫“Pr <= P”的数值,这就是双尾P值,假如这个值是0.16左右(具体数值取决于计算),因为它大于0.05,我们的结论就是:在当前数据下,尚不能认为两种教学方法对通过率的影响有统计学上的显著差异。

几个重要的注意点(坑别踩)

  1. 表格维度:我们上面举的例子是2x2的表,也是最常见的情况,但Fisher检验其实可以用于大于2x2的列联表(比如3x3的表),在SAS里,你同样是用/ fisher选项,不过要注意,对于大于2x2的表,SAS默认计算的是精确P值,这个计算可能会非常非常慢,尤其是你的样本量稍微大一点的时候,因为所有可能排列组合太多了,这时候SAS可能会算到天荒地老,所以对大表用的时候要谨慎。
  2. 双尾 vs 单尾:我们一般默认看双尾检验,因为它更稳妥,考察了两种方向的差异,除非你有非常强的先验知识,只关心一个方向的差异(比如你非常确定新药不会比老药差,只想检验是不是更好),才可能考虑单尾检验,但一般情况下,用双尾准没错。
  3. 数据录入格式:我上面的例子用的是“频数格式”,也就是有一个变量(count)来记录每个组合出现了多少次,这是最简洁的方式,如果你的原始数据是每一条记录就是一个观测(比如有20行数据,每一行记录一个学生用的是哪种方法、是否通过),那你就不需要WEIGHT语句了,直接proc freq; tables method*result / fisher; run;即可。
  4. 结果解释要结合实际情况:P值小于0.05只意味着“有关联”,但这种关联强度有多大、有没有实际意义,还需要你结合具体业务背景来判断,不能光看P值下结论。

好了,关于SAS里Fisher精确测试的基本用法和关键点,咱们就聊这么多,总结一下就是:小样本2x2表救星,PROC FREQ后面加fisher选项,结果主要看双尾P值,希望这个简单的聊天能帮你弄明白这个工具该怎么用!

树叶云带你简单聊聊SAS里那个Fisher精确测试到底咋用,步骤和注意点都在这儿