Tout d’abord, on initialise le DM en fixant une Seed

set.seed(21)

Approche expérimentale

Question 1

Pour générer ce livre, on crée un vecteur rempli de 0 et on met sa valeur à 1 quand on tire sa vignette, et on tire une vignette jusqu’à ce que le livre soit rempli avec M le nombre de vignette du livre à remplir

Nombre_vignette <- function(M){
  livre <- rep(0,M)
  T <- 0
  while(!setequal(livre,1)){
    Num_vign <- sample(1:M,1) #on tire aléaroirement un nombre entre 1 et 300
    livre[Num_vign]<-1
    T <- T +1
  }
  T
}

Nombre_vignette(300)
## [1] 1410

Question 2

Cette fonction donne le nombre moyen de vignette à acheter pour un livre de M vignette, l’experience étant répétée R fois

Nombre_vignette_repeat <- function(M,R){
  res <- c()
  for(i in 1:R){
    res[i] <- Nombre_vignette(M)
  }
  mean(res)
}

Nombre_vignette_repeat(300,200)
## [1] 1887.16

Pour la représentation graphique, on calcule le nombre moyen de vignette à acheter en fonction du nombre de vignette à obtenir dans le livre M avec n le nombre de points souhaités R le nombre de répétition (plus R grand, plus resultat précis)

Repr_graphique <- function(R,n){
  df <- data.frame()
  for (M in seq(10,200,round((200-10)/n))){
    Moy <- Nombre_vignette_repeat(M,R)
    df <- rbind(df,data.frame(M,Moy))
  }
  df
}


res <- Repr_graphique(100,20)
plot(res$M,res$Moy)
abline(lm(res$Moy ~ res$M), col = "red")

On obtient une droite, donc on peut supposer que la loi est linéaire.

Modélisation

Question 3:

C’est une suite de variables aléatoires, indépedantes, identiquement distribuées et de loi uniforme sur {1,..,M}

Question 4 :

On a déjà (i-1) vignettes et on pose \(Y_{i}\) le nombre de vignette à acheter pour en avoir une nouvelle.

-La probabilité d’obtenir une nouvelle vignette avec un livre vide est : \(P(Y_{1} = 1) = 1\).

-La probabilité d’en obtenir la même est de 1/M donc la probabilité d’en obtenir une nouvelle en un tirage est \(P(Y_{2}=1) = 1-\frac{1}{M} = \frac{M-1}{M}\)

-La probabilité d’obtenir une nouvelle vignette sachant qu’on en possède déjà i-1 en 1 tirage est \(P(Y_{i}=1) = \frac{M - (i-1)}{M}\).

-La probabilité de ne pas obtenir de nouvelle vignette en 1 tirage est de \(1-P(Y_{i}=1)\) Yi suit donc une loi géométique de paramètre \(P(Y_{i}=1)=\frac{M - (i-1)}{M}\).

-On renouvelle ce tirage de manière indépendante jusqu’au 1er succès

-La probabilité \(P(Y_{i}=k)\) correspond à la probabilité d’obtenir dans une succession de k épreuves de Bernoulli, k - 1 échecs suivis d’un succès. Les épreuves étant indépendantes, cette probabilité est donc de

\(P(Y_{i}=k)=(1-\frac{M - (i-1)}{M})^{k-1}*\frac{M - (i-1)}{M}\)

-On obtient directement l’espérence:

\(E(Y_{i} = 1) = \frac{1}{P(Y_{i} = 1)} = \frac{M}{M-(i-1)}\)

et la variance:

\(V(Y_{i})=\frac{1-P(Y_{i} = 1)}{P(Y_{i} = 1)^2} = \frac{i-1}{M} * \frac{M^2}{(M-(i-1))^2} = \frac{(i-1)*M}{(M-(i-1))^2}\)

or \(i-1 \le M\) donc \(V(Y_{i}) \le \frac{M^2}{(M-(i-1))^2}\)

On peut donc calculer E(T)

\(E(T)=E(\sum_{i=1}^{M} Y_i)\)

Par linéarité de l’Esperance,

\(E(T)=\sum_{i=1}^{M} E(Y_i)\)

\(\Longleftrightarrow E(T)=\sum_{i=1}^{M} \frac{M}{M-(i-1)}\)

\(\Longleftrightarrow E(T)=M*\sum_{i=1}^{M} \frac{1}{M-(i-1)}\) \(\underset{+\infty}{\sim} M*log(M+\gamma)\) (Série harmonique)

Et la variance V(T)

\(V(T) = V(\sum_{i=1}^{M} Y_i) = \sum_{i=1}^{M} V(Y_i) + 2 * \sum_{1\le i < j\le M} cov(Y_{i},Y_{j})\)

or si i != j, la covarience est nulle car les variables sont indépendantes. Donc

\(V(T) = \sum_{i=1}^{M} V(Y_i) \le \sum_{i=1}^{M} \frac{M^2}{(M-(i-1))^2} = M^2 * \sum_{i=1}^{M} \frac{1}{(M-(i-1))^2} \underset{+\infty}{\sim} M^2*\frac{\pi^2}{6}\)

car \(\sum_{i=1}^{+\infty} 1/i^2 = \frac{\pi^2}{6}\)

Synthèse

Question 5 :

On veut vérifier si l’espérance et la variance tendent bien vers ce que l’on a trouvé

Calcul de P(Yi = k)

Proba_Yi <- function(i,k,M){
  p <- (M-(i-1))/M
  Prob <- ((1-p)^(k-1))*p
  Prob
}

Calcul de E(Yi) et V(Yi) (il y a les 2 manières de les calculer pour verifier si nos calculs sont bons)

Esperance <- function(i,M){
  res <- 0
  for(k in 1:M){
    res <- res + k*Proba_Yi(i,k,M)
  }
  res 
}

Esperance2 <- function(i,M){
  res <- M/(M-(i-1))
  res
}


Esperance_carrée <- function(i,M){   #calcul intermédière pour la variance
  res <- 0
  for(k in 1:M){
    res <- res + (k^2)*Proba_Yi(i,k,M)
  }
  res
}

Variance <- function(i,M){
  Esperance_carrée(i,M)- Esperance(i,M)^2 
}

Variance2 <-function(i,M){
  (M*(i-1))/((M-i+1)^2)
}

Esperance(50,300)
## [1] 1.195219
Esperance2(50,300)
## [1] 1.195219
Variance(50,300)
## [1] 0.2333296
Variance2(50,300)
## [1] 0.2333296

On calcule maintenant l’espérance totale et on compare avec notre équivalent de la question 4

Esperance_Totale <- function(M){
  res <- 0
  Table <- c()
  x<-c()
  for (k in 1:M){
    res <- 0
    for(i in 1:k){
      res <- res + Esperance2(i,k)
    }
    Table[k]<-res
  }
  
  Table
}

E<-Esperance_Totale(300)
M<-c(1:300)
plot(E)

plot(M*log(M)+M*0.577)

On observe 2 courbes aux comportements identiques donc nos résultats sont cohérents. Par rapport à la question 2, on remarque que l’on obtient deux droites au même comportement.Ce n’est pas tout à fait une droite car elle est affectée d’un coefficient logarithmique. On n’etait donc pas loin du bon résultat avec notre première observation. Que se passe t’il lorsque l’on fait la différence entre les 2 courbes?

plot(M*log(M)+M*0.577-E)

On obtient une courbe dont les valeurs sont proches de 0. On remarque aussi que cette valeur ne tend pas vers 0. Cela est dû au fait que l’on fait une expérience, et plus le nombre de vignette est grande, plus l’erreur est grande. Nous n’avons pas encore vu d’outils pour mettre les marges d’erreurs sur les courbes. Nous ne pouvons donc pas aller plus loin dans l’analyse.

Vérifions maintenant pour la variance.

Variance_Totale <- function(M){
  res <- 0
  Table <- c()
  x<-c()
  for (k in 1:M){
    res <- 0
    for(i in 1:k){
      res <- res + Variance(i,k)
    }
    Table[k]<-res
  }
  
  Table
}


V<-Variance_Totale(300)
plot(V)

plot(M^2 * (3.14^2)/6)

Même remarque que pour l’esperance, les courbes corroborent nos calculs

Question 6 :

E[300]
## [1] 1884.799

En supposant qu’il n’y a aucun double par paquet, ce qui équivaut à les acheter 1 par 1, il lui faudra environ 1885 vignettes achetés soit 189 paquets soit 378 euros sans compter le prix du livre.

Extension au cas non uniforme (ou au marchand malhonnête)

Question 7-1 :

Nombre_vignette21 <- function(M){
  livre = rep(0,M)
  T <- 0
  x <- 0
  for(k in 1:M){
      x <- x + 1/k
    } 
  while(!setequal(livre,1)){
    Num_vign <- sample(1:M,1,prob=c(1/((1:M)*x))) #on tire aléaroirement un nombre entre 1 et 300
    livre[Num_vign]<-1
    T <- T +1
  }
  T
}

Nombre_vignette21(300)
## [1] 4987

On remarque que pour un essai, le nombre a significativement augmenté. Faisons maintenant la moyenne pour 10 essais

Nombre_vignette_repeat21 <- function(M,R){
  res <- c()
  for(i in 1:R){
    res[i] <- Nombre_vignette21(M)
  }
  mean(res)
}

Nombre_vignette_repeat21(300,50)
## [1] 8504.7

C’est beaucoup plus que lorsque les vignettes ont la même rareté

Question 7-2 :

Testons avec une autre probabilité

Nombre_vignette22 <- function(M){
  livre = rep(0,M)
  T <- 0
  x <- 0
  for(k in 1:M){
      x <- x + 1/(k^2)
    } 
  while(!setequal(livre,1)){
    Num_vign <- sample(1:M,1,prob=c(1/(((1:M)^2)*x))) #on tire aléaroirement un nombre entre 1 et 300
    livre[Num_vign]<-1
    T <- T +1
  }
  T
}

Nombre_vignette22(300)
## [1] 514051

C’est encore plus, la moyenne maintenant

Nombre_vignette_repeat22 <- function(M,R){
  res <- c()
  for(i in 1:R){
    res[i] <- Nombre_vignette22(M)
  }
  mean(res)
}

Nombre_vignette_repeat22(300,10)
## [1] 584524.8

Le nombre total augmente (pour n = 50 la compilation met 1 heure nous avons obtenu en moyenne 632707.7)

Quetion 8

La probabilité d’obtenir les dernières vignettes est encore plus faible donc le nombre de vignettes à acheter va encore augmenter!