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

R加权交叉表P值与SAS结果差异及单双侧检验疑问

加权交叉表卡方检验:SAS与R结果差异解析

我最近在做加权交叉表卡方检验时,发现SAS和R的结果差异非常显著,特意来请教原因。先把两边的代码和结果贴出来:

SAS代码与输出结果

data SummerSchool; 
    input Gender $ Internship $ Enrollment $ Count @@; 
    datalines;
boys yes yes 35 boys yes no 29 boys no yes 14 boys no no 27 
girls yes yes 32 girls yes no 10 girls no yes 53 girls no no 23 
; 
proc freq data=SummerSchool order=data; 
    tables Internship*Enrollment / chisq; 
    weight Count; 
run;

SAS输出的卡方检验P值范围在 0.3651-0.4425 之间。

R代码与输出结果

我先整理了数据,之后分别用weights包和survey包执行检验:

# 数据预处理
tt$nnn = as.numeric(tt$count) 
attach(tt) 

# 查看整理后的数据集
tt
#   sex internship enrollment count nnn
# 1 boys        yes        yes    35  35
# 2 boys         no        yes    14  14
# 3 girls        yes        yes    32  32
# 4 girls         no        yes    53  53
# 5 boys        yes         no    29  29
# 6 boys         no         no    27  27
# 7 girls        yes         no    10  10
# 8 girls         no         no    23  23

# 生成加权后的交叉汇总表
library(plyr) 
count(tt, c('internship','enrollment'), wt_var='nnn')
#   internship enrollment freq
# 1         no         no   50
# 2         no        yes   67
# 3        yes         no   39
# 4        yes        yes   67

# 使用weights包执行加权卡方检验
library(weights) 
wtd.chi.sq(internship, enrollment, weight=nnn)
#      Chisq        df    p.value 
# 0.0293791 1.0000000 0.8639066 

# 使用survey包执行加权卡方检验
library(survey) 
tt.d = svydesign(ids = ~1, data = tt, weights = tt$nnn) 
svychisq(~internship + enrollment, tt.d)
# Pearson's X^2: Rao & Scott adjustment
# data: svychisq(~internship + enrollment, tt.d)
# F = 0.023599, ndf = 1, ddf = 7, p-value = 0.8822

R输出的两个P值分别为 0.8639 和 0.8822,和SAS的结果差异明显。

我现在的疑问是:**是不是SAS输出的是单侧P值,而R输出的是双侧P值导致了这种差异?**如果确实是这个原因,那在这个暑期学校实习与报名情况的分析场景下,单侧检验和双侧检验各自的优劣是什么?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:52:14