You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

手动计算与SAS University Edition执行Chi-Sq检验的结果差异问询

为啥你手动算的卡方和SAS结果不一样?

嘿,我猜你大概率是踩了「检验方法选错」的坑!先看你的数据结构:每一行都是一对研究对象和对照的结局,属于典型的配对二分类资料——这类数据里,研究组和对照组的个体是配对关联的,不是完全独立的样本,根本不能直接用普通的Pearson卡方检验。

如果手动计算时,你是按配对四格表(把「研究Alive-对照Alive、研究Alive-对照Dead」这类配对组合的频数统计出来)算的McNemar配对卡方,但SAS里你用了普通的卡方命令(比如proc freq; tables study_mortality*control_mortality / chisq;),那结果肯定差很多:SAS的普通卡方会把所有行当成独立个体,完全忽略配对关系,而你手动算的是针对配对数据的专属检验。

怎么解决?用McNemar配对卡方检验就行

在SAS里处理这种配对数据,有两种简单的方式:

方式1:先整理配对频数再检验

先把原始数据转成配对四格表的频数格式,再跑检验:

/* 先统计配对组合的频数 */
proc freq data=your_raw_data;
    tables study_mortality*control_mortality / out=pair_freqs;
run;

/* 用频数表跑McNemar检验 */
proc freq data=pair_freqs;
    tables study_mortality*control_mortality / chisq exact;
    weight count;
run;

这里的chisq选项会自动识别2x2配对表,输出McNemar检验的结果,和你手动计算的应该完全一致。

方式2:直接用原始数据,一步到位

更省事的是直接用原始数据,加agree选项,SAS会自动做配对相关的检验:

proc freq data=your_raw_data;
    tables study_mortality*control_mortality / agree;
run;

这个命令不仅会输出McNemar检验的结果(就是你手动算的那个值),还会给你Kappa一致性系数,刚好适配配对设计的分析需求。

用你的样本数据验证一下

拿你给的4行数据来说,整理成配对四格表是:

对照Alive对照Dead
研究Alive20
研究Dead11

手动算McNemar卡方的话,公式是(b - c)²/(b + c),这里b=0,c=1,结果是1,自由度1,p值0.3173。用上面的SAS代码跑出来的结果绝对和这个一致,而如果用普通Pearson卡方,SAS会算出0.2667的卡方值,p=0.6055——这就是你之前看到差异的根源。


内容的提问来源于stack exchange,提问作者Kul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:58:22