2016-07-28 1 views
1

Je voudrais effectuer le test binomial exact, avec binom R package (binom.test fonction), à 4 nombre différents de réussites avec 4 valeurs de probabilité différentes.Plusieurs tests binomiaux dans un code

Je peux le faire singulièrement, mais j'aimerais savoir si je peux écrire un code pour faire le calcul en une seule commande (par exemple, lapply, pour 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 

Le conf.level = 0.95 et alternative = "two.sided" (comme le résultat peut être que 1 ou 0).

Une suggestion?


J'ai essayé:

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

mais ne fonctionne pas.

+2

'vectorisation (binom.test) (x, n, p) [ 3,] ' – rawr

Répondre

1

Utilisation mapply:

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

mapply appelle simplement la fonction dans son premier argument avec toutes les valeurs dans ses arguments supplémentaires et les paramètres nommés supplémentaires. (Voir l'aide de la fonction mapply)

Si vous voulez juste un champ du résultat, vous pouvez appeler mapply comme ceci:

mapply(function(x,p,n, ...){ 
     binom.test(x, n, p, ...)$p.value 
     }, 
     x, p, n=n, alternative = "two.sided", conf.level = 0.95) 
+0

super, merci !! –

1

Si vous êtes intéressé seulement dans les valeurs p résultant, voici ce que vous pouvez faire:

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

bien! Merci! option utile. –