Exercice 1

1.1)

Intuition: l’espérance de M sera proche de a mais n’atteindra jamais a car M vaut soit a soit moins que a, mais jamais plus que a à cause de l’intervalle spécifié. L’espérance de M sera donc forcément inférieure à a.

En R, on utilise le code suivant:

n=5
N=1000
k=10
tabesp=c()
for (a in 1:k){
  #On calcule la moyenne de M ≈ l'esperance de M pour ce a et n
  M=replicate(N,max(runif(n,min=0,max=a)))
  tabesp=c(tabesp,mean(M))
}
#plot(x = 1:k, y = tabesp, xlab="a", ylab="E[M]")

Pour des a de 1 à 10, on reproduit N fois l’expérience de tirage uniforme de n Xi, et on met le Xi maximum de chaque tirage dans M. On calcule ensuite la moyenne de M et on la met dans le vecteur tabesp qui contient les espérances de M pour les différents a. En traçant tabesp (avec n=2), on obtient le graphe suivant:

On a une droite passant par le point (0,0). On peut déduire une relation de proportionnalité avec a:
E[M]=a*Y
Fixons maintenant a à 1 et de faisons varier n afin de déterminer Y:

a=1
N=1000
k=10
tabesp=c()
for (n in 1:k){
  M=replicate(N,max(runif(n,min=0,max=a)))
  tabesp=c(tabesp,mean(M))
}
plot(x = 1:k, y = tabesp, xlab="n", ylab="E[M]")

On a une courbe semblable à l’inverse. On peut faire l’hypothèse que l’espérance est inversement proportionnelle à n. Pour trouver une expression pour Y, on essaye de deviner les coefficients.
Quand n=2, E[M]≈1/2; quand n=3, E[M]≈2/3; quand n=10, E[M]≈9/10. Il semblerait que Y=(n-1)/n.

On en déduit E[M]=a*(n-1)/n.

On peut corriger E[M] en lui ajoutant a/n:
E[M] + a/n = a(n-1)/n + a/n
= a
(n-1+1)/n
= a

Pour déterminer la variance, on adapte l’algorithme précédent:

n=2
N=1000
k=10
tabvar=c()
for (a in 1:k){
  M=replicate(N,max(runif(n,min=0,max=a)))
  tabvar=c(tabvar,mean(M^2)-mean(M)^2)
}
plot(x = 1:k, y = tabvar, xlab="a", ylab="Var[M]")

On a une parabole, on peut supposer que Var[M]=(a^2)*Y (ce qui n’est pas aberrant puisque la formule de la variance introduit des carrés). On fait maintenant varier n:

Au vu de la courbe, il semblerait que Y=1/n.
Cependant, Var[M]=(a^2)/n semble ne pas fonctionner. Maintenant que l’on sait que l’on peut mettre n à 1 sans danger (ce qui n’était pas si évident que ça étant donné que l’énoncé suggérait de prendre n>=2), on recalcule la partie correspondant à la parabole avec plus de précision en fixant n=1:

##  [1] 0.08358096 0.32339319 0.77341120 1.34177519 2.09260196 3.07270332
##  [7] 3.95676947 5.23347059 6.91675772 8.25418441

Quand a=2, Var[M] ≈ 1/3 = 4/12 = (2^2)/12
On testant avec d’autres valeurs, on se rend compte que (a^2)/12 fonctionne.

Finalement, on déduit que Var[M]=(a^2)/12n.

1.2)

On simule avec le code suivant:

n=2
N=1000
k=10
tabesp=c()
for (a in 1:k){
  Mpr=replicate(N,2*mean(runif(n,min=0,max=a)))
  tabesp=c(tabesp,mean(Mpr))
}
plot(x = 1:k, y = tabesp, xlab="a", ylab="E[Mpr]")

On a visiblement encore une relation de proportionnalité entre a et E[Mpr].
Comme on l’a fait à la question d’avant, faisons varier n en fixant a=1 (comme les valeurs au début sont très dispersées, on fait varier n jusqu’à 1000):

La courbe semble constante, ce qui signifierait que la valeur de n n’impacte pas l’espérance (même si elle est responsable de la dispersion des premières valeurs).
De plus, on remarque que cette valeur constante est en fait celle de a (on peut changer la valeur du a fixé pour s’en convaincre).

On a donc E[Mpr]=a, ce qui est satisfaisant dans la mesure où Mpr est un estimateur de a.

Estimons maintenant la variance:

n=2
N=1000
k=10
tabvar=c()
for (a in 1:k){
  Mpr=replicate(N,2*mean(runif(n,min=0,max=a)))
  tabvar=c(tabvar,mean(Mpr^2)-mean(Mpr)^2)
}
plot(x = 1:k, y = tabvar, xlab="a", ylab="Var[Mpr]")

Comme tout à l’heure, on observe une parabole donc il y a un a^2 mais sans connaissance du comportement de n, on ne peut pas encore déduire des coefficients. En variant n:

a=1
N=1000
k=10
tabvar=c()
for (n in 1:k){
  Mpr=replicate(N,2*mean(runif(n,min=0,max=a)))
  tabvar=c(tabvar,mean(Mpr^2)-mean(Mpr)^2)
}
plot(x = 1:k, y = tabvar, xlab="n", ylab="Var[Mpr]")

Comme précédemment, on a 1/n. On peut donc fixer n=1 sans risquer une division par 0 et nous tenter de déduire les coefficients:

n=1
N=1000
k=10
tabvar=c()
for (a in 1:k){
  Mpr=replicate(N,2*mean(runif(n,min=0,max=a)))
  tabvar=c(tabvar,mean(Mpr^2)-mean(Mpr)^2)
}
tabvar
##  [1]  0.351234  1.305646  2.935901  5.253207  8.687019 11.837115 16.174457
##  [8] 20.336231 27.602981 33.466680

Voici les valeurs de l’espérance pour n=1 et a allant de 1 à 10. On reconnaît ces valeurs: elles correspondent au valeurs pour des a pairs quand on calculait l’espérance à la question 1.1).

On en déduit que Var[Mpr] = (2a)^2/(12n) = 4*Var[M]

L’estimateur Mpr a une espérance qui vaut a alors que M a une erreur de a/n, mais la variance de Mpr est 4 fois plus grande que celle de M. Il est donc plus facile d’estimer a en choisissant Mpr mais si on s’en éloigne alors on s’en éloigne beaucoup plus que si on avait choisi M, ce qui peut représenter un risque si on devait minimiser les pertes à un jeu d’argent par exemple.

Exercice 2

2.3)

Le code suivant calcule l’espérance empirique de gain sur N parties.

N=1000
n=10
data=c() #vecteur des gains obtenus
for (i in 1:N){ #répétition du jeu N fois
  A=runif(1,min=0,max=1) #Alice tire un nombre
  Xi=runif(n,min=0,max=A) #puis tire des nombres sur [0,A]
  M=max(Xi) #annonce le max
  rM=1.1*M
  gain=0
  if(rM<=A){
    gain=rM-M
  }
  data=c(data,gain) #on ajoute le gain à cette partie dans le vecteur
}
mean(data) #esperance empirique du gain
## [1] 0.01628198

On obtient une espérance empirique de moins de 2 centimes. C’est peu. La stratégie de Bob ne semble pas très efficace.

2.4)

Avant de commencer le code, quelques intutions:
- plus m est proche de a, plus P(A=a,M=m) augmente car M représente un maximum donc il est en général assez proche de a.
- plus a est petit, plus P(A=a,M=m) augmente pour un m fixé car pour un a fixé, on tire les Xi dans l’ensemble discret {0, 0.1 … a}, soit un ensemble à 10*a+1 valeurs. Plus a est petit, moins il y a de valeurs dans cet ensemble et donc quand on tire un Xi, on a plus de chances que ce Xi soit le maximum de l’ensemble.

Ecrivons un code R pour estimer P(A=a,M=m):

a=0.2
m=0.1
N=1000
n=3
data=c()
for (i in 1:N){ #répétition du jeu N fois
  A=sample(x = 0:10, size = 1, replace = T)/10 #tirage multiple de 0.1 entre 0 et 1
  Xi=sample(x = 0:(10*A), size = n, replace = T)/10 #tirage multiple de 0.1 entre 0 et A
  M=max(Xi) #annonce le max
  data=c(data,(A==a && M==m))
}
mean(data)#Estimation de P(A==a,M==m)
## [1] 0.011

On veut maintenant estimer P(A=a|M=0.5).
On utilise une variation de l’algorithme précédent dans lequel on calcule pour chaque a dans {0, 0.1, … 1} P(A=a,M=0.5)/P(M=0.5)=P(A=a|M=0.5). Les résultats sont stockés dans le tableau pAsachM pour que l’on puisse regarder quelle valeur de a est la plus probable lorsque M=0.5.

N=1000
n=3
pAsachM=c()
for(k in 0:10){#pour chaque valeur de a
  a=k/10
  data=c()
  valM=c()
  for (i in 1:N){ #répétition du jeu N fois
    A=sample(x = 0:10, size = 1, replace = T)/10 #tirage multiple de 0.1 entre 0 et 1
    Xi=sample(x = 0:(10*A), size = n, replace = T)/10 #tirage multiple de 0.1 entre 0 et A
    M=max(Xi) #annonce le max
    data=c(data,(A==a && M==0.5))
    valM=c(valM,M)
  }
  pAsachM=c(pAsachM,mean(data)/mean(valM==0.5)) #P(A==a,M==0.5)/P(M==0.5)
}
pAsachM
##  [1] 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.29126214
##  [7] 0.19811321 0.15044248 0.07692308 0.05785124 0.02500000

La plus forte probabilité est celle qui correspond à P(A=0.5|M=0.5).
On en déduit que, si Alice nous indique que M=0.5, il vaut mieux proposer A=0.5.

2.5)

On adapte le code de la question 2.3) pour faire varier n et alpha:

matesp=matrix(nrow = 9, ncol = 3)
alpha=c(0.7,0.5,0.3)
N=1000
for (n in 2:10){
  for (i in 1:3){
    data=c() #vecteur des gains obtenus
    for (j in 1:N){ #répétition du jeu N fois
      A=runif(1,min=0,max=1) #Alice tire un nombre
      Xj=runif(n,min=0,max=A) #puis tire des nombres sur [0,A]
      M=max(Xj) #annonce le max
      rM=M^alpha[i]
      gain=0
      if(rM<=A){
        gain=rM-M
      }
      data=c(data,gain) #on ajoute le gain à cette partie dans le vecteur
    }
    matesp[n-1,i]=mean(data) #esperance empirique du gain
  }
}
matplot(x=2:10,matesp, pch=c("7","5","3"), xlab = "n", ylab = "E[G]")

Sur ce graphe, chaque courbe correspond à un alpha, 7, 5 et 3 représentant respectivement 0.7, 0.5 et 0.3.
Le meilleur alpha semble être 0.5 pour n=2. Cependant, on observe sur le graphe que 0.7 reprend le dessus à partir de n=3. De plus, on remarque qu’en augmentant n, notre espérance de gain diminue drastiquement quelque soit alpha. Cette stratégie n’est donc efficace que pour des petites valeurs de n.

Exercice 3

3.6)

Alice tire avec une pièce non biaisée et donne selon la face A1 ou A2.
On a simplement P(“Pile”) = P(“Alice dit A2”) = 0.5, l’expérience du tirage de pièce étant complètement indépendante des valeurs de A1 et A2.
Autrement dit, en répondant “oui” à chaque fois, Bob fait juste le pari que la pièce tombera sur Pile, donc il a 1 chance sur 2 de gagner.

3.7)

On peut comparer la valeur x annoncée par Alice au A1 que l’on peut espérer c’est-à-dire 0.5. Voici notre stratégie:
- Si x>0.5, on répond “oui”.
- Sinon, on répond “non”.

Si on a A1=0.4 et A2=0.6, on a les cas suivants:
- Alice annonce 0.4: notre stratégie dit de répondre “non”, et effectivement ce n’était pas la plus grande valeur.
- Alice annonce 0.6: notre statégie dit de répondre “oui”, et c’était bien la plus grande valeur.
Pour ces valeurs de A1 et A2 la probabilité de gagner est donc de 1.

Cependant, notre stratégie n’est pas infaillible. Le cas A1=0.6 et A2=0.7 par exemple réduirait notre probabilité de gain à 0.5.
Estimons la probabilité de gain pour A1 et A2 tirés uniformément dans [0,1].

N=1000
data=c()
for (i in 1:N){ #répétition du jeu N fois
  x=runif(1,min=0,max=1)
  y=runif(1,min=0,max=1)
  piece=sample(x = 0:1, size = 1, replace = T) #lancer piece
  
  if (x<y){
    A1=x
    A2=y
  }
  else {
    A1=y
    A2=x
  }
  
  gain=0
  if (piece==0 && A2>0.5){ #Pile: A2 est annoncé et on dit "oui" que si la valeur annoncée est >0.5
    gain=1
  }
  else if (piece==1 && A1<=0.5){ #Face: A1 est annoncé et on dit "non" que si la valeur annoncée est <=0.5
    gain=1
  }
  data=c(data,gain)
}
mean(data)#Estimation de P(Gain)
## [1] 0.753

Avec à peu près 3 chance sur 4 de gagner, cette stratégie est assez satisfaisante.