2

我想使用binomR 包(binom.test函数)对 4 个不同的成功次数和 4 个不同的概率值执行精确的二项式检验。

我可以单独完成,但我想知道我是否可以编写代码以仅在一个命令中进行计算(例如 lapply、for 循环)。

x <- c(68, 69, 70, 75)  #number of successes
p <- c(1/365, 2/365, 3/365, 4/365)  #probability of success
n <- 265 #number of trials

conf.level = 0.95alternative = "two.sided"因为结果可以是 1 或 0)。

有什么建议吗?


我试过了:

for (i in 1:4) {
     test[i] <- binom.test(x[i], n, p[i], alternative = "two.sided", conf.level = 0.95)
      }

但不起作用。

4

2 回答 2

1

如果您只对生成的 p 值感兴趣,您可以执行以下操作:

x <- c(68, 69, 70, 75)  #number of successes
p <- c(1/365, 2/365, 3/365, 4/365)  #probability of success
n <- 265 #number of trials
test <- numeric(4)

for (i in 1:4) {
  test[i] <- binom.test(x[i], n, p[i], alternative = "two.sided", conf.level = 0.95)$p.value
}

test
[1] 6.621447e-111  1.801758e-92  3.467288e-82  2.442975e-81
于 2016-07-28T10:34:32.967 回答
1

使用mapply

mapply(binom.test, x, p, n=n, alternative = "two.sided", conf.level = 0.95, SIMPLIFY = FALSE)

mapply 只是在其第一个参数中调用该函数,并使用其附加参数和附加命名参数中的所有值。(请参阅 mapply 函数的帮助)

如果您只想要结果的一个字段,您可以像这样调用 mapply:

mapply(function(x,p,n, ...){
         binom.test(x, n, p, ...)$p.value
       },
       x, p, n=n, alternative = "two.sided", conf.level = 0.95)
于 2016-07-28T11:01:00.490 回答