C’est la dernière ligne droite, certains auraient-il "oublié" de "faire" de la simulation avec leurs élèves ? Voici, à partir d’un travail en classe, comment constituer des échantillons de comparaison avec le travail des élèves.
Elle consiste à « jouer » à Pile ou Face et à relever les longueurs des répétitions.
Pour que les élèves se construisent une idée du hasard, on leur fait d’abord faire cette expérience dans leur tête, puis réellement (ça fait un peu de désordre... mais il est constructif), puis au moyen d’une table de chiffres générée aléatoirement (R) puis avec la calculatrice (bien faire mettre les machines en mode FIX sinon il y aura un défaut de zéros).
Mais au bout du compte, il faut relever les moyennes dans un tableur et si possible comparer avec des séries obtenues de façon rigoureuse (on réalise à ce moment ce que l’on subodorait : la rigueur d’exécution, malgré moultes précautions, n’est pas le fort de tous les élèves. ;-)
# Simulation 50 fois Pile/Face et nombre moyen de répétitions de P ou F
# constitution de l'échantillon
> x<-sample(c(0,1),50,T)
# ELO : encodage des longueurs d'occurences (Run Length Encoding)
> y<-rle(x)$lengths
# préparation d'une matrice
> d<-c(1:(2*max(y)))
> dim(d)<-c(2,max(y))
# inscription des occurrences dans la matrice
> for(i in 1:max(y)) {d[2,i]<-length(subset(y,y==i));d[1,i]<-i}
# somme des occurrences
> sum(d[row(d)==2])
[1] 18
# nombre moyen de répétitions
> 50/sum(d[row(d)==2])
[1] 2.777778
> x
[1] 1 0 1 0 0 1 1 1 1 1 1 0 0 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 0 0 1 1 0 0 0 1 1 0
[45] 0 0 0 0 1 0
> y
[1] 1 1 1 2 6 2 2 4 3 4 8 2 2 3 2 5 1 1
> d
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 2 3 4 5 6 7 8
[2,] 5 6 2 2 1 1 0 1
> pfrep<-function(taille){x<-sample(c(0,1),taille,T)
+ y<-rle(x)$lengths
+ d<-c(1:(2*max(y)))
+ dim(d)<-c(2,max(y))
+ for(i in 1:max(y)) {d[2,i]<-length(subset(y,y==i));d[1,i]<-i}
+ repmoy<-taille/sum(d[row(d)==2])
+ return(repmoy)
+ }
> pfrep(50)
[1] 2.5
> pfrep(50)
[1] 1.785714
# initialisation de la liste
> sec<-c();nbel<-29
> for(i in 1:nbel){xx<-round(pfrep(50),2);sec<-c(sec,xx);sec}
> sec
[1] 2.17 2.08 2.08 1.72 2.78 2.38 1.85 1.67 1.79 1.92 1.67 2.38 2.17 1.52 1.79 1.52 2.00
[18] 2.17 1.61 1.79 2.00 1.85 1.85 2.50 1.72 2.17 1.92 1.92 1.67
> max(sec)-min(sec)
[1] 1.26
# on remet ça ?
> sec<-c()
> for(i in 1:nbel){xx<-round(pfrep(200),2);sec<-c(sec,xx);sec}
> sec
[1] 1.89 1.90 2.06 2.08 1.89 2.17 1.96 1.90 1.96 2.06 1.69 1.89 2.13 1.83 2.15 1.96 1.92
[18] 1.87 1.79 1.96 2.00 2.11 1.92 1.89 1.92 1.90 1.87 2.17 2.17
> max(sec)-min(sec)
[1] 0.48
# on recommence avec des séries de tailles croissantes
> sec1<-c()
> sec1<-for(i in 1:nbel){xx<-round(pfrep(50),2);sec1<-c(sec1,xx);sec1}
> sec2<-c()
> sec2<-for(i in 1:nbel){xx<-round(pfrep(200),2);sec2<-c(sec2,xx);sec2}
> sec3<-c()
> sec3<-for(i in 1:nbel){xx<-round(pfrep(10000),2);sec3<-c(sec3,xx);sec3}
> sec1
[1] 1.72 2.08 1.85 2.27 1.79 1.72 1.79 1.72 1.67 2.63 1.92 2.38 1.85 1.72 1.79 2.50 2.00
[18] 2.94 1.92 1.79 2.08 1.67 2.50 1.92 1.85 2.38 1.72 2.00 2.00
> sec2
[1] 2.02 1.85 2.06 1.77 2.17 1.89 2.04 1.98 2.17 1.92 1.92 1.94 2.08 1.69 2.22 1.79 2.11
[18] 2.38 2.04 1.80 1.94 1.87 1.96 1.80 1.87 2.04 2.08 1.87 2.06
> sec3
[1] 2.04 2.00 2.02 2.01 1.98 2.03 2.00 2.01 2.01 2.00 2.01 2.01 1.98 2.03 2.00 1.99 2.01
[18] 1.97 2.05 1.99 1.98 2.01 2.04 2.01 1.99 1.98 1.98 2.00 1.99
# pourquoi pas créer un tableau ?
> tableau<-data.frame(sec1,sec2,sec3);colnames(tableau)<-c("50","200","10000")
> tableau
50 200 10000
1 1.72 2.02 2.04
2 2.08 1.85 2.00
3 1.85 2.06 2.02
4 2.27 1.77 2.01
5 1.79 2.17 1.98
6 1.72 1.89 2.03
7 1.79 2.04 2.00
8 1.72 1.98 2.01
9 1.67 2.17 2.01
10 2.63 1.92 2.00
11 1.92 1.92 2.01
12 2.38 1.94 2.01
13 1.85 2.08 1.98
14 1.72 1.69 2.03
15 1.79 2.22 2.00
16 2.50 1.79 1.99
17 2.00 2.11 2.01
18 2.94 2.38 1.97
19 1.92 2.04 2.05
20 1.79 1.80 1.99
21 2.08 1.94 1.98
22 1.67 1.87 2.01
23 2.50 1.96 2.04
24 1.92 1.80 2.01
25 1.85 1.87 1.99
26 2.38 2.04 1.98
27 1.72 2.08 1.98
28 2.00 1.87 2.00
29 2.00 2.06 1.99
# et tant que faire, l'exporter vers openoffice (ou un autre tableur)
> write.table(tableau,"tableau.csv",sep=";",dec=",")
la fonction à enregistrer
function(taille){x<-sample(c(0,1),taille,T)
y<-rle(x)$lengths
d<-c(1:(2*max(y)))
dim(d)<-c(2,max(y))
for(i in 1:max(y)) {d[2,i]<-length(subset(y,y==i));d[1,i]<-i}
repmoy<-taille/sum(d[row(d)==2])
return(repmoy)
}
le mot du collègue : je suis pas doué et les techniques que je propose sont certainement améliorables.... partageons nos efforts :o)
2004-2024 © Mathazay - Tous droits réservés
Ce site est géré sous SPIP 3.0.17 [21515] et utilise le squelette EVA-Web 4.2
Dernière mise à jour : lundi 7 septembre 2015