本文链接:https://www.cnblogs.com/snoopy1866/p/15182533.html
??\(2\times C\)表各水平率或构成比的比较,常用卡方检验,当样本量<40或存在理论频数>5的情况时,使用Fisher精确概率法计算P值。Fisher精确概率法基于超几何分布,通常需要计算各水平频数的阶乘,在小样本的情况下表现良好。但当样本量过大,而又存在某几个水平的频数<5时,使用Fisher精确概率法将消耗大量运算时间,此时可改用蒙特卡洛模拟估计精确概率。
??例如:6种药物对高血压的治疗效果差异比较,数据如下。
data analysis;
input drug $ effect $ weight @@;
cards;
A 有效 421 A 无效 125
B 有效 435 B 无效 137
C 有效 10 C 无效 2
D 有效 3 D 无效 0
E 有效 255 E 无效 68
F 有效 672 F 无效 236
;
run;
??使用常规卡方检验,SAS提示:25%的单元格的期望频数小于5,卡方可能不是有效的检验。这是由药物C水平的期望频数<5导致的结果。
proc freq data = analysis;
tables drug*effect /nopercent nocol chisq;
weight weight;
run;
??改用Fisher精确概率法,SAS提示 WARNING: Computing exact p-values for this problem may require much time and memory。这是因为样本量太大导致Fisher精确概率法难以实现。
proc freq data = analysis;
tables drug*effect /nopercent nocol;
weight weight;
exact fisher;
run;
??在 PROC FREQ过程的exact语句中,可以使用mc选项进行模拟计算精确P值,代码如下:
proc freq data = analysis;
tables drug*effect /nopercent nocol;
weight weight;
exact fisher /mc n = 50000 seed = 20210817;
run;
选项含义:
mc:要求通过Monte Carlo模拟计算fisher精确P值
n:Monte Carlo模拟的次数
seed:模拟的初始种子数
SAS输出结果: