Le test binomial permet de voir si un effectif correspond à la théorie ou non. On le réalise avec la fonction binom.test()
binom.test(x=,n=,p=,alternative='l')
x : nombre de valeurs observées
n : taille de l'échantillon
p : valeur théorique
alternative : hypothèse nulle appliqué, permet de voir si une proportion diffère de la théorie (t), si elle est plus grande (g) ou plus petite (l).
Normalement, nous avons 50% de filles dans la population. Est-ce que cet échantillon correspond ?
binom.test(22,30, p=0.5)
Résultat : p-value = 0.01612, la proportion de filles de correspond pas à la répartition normale de la population de 50% de filles
En réalité, nous sommes dans une formation de biologie qui présente en moyenne 2/3 de filles pour 1/3 de garçons. Vérifions si l'échantillon coïncide :
binom.test(22,30, p=2/3)
Résultat : p-value = 0.5622, l'échantillon correspond.
Par défaut ici, la p-value est de 0,5622, mais on raisonne dans les 2 directions : exclure les proportions trop basses ou trop hautes.
Si en revanche, on cherchait à démontrer que notre taux d'erreur est acceptable : on chercherait juste à montrer qu'il n'est pas trop haut avec l'alternative g comme greater :
Mon groupe de 25 a vu 15 étudiants se tromper alors qu'un taux normal est de 30% : voyons si c'est trop.
binom.test(15, 25, p=0.3, alternative="g")
La p-value n'est plus la même que par défaut puisque les 5% d'erreur tolérée ne sont plus réparties que sur le haut (seuil bleu) au lieu d'être sur les 2 extrémités de la distribution (seuils verts).
plot(0:25,dbinom(0:25,size=25,prob=0.3),type="h",col="red",lwd=2,xlab="nombre d'erreur",ylab="proba")
abline(v=qbinom(c(0.95),size=25,prob=0.3),col="blue") # "g"
abline(v=qbinom(c(0.025,0.975),size=25,prob=0.3),col="green") # "t" 2 côtés (test de base)
Les hypothèses alternatives : g (greater), t (deux côtés) et l (lower).
Quelques fonctions sont très utiles pour voir et comprendre les résultats que l'on peut s'attendre à voir dans différents scénarios discrets.
Prenons un exemple bien utile : je fais une étude sur X variables (disons 20) que je cherche à corréler à un Y. Je compte ainsi retenir toutes les variables significativement corrélées avec un seul de p-value de 0,05... Oui, mais certaines variables seront faussement identifiée comme corrélées à causes du hasard !!! (erreur du type 1) : je peux donc prédire à combien de variables faussement corrélées je peux m'attendre ! Allons-y :
dbinom() donne la densité, pbinom() donne la fonction de distribution, qbinom() donne la fonction quantile et rbinom() génère des écarts aléatoires.
plot(0:8,dbinom(0:8,size=20,prob=0.05),type="h",col="red",lwd=2,
xlab="Nombre de variables faussement corrélées (erreur de type 1)",ylab="Probabilités")
On voit sur ce graphique qu'avec une p-value à 0,05, si on fait des analyses de corrélations entre Y et 20 variables différentes, on risque fortement d'avoir de fausses corrélations !!! Entre 1 et 3 variables... Peu de chance en revanche d'avoir 8 faux positifs.
qbinom(0.95,size=20,prob=0.05) # Renvoie la valeur 3
La fonction qbinom renvoie ici le quartile 95% (on aurait pu aussi demander un vecteur) : ainsi, si on applique une confiance à 95%, on voit qu'il sera probable avec 20 variables d'en avoir 3 erreurs de type 1.
SI je change le seuil de ma p-value à 0,01 : ce sera mieux, 1 seule erreur de type 1.
qbinom(0.95,size=20,prob=0.01) # Renvoie la valeur 3
Je souhaite ne pas avoir d'erreur de type 1, je me fixe ainsi pour objectif d'avoir dans 95% des cas 0 erreur, je tâtonne avec la fonction pbinom :
# La valeur 0 représente : 35% des cas avec p-value = 0.05, trop d'erreur !
dbinom(0,size=20,prob=0.05)
# La valeur 0 représente : 81% des cas avec p-value = 0.01, trop d'erreur !
dbinom(0,size=20,prob=0.01)
# La valeur 0 représente : 98% des cas avec p-value = 0.001, c'est mieux ! Risque d'avoir des erreurs de type 1 dans 2% des cas.
dbinom(0,size=20,prob=0.001)
La fonction pbinom() marcherait aussi : elle donne des probabilités cumulées. Forcément dbinom(0...) aura donc le même retour que pbinom(0...).
Sans surprise, le tâtonnement va nous renvoyer vers une p-value de 0.0025 ici pour éviter les erreurs de type 1 dans 95% des cas.
==> Ce sera la même valeur qui sera renvoyée par la correction de Sidak !
p.value = 1 - 0.95^(1/20)