Aujourd’hui un collègue avait l’air étonné d’apprendre que pour tester de façon fiable une corrélation, il fallait un échantillon d’au moins 150 participants. Cette affirmation provient d’un article de Schönbrodt & Perugini (2014)[^1] qui vont même jusqu’à proposer un échantillon de 250 participants pour estimer une corrélation qui soit stable.
Cela m’a donné envie de jouer un peu avec R pour voir comment les corrélations « dansent » autour de la vraie valeur en fonction de la taille de l’échantillon (de n=6 à n=500).
Dans une première tentative, j’ai essayé avec une « vraie » corrélation r=0, pour voir comment se comportaient les corrélations estimées en fonction de la taille de l’échantillon.
On peut constater que plus la taille de l’échantillon augmente, et plus on se rapproche de la « vraie » corrélation, et que effectivement, lorsque la taille de l’échantillon est faible (n < 100), les valeurs que prend R semblent partir dans tous les sens. On constate également que, malgré la faible taille de l’échantillon, la valeur de r dépasse rarement la valeur critique, caractérisée par les lignes en pointillés, qui nous amènerait à déclarer que la corrélation est significative. Je reviendrai sur ce point prochainement.
Dans cette première tentative, je n’ai simulé qu’un seul échantillon pour chaque taille comprise entre 6 et 500 observations. J’ai donc recommencé en simulant 1000 échantillons par valeur de n.
Le constat semble se généraliser, plus la taille de l’échantillon augmente, et plus on semble se rapprocher de la valeur réelle de la corrélation. Là encore, les tailles d’échantillons relativement faibles semblent renvoyer des corrélations très éloignée de la « vraie » corrélation. La recommandation de Schönbrodt & Perugini (2014) semble tout à fait raisonnable, puisqu’autour de 200-250 participants, les corrélations semblent se stabiliser.
Dans ce second graphique, on a l’impression que le nombre de faux positifs (les valeur de r supérieure à la valeur critique) est important. Pour y voir plus clair, j’ai demandé au logiciel de compter le nombre de fois où la valeur de r calculée dans l’échantillon dépassait la valeur critique, divisée par le nombre d’échantillons, en fonction de n. On espère que cette valeur ne dépasse pas le seuil alpha de .05.
On peut constater que cet indicateur gravite autour de .05, mais qu’il le dépasse parfois (tout ce qui se trouve au dessus de la ligne rouge). Cependant, autre fait intéressant, c’est qu’il ne semble pas y avoir de relation entre l’erreur de type I et la taille de l’échantillon. Ces erreurs semblent se distribuer de manière relativement homogène autour de ce seuil de .05n quelle que soit la taille de l’échantillon.
Pour ces deux premières tentatives, j’ai fixé la vraie corrélation à 0, pour voir ce qu’il se passe. J’ai également joué sur la valeur de la vraie corrélation pour voir ce qu’il se passe.
On peut constater que plus la valeur de la corrélation est élevée, et plus elle semble se stabiliser rapidement. Cependant, au jugé, elle semble rarement stable en dessous de 100 participants.
Pour information, la taille de l’échantillon nécessaire pour atteindre une puissance statistique de .80 est n=193 pour une corrélation r=.20, n=28 pour r = .50, et n=9 pour r = .80.
Voilà qui conclue mes errances pour ce soir. Je vous colle le code que j’ai utilisé ci-dessous, mais je vous préviens, il est probablement illisible. Un jour peut-être, je prendrais le temps de le commenter. N’hésitez pas à me laisser un commentaire si vous constatez une erreur dans le raisonnement ou dans le code, je débute dans les simulations, et je voulais juste partager avec vous mes errances statistiques.
Bonne continuation.
### Correlations
R <- .80 #Vraie corrélation
n_range <- 6:500 #Sample Size
sim <- 1000 #Nombre de simulations
###
r <- matrix(,length(n_range),sim)
for(i in 1:sim){
set.seed(NULL)
for(n in n_range) {
x <- rnorm(n)
y <- rnorm(n,R*x, sqrt(1-R^2))
r[n-5,i] <- cor(x,y)
}
}
d <- c(r)
sample_size <- n_range
d <- cbind(sample_size, d)
### Valeur critique de R
critical.r <- function( n, alpha = .05 ) {
df <- n - 2
critical.t <- qt( alpha/2, df, lower.tail = F )
critical.r <- sqrt( (critical.t^2) / ( (critical.t^2) + df ) )
return( critical.r )
}
crit <- critical.r(n_range)
dx <- cbind(n_range, crit, 0-crit)
### Graph
graphics.off()
plot(d[,1], d[,2], ylim=c(-1, 1), ylab = "r", xlab = "n", pch=18)
abline(h=0, col="blue")
abline(h=R, col="red")
text(x=400, y=R+.03, "Vraie corrélation", col="red", cex=.75)
lines(dx[,1], dx[,2], col="red", lty =2)
lines(dx[,1], dx[,3], col="red", lty =2)
[^1]: Schönbrodt, F. D., & Perugini, M. (2013). At what sample size do correlations stabilize? Journal of Research in Personality, 47(5), 609–612. doi:10.1016/j.jrp.2013.05.009