Leila MICHELARD - INFO4

Ce devoir a été fait avec Manon CHAIX.

EXERCICE 1 : QUESTION PRELIMINAIRE A PROPOS D’ESTIMATION

Q1.1.

Estimation de l’espérance de \(M\) pour \(a\) = 10 et \(n\) = 4

set.seed(1)
a = 10
n = 4
k = 100
r = replicate(k, max(as.integer(runif(n,0,a))))
mean(r)
## [1] 7.37

Estimation de l’espérance de \(M\) pour \(a\) = 10 et \(n\) = 40

set.seed(1)
a = 10
n = 40
k = 100
r = replicate(k, max(as.integer(runif(n,0,a))))
mean(r)
## [1] 9

Estimation de l’espérance de \(M\) pour \(a\) = 100 et \(n\) = 4

set.seed(1)
a = 100
n = 4
k = 100
r = replicate(k, max(as.integer(runif(n,0,a))))
mean(r)
## [1] 78.65

Estimation de l’espérance de \(M\) pour \(a\) = 100 et \(n\) = 400

set.seed(1)
a = 100
n = 400
k = 100
r = replicate(k, max(as.integer(runif(n,0,a))))
mean(r)
## [1] 98.97

On remarque que avec peu de tirage, l’espérance de \(M\) reste loin de \(a\). Alors que si on effectue beaucoup de tirage, l’espérance de \(M\) se rapproche de \(a\). Ce qui reste logique. Je suppose donc que l’espérance de \(M\) se rapproche de \(a\) lorsque \(n\) est grand.

Espérance supposée de \(M\) : \(E[M] = a - \frac{a}{n}\)

Donc si l’espérance est correcte, il faudra ajouter \(\frac{a}{n}\) à \(M\) pour le corriger.

Par exemple pour \(a\) = 100 et \(n\) = 40

set.seed(1)
a = 100
n = 40
k = 100
r = replicate(k, max(as.integer(runif(n,0,a)+a/n)))
mean(r)
## [1] 99.81

La variance est égale à l’écart moyen de l’espérance. Donc d’après les calculs précédents et l’estimation de l’espérance, la variance est égale à \(Var(M) = \frac{a}{n}\).

Q1.2.

Estimation de l’espérance de \(M'\) pour \(a\) = 10 et \(n\) = 4

set.seed(1)
a = 10
n = 4
k = 100
r = replicate(k, 2/n*sum(as.integer(runif(n,0,a))))
mean(r)
## [1] 8.825

Estimation de l’espérance de \(M'\) pour \(a\) = 10 et \(n\) = 40

set.seed(1)
a = 10
n = 40
k = 100
r = replicate(k, 2/n*sum(as.integer(runif(n,0,a))))
mean(r)
## [1] 8.8825

Estimation de l’espérance de \(M'\) pour \(a\) = 100 et \(n\) = 4

set.seed(1)
a = 100
n = 4
k = 100
r = replicate(k, 2/n*sum(as.integer(runif(n,0,a))))
mean(r)
## [1] 97.685

Estimation de l’espérance de \(M'\) pour \(a\) = 100 et \(n\) = 400

set.seed(1)
a = 100
n = 400
k = 100
r = replicate(k, 2/n*sum(as.integer(runif(n,0,a))))
mean(r)
## [1] 98.8674

D’après les précédents calculs, on remarque qu’on l’on se rapproche beaucoup plus de \(a\) pour \(M'\) que pour \(M\).

\(E(M') = E(\frac{2}{n}\sum_{i}X_i)\)
\(= \frac{2}{n}E(\sum_{i}X_i)\)
\(= \frac{2}{n}\sum_{i}E(X_i)\)
\(= \frac{2}{n}\sum_{i}\frac{a}{2}\)
\(= \frac{1}{n}*n*a\)
\(= a\)

\(Var(M') = E(M'-E(M'))^{2}\)
\(= E(\frac{2}{n}\sum_i{Xi} - a)*E(\frac{2}{n}\sum_i{Xi} - a)\)
\(= [E(\frac{2}{n}\sum_i{Xi}) - E(a)]^{2}\)
\(= (a -E(a)^{2}\)
\(= a^{2} - 2aE(a)+E(a)^{2}\)
\(= a^{2} - 2a^{2} + a^{2}\)
\(= 0\)

Exercice 2 : Un deuxième jeu à base de max

Q2.3 :

En adoptant cette stratégie, Bob ne gagnera pas souvent. Mais étant donné que lorsqu’il perd, il ne perd pas d’argent, cela ne lui portera pas préjudice. Ce n’est ni une bonne, ni une mauvaise stratégie : il ne prend aucun risque.

Code permettant d’estimer l’espérance du gain de Bob :

set.seed(1)
A = runif(1)
n = 10
k = 100
i = 0
G = vector(mode = "double", length = k)
repeat {
  X = runif(n,0,A)
  M = max(X)
  if(1.1*M <= A){
    G[i] = 0.1*M 
  }
  else {
    G[i] = 0
  }
  i = i + 1
  if(i==k){
    break;
  }
}
sum(G)
## [1] 0.8707465
mean(G)
## [1] 0.008707465

On voit que pour 100 tirages, Bob ne gagne que 87 centimes et l’espérance de son gain ne s’élève qu’à 0.87%.

Q2.4 :

Pour répondre à cette question, je trouve ça plus clair de ne tester que les fois où \(A = a\) et compter pour chaque M le nombre de fois qu’il apparaît.

Estimation des probabilités que \(A = 0.3\) :

set.seed(1)
n = 3
k = 1000
i = 0
a = 0.3
i = 0
res = vector(mode="integer", length = 11)
repeat {
  A = as.integer(runif(1,0,11))/10
  X = as.integer(runif(n,0,A*10+1))/10
  M = max(X)
  if(A == a){
    res[M*10] = res[M*10] + 1
  }
  i = i+1
  if(i == k){
    break
  }
}
nom_barres <- c("0.0", "0.1", "0.2", "0.3", "0.4", "0.5", "0.6", "0.7", "0.8", "0.9", "1.0")
barplot(res/k, names.arg=nom_barres)

On peut voir que la probabilité que \(A = 0.3\) et \(M = 0.2\) est beaucoup plus élevé que la probabilité que \(A = 0.3\) et \(M = 0.1\), ce qui n’est pas étonnant.

Estimation des probabilités que \(A = 0.6\) :

set.seed(1)
n = 3
k = 1000
i = 0
a = 0.6
i = 0
res = vector(mode="integer", length = 11)
repeat {
  A = as.integer(runif(1,0,11))/10
  X = as.integer(runif(n,0,A*10+1))/10
  M = max(X)
  if(A == a){
    res[M*10] = res[M*10] + 1
  }
  i = i+1
  if(i == k){
    break
  }
}
nom_barres <- c("0.0", "0.1", "0.2", "0.3", "0.4", "0.5", "0.6", "0.7", "0.8", "0.9", "1.0")
barplot(res/k, names.arg=nom_barres)

De la même façon que pour le calcul précédent, on voit que plus on se rapproche de \(a\), plus la probabilité que \(A = a\) et \(M = m\) est grande.

Estimation des probabilités que \(A = 0.9\) :

set.seed(1)
n = 3
k = 1000
i = 0
a = 0.9
i = 0
res = vector(mode="integer", length = 11)
repeat {
  A = as.integer(runif(1,0,11))/10
  X = as.integer(runif(n,0,A*10+1))/10
  M = max(X)
  if(A == a){
    res[M*10]= res[M*10] + 1
  }
  i = i+1
  if(i == k){
    break
  }
}
nom_barres <- c("0.0", "0.1", "0.2", "0.3", "0.4", "0.5", "0.6", "0.7", "0.8", "0.9", "1.0")
barplot(res/k, names.arg=nom_barres)

Même principe que pour les deux exemples précédents.

Maintenant, calculons la probabilité de \(A = a\) sachant \(M = 0.5\). Pour cela, on va appliquer le même calcul mais on va la calculer pour tout \(A\) possible entre 0 et 1 :

set.seed(1)
resf <- NULL
for (j in 0:10){
  n = 3
  a = 0.1 *j
  m=0.5
  res<- NULL
  for (i in 0:10){
      A = as.integer(runif(1,0,11))/10
      X = replicate(n,as.integer(runif(1,0,A*10+1))/10)
      M = max(X)
      if(A == a && M==m){
        res[i]<- 1
      }else{
        res[i]<-0
      }
  }
  resf[j]<-mean(res)
}
plot(resf)

On voit donc que le seul pic que l’on obtient est en \(A = 0.5\). Donc si Alice nous indique que \(M = 0.5\), on devrait lui proposer \(A = 0.5\).

Q2.5 :

Cette stratégie est dépendante du alpha choisi. En effet, \(M\) est inférieur ou égal à 1. Donc si \(M\) est inférieur à 1 alors plus le alpha sera petit, plus \(M^{alpha}\) sera grand. De plus, \(M^{alpha}\) est toujours supérieur à \(M\) (car \(A\) est forcément supérieur à \(M\)) et inférieur à 1.

Estimation de l’espérance de G pour \(n = 2\) et \(alpha = 0.3\) :

set.seed(1)
A = runif(1)
alpha = 0.3
n = 2
k = 100
i = 0
G = vector(mode = "double", length = k)
repeat {
  X = runif(n,0,A)
  M = max(X)
  if((M^alpha) <= A){
    G[i] = (M^alpha) - M 
  }
  else {
    G[i] = 0
  }
  i = i + 1
  if(i==k){
    break;
  }
}
mean(G)
## [1] 0

On peut en déduire que \(alpha = 0.3\) est trop grand, donc \(M^{alpha}\) dépasse \(A\). C’est pourquoi sur nos 100 tirages, on gagne peu de fois, donc l’espérance de gain est très petite.

Estimation de l’espérance de G pour \(n = 2\) et \(alpha = 0.5\) :

set.seed(0)
A = runif(1)
alpha = 0.5
n = 2
k = 100
i = 0
G = vector(mode="double", length = k)
repeat {
  X = runif(n,0,A)
  M = max(X)
  if((M^alpha) <= A){
    G[i] = (M^alpha) - M 
  }
  else {
    G[i] = 0
  }
  i = i + 1
  if(i==k){
    break;
  }
}
mean(G)
## [1] 0.1430963

Pour \(alpha = 0.5\), \(M^{alpha}\) est grand mais reste raisonnable, donc sur nos 100 tirages, notre gain sera grand.

Estimation de l’espérance de G pour \(n = 2\) et \(alpha = 0.7\) :

set.seed(1)
A = runif(1)
alpha = 0.7
n = 2
k = 100
i = 0
G = vector(mode="double", length = k)
repeat {
  X = runif(n,0,A)
  M = max(X)
  if((M^alpha) <= A){
    G[i] = (M^alpha) - M 
  }
  else {
    G[i] = 0
  }
  i = i + 1
  if(i==k){
    break;
  }
}
mean(G)
## [1] 0.02808171

Pour \(alpha = 0.7\), \(M^{alpha}\) est très proche de \(M\) donc on va gagner plus souvent, mais on gagnera des sommes plus petites (car l’écart entre \(M\) et \(A\) sera très petit). Donc notre gain est petit sur l’ensemble de nos 100 tirages.

On voit donc que la meilleure valeure pour ces 3 \(alpha\) est \(0.5\). Comme dit précédemment cela s’explique par l’écart entre \(A\) et \(M^{alpha}\).

Maintenant essayons de voir les résultats pour \(n = 10\) :

Estimation de l’espérance de G pour \(n = 10\) et \(alpha = 0.3\) :

set.seed(1)
A = runif(1)
alpha = 0.3
n = 10
k = 100
i = 0
G = vector(mode = "double", length = k)
repeat {
  X = runif(n,0,A)
  M = max(X)
  if((M^alpha) <= A){
    G[i] = (M^alpha) - M 
  }
  else {
    G[i] = 0
  }
  i = i + 1
  if(i==k){
    break;
  }
}
mean(G)
## [1] 0

Estimation de l’espérance de G pour \(n = 10\) et \(alpha = 0.5\) :

set.seed(1)
A = runif(1)
alpha = 0.5
n = 10
k = 100
i = 0
G = vector(mode="double", length = k)
repeat {
  X = runif(n,0,A)
  M = max(X)
  if((M^alpha) <= A){
    G[i] = (M^alpha) - M 
  }
  else {
    G[i] = 0
  }
  i = i + 1
  if(i==k){
    break;
  }
}
mean(G)
## [1] 0

Estimation de l’espérance de G pour \(n = 10\) et \(alpha = 0.7\) :

set.seed(1)
A = runif(1)
alpha = 0.7
n = 10
k = 100
i = 0
G = vector(mode="double", length = k)
repeat {
  X = runif(n,0,A)
  M = max(X)
  if((M^alpha) <= A){
    G[i] = (M^alpha) - M
  }
  else {
    G[i] = 0
  }
  i = i + 1
  if(i==k){
    break;
  }
}
mean(G)
## [1] 0.001145158

La probabilité que l’on gagne avec \(M^{alpha}\) est plus grande si \(M\) est proche de \(A\), donc si \(alpha\) est proche de 1. Mais lorsqu’on a peu de tirages, le gain sera plus important si la différence entre \(M^{alpha}\) et \(A\) est grande (mais pas trop). Ici, avec \(n = 10\), il faut que l’on gagne souvent pour que notre gain soit optimale, donc il faut que la différence entre \(M^{alpha}\) et \(A\) soit petite. Donc notre gain est plus important si \(alpha = 0.7\).