2016-07-28 2 views
1

Я хотел бы выполнить точный биномиальный тест, с binom R пакетом (binom.test), до 4-х различных успешных результатов с 4-мя различными значениями вероятности.Несколько биномиальных тестов в одном коде

Я могу сделать это сингулярно, но я хотел бы знать, могу ли я написать код для вычисления только одной командой (например, lapply, for loop).

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.95 и alternative = "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) 
     } 

, но не работает.

+2

'Vectorize (binom.test) (х, п, р) [ 3,] ' – rawr

ответ

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) 
+0

отлично, спасибо! –

1

Если вы заинтересованы только в результате р-значения, вот что вы можете сделать:

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 
+0

хорошо! Благодаря! полезный вариант. –

Смежные вопросы