Juste avant 1850, Adolphe Quételet publiait Sur l’appréciation des documents statistiques, et en particulier sur l’application des moyennes, et introdusait alors le concept d’homme moyen (l’ouvrage est cité dans La théorie des moyennes et son emploi dans les sciences d’observation, de Joseph Lottin, paru en 1909 – je n’ai pas trouvé en ligne cet ouvrage de Quételet). Ce concept sera détaillé encore davantage dans Anthropométrie, ou mesure des différentes facultés de l’homme, concept qui sera abondament illustré
Mais si la moyenne est un concept fondamental en statistique, il convient de garder en mémoire que la moyenne n’existe peut être pas, au sein de la population. C’est ce que rappelle la fameuse ‘blague’ “un mec qui à la tête dans le four et les pieds dans le frigo, en moyenne, il est bien“. La moyenne peut être quelquechose d’extraordinaire (au sens premier du terme).
Prenons un exemple tout simple. Pendant les vacances, alors que je demandais à ma fille de tracer un triangle sur une feuille, elle passait son temps à tracer des triangles isocèles. Coïncidence ? En fait, quand on tente de tracer des triangles, au hasard, sur une feuille, le triangle ‘moyen’ est un triangle… équilatéral. Bon, au lieu de demander à ma fille, je vais tracer moi même des triangles au hasard (sur une feuille carré, mais les résultats restent valides avec une feuille A4)
> plot(0:1,0:1,col="white",xlab="",ylab="")
> for(i in 1:500) polygon(x=runif(3),y=runif(3),border=rgb(0,0,1,.3))
Certes, c’est le bazar… Mais si je calcule la moyenne de mes longeurs, j’obtiens
> longueurs=function(s){
+ set.seed(s)
+ b=data.frame(x=runif(3),y=runif(3))
+ c(sqrt( (b$x[1]-b$x[2])^2+(b$y[1]-b$y[2])^2 ),
+ sqrt( (b$x[1]-b$x[3])^2+(b$y[1]-b$y[3])^2 ),
+ sqrt( (b$x[3]-b$x[2])^2+(b$y[3]-b$y[2])^2 ))
+ }
>
> D=Vectorize(longueurs)(1:1000)
> apply(D,1,mean)
[1] 0.5297939 0.5111448 0.5216632
des longueurs presques égales. On peut d’ailleurs faire le test. En comparant les longueurs deux à deux pour commencer,
> t.test(D[1,],D[2,])
Welch Two Sample t-test
data: D[1, ] and D[2, ]
t = 1.6747, df = 1997.3, p-value = 0.09415
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-0.003190067 0.040488354
sample estimates:
mean of x mean of y
0.5297939 0.5111448
> t.test(D[1,],D[3,])
Welch Two Sample t-test
data: D[1, ] and D[3, ]
t = 0.74013, df = 1997.9, p-value = 0.4593
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-0.01341346 0.02967492
sample estimates:
mean of x mean of y
0.5297939 0.5216632
> t.test(D[2,],D[3,])
Welch Two Sample t-test
data: D[2, ] and D[3, ]
t = -0.94842, df = 1996.5, p-value = 0.343
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-0.03226843 0.01123160
sample estimates:
mean of x mean of y
0.5111448 0.5216632
Mais on peut aussi faire un test multiple pour s’en convaincre
> base=data.frame(L=as.vector(D),G=1:3)
> l<-aov(L~G,data=base)
> summary(l)
Df Sum Sq Mean Sq F value Pr(>F)
G 1 0.03 0.03305 0.539 0.463
Residuals 2998 183.80 0.06131
Effectivement, en moyenne, les longueurs des trois côtés sont égales, et donc le triangle ‘moyen’ est équilatéral ! On peut de la même manière regarder les angles, au lien de regarder les longueurs,
> angles=function(s){
+ set.seed(s)
+ b=data.frame(x=runif(3),y=runif(3))
+ a=c(
+ ( (b$x[1]-b$x[2])*(b$x[1]-b$x[3])+(b$y[1]-b$y[2])*(b$y[1]-b$y[3]) )/
+ (sqrt((b$x[1]-b$x[2])^2+(b$y[1]-b$y[2])^2)*
+ sqrt((b$x[1]-b$x[3])^2+(b$y[1]-b$y[3])^2)),
+ ( (b$x[2]-b$x[1])*(b$x[2]-b$x[3])+(b$y[2]-b$y[1])*(b$y[2]-b$y[3]) )/
+ (sqrt((b$x[2]-b$x[1])^2+(b$y[2]-b$y[1])^2)*
+ sqrt((b$x[2]-b$x[3])^2+(b$y[2]-b$y[3])^2)),
+ ( (b$x[3]-b$x[1])*(b$x[3]-b$x[2])+(b$y[3]-b$y[1])*(b$y[3]-b$y[2]) )/
+ (sqrt((b$x[3]-b$x[1])^2+(b$y[3]-b$y[1])^2)*
+ sqrt((b$x[3]-b$x[2])^2+(b$y[3]-b$y[2])^2)))
+ acos(a)/pi*180
+ }
> D=Vectorize(angles)(1:1000)
> apply(D,1,mean)
[1] 59.86143 57.91517 62.22340
Autrement dit, là encore, la moyenne des angles est de 60°, autrement dit, le triangle ‘moyen’ est un triangle équilatéral !
Pourtant, force est de constater qu’on tombe très rarement sur un triangle qui semble équilatéral ! Si on dit qu’on est presque équilatéral si les angles sont proches de 60° (disons que l’écart maximal entre le plus petit et le plus grand angle n’excède pas 10°), notons qu’on est équilatéral dans à peine plus de 1% des cas…
> D=Vectorize(angles)(1:1000)
> d=apply(D,2,function(x) max(x)-min(x))
> mean(d<10)
[1] 0.013
Sur les 1000 triangles simulés, on en trouve seulement 13,
> plot(0:1,0:1,col="white",xlab="",ylab="")
> for(i in idx){
+ set.seed(i)
+ b=data.frame(x=runif(3),y=runif(3))
+ polygon(b,border=rgb(0,0,1,.3))
+ }
Mais bien entendu, ce n’est pas vraiment ce que dit Quetelet… c’est un peu comme si on prenait les mesures des doigts, au hasard, et qu’on disait, qu’en moyenne, les doigts sont de même longeur ! Si on ordonne la taille des côtés, du plus petit au plus grand, on note que les longeurs sont vraiment différentes
> longueurs=function(s){
+ set.seed(s)
+ b=data.frame(x=runif(3),y=runif(3))
+ sort(c(sqrt( (b$x[1]-b$x[2])^2+(b$y[1]-b$y[2])^2 ),
+ sqrt( (b$x[1]-b$x[3])^2+(b$y[1]-b$y[3])^2 ),
+ sqrt( (b$x[3]-b$x[2])^2+(b$y[3]-b$y[2])^2 )))
+ }
> D=Vectorize(longueurs)(1:1000)
> apply(D,1,mean)
[1] 0.3078308 0.5543356 0.7004355
Ce serait donc les longueurs du triangle ‘moyen’ ? Pourquoi pas, mais quand on regarde de plus près, sur nos 1000 triangles simulés, seulement 2 ont des longueurs ‘proches’ de ces dernières
> d=apply(D,2,function(x) (abs(x[1]-.3)<.035)&(abs(x[2]-.55)<.035)&(abs(x[3]-.7)<.035))
> mean(d)
[1] 0.002
ce sont les deux triangles ci-dessous,
> idx=which(d)
> plot(0:1,0:1,col="white",xlab="",ylab="")
> for(i in idx){
+ set.seed(i)
+ b=data.frame(x=runif(3),y=runif(3))
+ polygon(b,border=rgb(0,0,1),lwd=2)}
Cela dit, les angles sont peut être plus intéressants, car il y a davantage de triangles avec 3 angles donnés (on peut corriger de l’effet d’échelle)
> angles=function(s){
+ set.seed(s)
+ b=data.frame(x=runif(3),y=runif(3))
+ a=c(
+ ( (b$x[1]-b$x[2])*(b$x[1]-b$x[3])+(b$y[1]-b$y[2])*(b$y[1]-b$y[3]) )/
+ (sqrt((b$x[1]-b$x[2])^2+(b$y[1]-b$y[2])^2)*
+ sqrt((b$x[1]-b$x[3])^2+(b$y[1]-b$y[3])^2)),
+ ( (b$x[2]-b$x[1])*(b$x[2]-b$x[3])+(b$y[2]-b$y[1])*(b$y[2]-b$y[3]) )/
+ (sqrt((b$x[2]-b$x[1])^2+(b$y[2]-b$y[1])^2)*
+ sqrt((b$x[2]-b$x[3])^2+(b$y[2]-b$y[3])^2)),
+ ( (b$x[3]-b$x[1])*(b$x[3]-b$x[2])+(b$y[3]-b$y[1])*(b$y[3]-b$y[2]) )/
+ (sqrt((b$x[3]-b$x[1])^2+(b$y[3]-b$y[1])^2)*
+ sqrt((b$x[3]-b$x[2])^2+(b$y[3]-b$y[2])^2)))
+ sort(acos(a)/pi*180)
+ }
> D=Vectorize(angles)(1:1000)
> apply(D,1,mean)
[1] 22.27273 41.91004 115.81723
Là encore, si on cherche les triangles qui ont des angles ‘proches’ de ces derniers, ils sont rares (seulement 5)
> d=apply(D,2,function(x) (abs(x[1]-22)<3)&(abs(x[2]-42)<3)&(abs(x[3]-116)<3))
> mean(d)
[1] 0.005
> idx=which(d)
> plot(0:1,0:1,col="white",xlab="",ylab="")
> for(i in idx){
+ set.seed(i)
+ b=data.frame(x=runif(3),y=runif(3))
+ polygon(b,border=rgb(0,0,1),lwd=2)}
Quelle que soit la méthode retetnue, on notera qu’il est assez extraordinaire de tomber sur un triangle ‘moyen’. Et je suppose que si c’est le cas pour de simples triangles, ça doit être un résultat relativement général, qui doit se vérifier sur des dizaines d’exemples, y compris en sciences humaines… non ?
OpenEdition suggests that you cite this post as follows:
Arthur Charpentier (November 2, 2016). Être – en même temps – moyen et extraordinaire. Freakonometrics. Retrieved December 3, 2024 from https://doi.org/10.58079/ov5a
Il y a un choix qui est fait aussi au moment de générer les triangles. Ici, si je comprends bien, on choisi au hasard trois points, mais on aurait aussi bien pu choisir au hasard trois longueurs, ou deux longueurs et un angle… et on aurait obtenu des résultats différents. C’est ce qu’on appelle le paradoxe de Bertrand https://fr.m.wikipedia.org/wiki/Paradoxe_de_Bertrand
(On l’illustre parfois avec des cubes : si une usine fabrique des cubes entre 0 et 1 mètre de côte, quelle est la longueur moyenne des côtes ? Tout dépend si la répartition est uniforme pour les longueurs, les surfaces ou les volumes des cubes)
avec une extension un peu vicieuse, on a aussi le cas de la distribution uniforme sur la sphère… si on tire les angles uniformément, on n’obtient pas une distribution uniforme sur la sphère… étrangement, c’est compliqué de tirer des points uniformément sur une sphère (j’avais du faire un ou deux billets sur le sujet).
Ca me donne envie de tenter en rajoutant une contrainte, par exemple sur l’aire, ou le périmètre… juste pour voir ce que ça donnerait…. mais je ne sais pas trop comment tirer au hasard des triangles d’aire 1/2 par exemple, ou de périmètre 1… je vais creuser, tiens…
J’imagine qu’il faut fixer suffisamment de paramètres pour pouvoir construire le triangle, par exemple fixer la base et faire varier la hauteur et autre chose…