[PROC FREQ] Monte Carlo 模拟

本文链接: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输出结果:

posted @ 2021-08-24 21:28  Snoopy1866  阅读(906)  评论(0编辑  收藏  举报