【发布时间】:2019-01-01 09:44:24
【问题描述】:
我需要将二项式检验从 R 复制到 SAS,但我得到了不同的结果(或者我可能误解了 SAS 结果)。
为了简单地解释我的问题,我将使用来自这个维基百科的数据example,因为它提供了最终的解决方案;
假设您要计算在 235 个 6 面的公平骰子样本中获得 51 个或更多 6 的概率,因此每次试验中掷出 6 的真实概率为 1/6。 最终的解应该是0.02654。
在 R 中,代码如下:
binom.test(51,235,(1/6),alternative = "greater")
得到的结果是:
精确二项式检验
数据:51 和 235 成功次数 = 51,试验次数 = 235,
p 值 = 0.02654
备择假设:成功的真实概率大于 0.1666667
95% 置信区间:
0.1735253 1.0000000
样本估计:成功的概率
0.2170213
在 SAS 中,等效项应为:
DATA DICEROLL;
ROLL=51;
FREQQ=235;
PROB=1/6;
RUN;
data _null_;
set diceroll;
call symput("probability",prob);
run;
PROC FREQ DATA=DiceRoll ;
TABLES FREQQ / BINOMIAL (P=&probability.) ALPHA=0.05;
EXACT BINOMIAL ;
WEIGHT ROLL ;
RUN;
但是THIS是我得到的结果(其中没有p值=0.02654)
我尝试了几种方法来协调我的结果(尝试了 R 中的所有三种替代方法,尝试在 sas 中反转 ROLL 和 FREQQ,因为我不确定)但我仍然没有找到解决方案。 binom.test 和 proc freq + BINOMIAL 是否至少执行相同的测试? 我是否误解了 SAS 输出?
提前感谢您的宝贵帮助!
=============================== 更新================ =============
我尝试了 reeza 和 BEMR 提出的两种方法,我觉得我已经接近解决方案了! @BEMR: 正如我在评论中所写和解释的那样,如果我的变量是二分的,我应该如何调整 %r(1,6) ?您的代码适用于 6 面骰子的示例,但在我的实际情况下,我的成功变量假定值介于 0 和 1 之间,所以我不确定我必须做什么(如果我没有在开始)
@REEZA:您的解决方案似乎有效,但我不得不删除 /2;我猜您的第一个解决方案将 p 值计算为双面测试而不是单面测试。 无论如何,结果都很好,但是当成功数为 0 或接近 0 (1,2,3) 时,SAS 和 R 之间存在巨大差异。您知道任何解决方法吗?或者更好的是,假设测试在这两种情况下都不可靠是否安全? 以下图片是我用reeza方法的结果,谢谢大家的宝贵合作!
【问题讨论】:
-
看起来它认为您观察到了 100%,而不是 21.7% - 您如何指定成功次数?
-
真的需要 SAS 中的 14 行来复制 R 中单行的功能吗?无论如何,
n = 235是一个相当大的样本量。您可以进行快速正态近似并独立验证 R 结果是否有意义,但任何表明 p 值 -
不,它没有。在 R 中,您进行了理论计算,而在 SAS 中,您进行了模拟类型计算。而是在数据步骤中酌情使用 PPROB 或 QPROB 来获取概率。
-
抱歉,您想要 CDF 或 PDF,但我的大脑现在有点炸了。我会发布我认为接近的内容,但您应该验证它。
标签: r sas binomial-theorem