Probabilités et Statistiques - Devoir n°1

Ce devoir fut discuté avec les élèves suivants : Alan GUIVARCH, Romain PASDELOUP et Raphaël AUDIN.

Durant ce TP mon intuition n’a pas toujours été un très bon guide, c’est pourquoi mes réponses sont souvent déduites de l’observation des graphes et des valeurs, que je n’ai pas toujours inclus, et c’est également pourquoi je ne mentionne pas toujours mon intuition.

Exercice 1 : Questions préliminaires à propos d’estimation

Q1.1 M = maxi Xi est un estimateur de a. Etudier pour différentes valeurs de a et de n de votre choix l’espérance de M.

set.seed(255)
# Dans le cadre du jeu de ALice et Bob a peut être modélisé par le code suivant toutefois dans le cadre de mes tests j'ai préféré fixé moi-même a
a = sample(x = 0:100, size = 1,replace=T)

# Fonction pour générer les X1, ..., Xn tirage indépendants et uniformes
generator = function(a,n){
  if (a >= 0 && n >=2)
    return(runif(n, 0, a))
 else return(-1) 
}

# On cherche à trouver l'espérance de M
nbexp =100
tabmax = c(1:nbexp)

for (i in tabmax) {
  tabmax[i] = max(generator(100, 10))
  
}
cat("Test de base : \n")
## Test de base :
cat("E(M) =", mean(tabmax), "; a =", a, " et n = ",10,"\n\n")
## E(M) = 91.91309 ; a = 52  et n =  10
# On teste l'espérance pour différentes valeurs de a et n fixées
a1 = 2
a2 = 20
a3 = 200
n0 = 2
n1 = 10
n2 = 100
n3 = 1000

nbexp =1000

tabmax0 = c(1:nbexp)
tabmax1 = c(1:nbexp)
tabmax2 = c(1:nbexp)
tabmax3 = c(1:nbexp)
tabmax4 = c(1:nbexp)
tabmax5 = c(1:nbexp)
tabmax6 = c(1:nbexp)

for (i in tabmax1) {
  tabmax0[i] = max(generator(a2, n0))
  tabmax1[i] = max(generator(a1, n1))
  tabmax2[i] = max(generator(a1, n2))
  tabmax3[i] = max(generator(a1, n3))
  tabmax4[i] = max(generator(a1, n3))
  tabmax5[i] = max(generator(a2, n3))
  tabmax6[i] = max(generator(a3, n3))
  
}

cat("TEST pour un n le plus petit possible : \n")
## TEST pour un n le plus petit possible :
cat("E(M) =", mean(tabmax0), "; a =", a2, " et n = ",n0,"\n\n")
## E(M) = 13.43733 ; a = 20  et n =  2
cat("TESTS concernant l'impact de la valeur de n: \n" )
## TESTS concernant l'impact de la valeur de n:
cat("E(M) =", mean(tabmax1), "; a =", a1, " et n = ",n1,"\n")
## E(M) = 1.819809 ; a = 2  et n =  10
cat("E(M) =", mean(tabmax2), "; a =", a1, " et n = ",n2,"\n")
## E(M) = 1.980702 ; a = 2  et n =  100
cat("E(M) =", mean(tabmax3), "; a =", a1, " et n = ",n3,"\n\n")
## E(M) = 1.998072 ; a = 2  et n =  1000
cat("TESTS concernant l'impact de la valeur de A : \n")
## TESTS concernant l'impact de la valeur de A :
cat("E(M) =", mean(tabmax4), "; a =", a1, " et n = ",n3,"\n")
## E(M) = 1.998003 ; a = 2  et n =  1000
cat("E(M) =", mean(tabmax5), "; a =", a2, " et n = ",n3,"\n")
## E(M) = 19.98028 ; a = 20  et n =  1000
cat("E(M) =", mean(tabmax6), "; a =", a3, " et n = ",n3,"\n")
## E(M) = 199.7971 ; a = 200  et n =  1000
  • Que remarquez vous ?

Rappelons que l’espérance de M correspond à sa moyenne d’où l’utilisation de la fonction mean pour la calculer.

D’après les tests n possède une influence sur le résultat de la E(M), toutefois celle-ci ne se voit pas forcément bien avec la moyenne, le mieux est de faire un histogramme où on peut y voir que plus le n est grand plus les valeurs tirées ont de chance d’être proche de a. Sur E(M) cela se traduit par une moyenne plus proche de a.

Pour ma part j’avais observé graphiquement que : si on multiplie 10 fois n la longueur de l’intervalle des plus grandes barres de l’histogramme est divisée par 10 donc j’en avais déduit que n serait potentiellement au dénominateur dans E(M).

D’après les tests a possède une influence sur le résultat de la E(M). En effet si on multiplie a par 10, E(M) sera multiplié par 10. Il semblerait donc que a puisse avoir une place dans E(M) en tant qu’une partie du numérateur.

  • Trouver une formule pour E(M). Pour trouver la formule en fonction de a et de n il faut suivre la réflexion suivante.

D’après les observations ci-dessus nous avions:

-a présent au numérateur

-n présent au dénominateur

-E(M) < a

Or si E(M) est inférieur à a nous savions que ce par quoi a est multiplié devait être inférieur à 1. Nous avons donc a * Z avec Z < 1. Nous savions que Z n’était pas inférieur de beaucoup à 1 et que n était au dénominateur. C’est avec le test de a = 20 et n = 2 qu’il a été le plus facile de définir que : \[E(M) = \frac{a \cdot n}{n+1} \underset{n\to +\infty}\to{a} \] Cette formule trouvée empiriquement a été vérifiée par calcul.

  • Déduisez-en comment “corriger” M pour que son espérance soit égale à a.

Afin que E(M) puisse être égale à a il faudrait multiplier E(M) par (n+1)/n.

Or d’après le cours : \[E(aX) = a\cdot E(X)\]

J’en déduis que :

\[\frac{n+1}{n} \cdot E(M) = E(M\cdot \frac{n+1}{n})\]

Donc la correction de M est: \[M = max_{i} X_{i} \times \frac{n+1}{n}\]

  • Estimez la variance de M en fonction de n et de a.
cat("Test de base : \n")
## Test de base :
cat("Var(M) =", var(tabmax), "; a =", a, " et n = ",10,"\n\n")
## Var(M) = 58.63002 ; a = 52  et n =  10
cat("TEST pour un n le plus petit possible : \n")
## TEST pour un n le plus petit possible :
cat("Var(M) =", var(tabmax0), "; a =", a2, " et n = ",n0,"\n\n")
## Var(M) = 22.76948 ; a = 20  et n =  2
cat("TESTS concernant l'impact de la valeur de n :\n" )
## TESTS concernant l'impact de la valeur de n :
cat("Var(M) =", var(tabmax1), "; a =", a1, " et n = ",n1,"\n")
## Var(M) = 0.02796178 ; a = 2  et n =  10
cat("Var(M) =", var(tabmax2), "; a =", a1, " et n = ",n2,"\n")
## Var(M) = 0.0003490647 ; a = 2  et n =  100
cat("Var(M) =", var(tabmax3), "; a =", a1, " et n = ",n3,"\n\n")
## Var(M) = 3.706551e-06 ; a = 2  et n =  1000
cat("TESTS concernant l'impact de la valeur de a : \n")
## TESTS concernant l'impact de la valeur de a :
cat("Var(M) =", var(tabmax4), "; a =", a1, " et n = ",n3,"\n")
## Var(M) = 3.831428e-06 ; a = 2  et n =  1000
cat("Var(M) =", var(tabmax5), "; a =", a2, " et n = ",n3,"\n")
## Var(M) = 0.0003745123 ; a = 20  et n =  1000
cat("Var(M) =", var(tabmax6), "; a =", a3, " et n = ",n3,"\n")
## Var(M) = 0.04039645 ; a = 200  et n =  1000

On sait que la formule de la variance est la suivante : \[Var(M) = E(M^{2}) - [E(M)]^{2}\] Donc si on applique la formule de E(M) trouvée précédemment on obtient : \[Var(M) =\frac{a^{2} \cdot n}{n+2} \cdot (\frac{a \cdot n}{n+1})^{2}\] Cette formule empirique a été vérifiée par le calcul.

Q1.2 Etudier pour différentes valeurs de a et de n de votre choix l’espérance de \[M' = \frac{2}{n} \sum_{i} X_{i}\]

set.seed(255)

a = sample(x = 0:100, size = 1,replace=T)

generator = function(a,n){
  if (a >= 0 && n >=2)
    return(runif(n, 0, a))
 else return(-1) 
}

# Définition de M'
Mprime = replicate(1000, (2/100)* sum(generator(a, 100)))
cat("E(M') =", mean(Mprime), "; a =", a, " et n = ",100,"\n\n")
## E(M') = 51.8746 ; a = 52  et n =  100
#TESTS
a1 = 2
a2 = 20
a3 = 200
n0 = 2
n1 = 10
n2 = 100
n3 = 1000

Mtest0 = replicate(1000, (2/n0)*sum(generator(a2, n0)))

Mtest1 = replicate(1000, (2/n1)*sum(generator(a1, n1)))
Mtest2 = replicate(1000, (2/n2)*sum(generator(a1, n2)))
Mtest3 = replicate(1000, (2/n3)*sum(generator(a1, n3)))

Mtest4 = replicate(1000, (2/n3)*sum(generator(a1, n3)))
Mtest5 = replicate(1000, (2/n3)*sum(generator(a2, n3)))
Mtest6 = replicate(1000, (2/n3)*sum(generator(a3, n3)))
  • Que remarquez vous ? Savez vous le démontrer ?

On remarque que M’ semble être un estimateur de a au même titre que M. On sait que :

\[ E(X) =\frac{\sum_{i} X_{i}}{n} = \frac {a}{2} \] Or d’après la linéarité de l’espérance on obtient : \[E(M') = E(\frac{2}{n} \sum_{i} X_{i}) = 2 \cdot E(\frac{\sum_{i} X_{i}}{n}) = 2\cdot E(X)\]

Conclusion : \[ E(M') = \frac {a}{2} \times 2 = a\]

  • Estimer la variance de M’ en fonction de n et de a. Cet estimateur M’ vous semble-t-il meilleur ou moins bon que M.
cat("Var(M') =", var(Mprime), "; a =", a, " et n = ",100,"\n\n")
## Var(M') = 9.463486 ; a = 52  et n =  100

En testant sur différentes valeurs de a et de n on peut voir que a et n jouent toujours un rôle dans la variance comme dans la question précédente.

On avait Var(M) = 0.001725208 avec M comme estimateur de a et maintenant nous avons Var(M’) = 9.463486 pour M’ comme estimateur de a. Pour un même a on a une variance presque 10 000 fois plus grande (9,46/0.001 = 9460).

Ce qui s’explique par la formule de la variance : \[Var(M') = E(M'^2) - (E(M'))² \]

Qui lorqu’elle est écrite avec la linéarité de l’espérance et suivant l’espérance que nous avons déterminé précedemment donne :

\[Var(M') = E((2X)^2) - (E(2X))^2 = 4\cdot E(X^2) - 4\cdot(E(X))^2 = 4\cdot [E(X^2) - (E(X))^2] \]

Et même si l’espérance semble être plus proche de a, avec une variance aussi élevée M’ ne semble pas être un très bon estimateur comparé à M.

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

Q2.3 Bob n’a pas encore trop pu réfléchir à la bonne stratégie et il se propose donc d’essayer la stratégie r(M) = 1.1 M lorsque n=10

  • Est-ce une bonne stratégie selon vous?

Cette stratégie ne semble pas très bonne. En effet l’espérance du gain sera assez faible puisque même si il gagne dans tous les cas il gagnerait :

\[Gain = r(M) - M = 1,1\cdot M - M = 0,1\cdot M \] Soit au mieux 1 centime d’euro si M = 1. Sachant que M est compris entre O et 1 cela est peu mais justement sachant que le gain se trouve entre 0 et 1 euros il faut aussi relativiser.

  • Ecrire un code R simulant cette situation et permettant d’estimer l’espérance du gain G de Bob.
set.seed(255)

n = 10
# On génère A et les Xi
A = runif(1, 0,1)
X = runif(n, 0, A)

# On répète plusieurs fois l'expérience
nbexp =1000
M = c(1:nbexp)
rM = c(1:nbexp)
Gain = c(1:nbexp)

for (i in M) {
  M[i] = max(X)
  rM[i] = 1.1 * M[i]
  if (rM[i] > A)
    Gain[i] = 0
  else
    Gain[i] = rM[i] - M[i]
}

mean(M)
## [1] 0.4428638
mean(rM)
## [1] 0.4871501
mean(Gain)
## [1] 0.04428638
cat("Pour A = ", A,", Bob gagne en moyenne : ", mean(Gain), "euros")
## Pour A =  0.5242901 , Bob gagne en moyenne :  0.04428638 euros

Via la simulation, on voit bien que son espérance de gain moyenne est faible puisqu’elle est de l’ordre de 0,04 euros.

Q2.4 Simplifions un peu et supposons que n=3, que A est tiré uniformément dans l’ensemble discret {0,0.1,…,1.0} et que les Xi sont également des multiples de 0.1 tirés unifomément dans l’ensemble discret {0,…,A}

  • Ecrire un code R permettant d’estimer P[A = a, M = m] pour les différentes valeurs de a et de m.
set.seed(255)

n = 3
#Fonction qui va générer A, les Xi, M et retourner si A = a && M = m
est_egal = function(n, a, m){
  A = sample(x=(0:10)/10, 1, replace=T)
  X = sample(x=(0:(10*A))/10, n, replace=T)
  M = max(X)
  return(A == a && M == m)
}
#TEST de base
a = 0.8
m = 0.6
test = replicate(10000, est_egal(n,a,m))

#TESTS pour différentes valeurs de a et M
aVecteur = (0:10)/10
mVecteur = (0:10)/10


for (i in 1:10){
  for (j in 1:10){
      test = mean(replicate(1000, est_egal(n,aVecteur[i],mVecteur[j])))
      #cat("Pour a =", aVecteur[i], " et m = ", mVecteur[j]," P[A = a, M = m] = ", test,"\n")
  }
  #cat("\n")
}
  • En déduire une estimations de P[A = a |M = 0.5]. Si Alice vous indique que M = 0.5, quelle valeur de A devriez vous lui proposer?
set.seed(255)

# TESTS différentes valeurs de A pour M = 0.5
aVecteur = (0:10)/10
mVecteur = 0.5


for (i in 1:10){
      test = mean(replicate(1000, est_egal(n,aVecteur[i],mVecteur)))
      cat("Pour a =", aVecteur[i], " P[A = a, M = 0.5] = ", test,"\n")
}
## Pour a = 0  P[A = a, M = 0.5] =  0 
## Pour a = 0.1  P[A = a, M = 0.5] =  0 
## Pour a = 0.2  P[A = a, M = 0.5] =  0 
## Pour a = 0.3  P[A = a, M = 0.5] =  0 
## Pour a = 0.4  P[A = a, M = 0.5] =  0 
## Pour a = 0.5  P[A = a, M = 0.5] =  0.041 
## Pour a = 0.6  P[A = a, M = 0.5] =  0.023 
## Pour a = 0.7  P[A = a, M = 0.5] =  0.013 
## Pour a = 0.8  P[A = a, M = 0.5] =  0.013 
## Pour a = 0.9  P[A = a, M = 0.5] =  0.011

Mes tests m’ont montré, comme me l’indiquait mon intuition, que si a < m la probabilité va être nulle. Donc si l’ont veut respecter l’esprit du jeu et avoir une probabilité positive, pour un m = 0.5 il faut prendre a >= 0.5.

Q2.5 On retourne au cas général(continu uniforme). Bob se propose d’essayer la stratégie r(M) = M puissance alpha avec alpha < 1.

  • Est-ce une bonne stratégie selon vous ?

Sachant que M <= 1 et alpha < 1, au maximum on peut espérer un gain de 1 euros ce qui semble mieux que le 1 centime de la question 2.3. De plus r(M) ne dépendra d’un pourcentage de M, qui est une petite valeur, mais d’une puissance de M.

  • Ecrire un code R simulant cette situation et permettant d’estimer l’espérance du gain G de Bob pour n =2 et alpha appartenant à {0.7, 0.5, 0.3}.
set.seed(120)

n = 2

f = function (n){
  Galpha = 0
  # Calcul du gain pour différentes valeurs de alpha
  for (alpha in c(0.7, 0.5, 0.3)){
    # On génère A et Xi
    A = runif(1, 0,1) 
    X = runif(n, 0, A)

    nbexp =1000
    M = c(1:nbexp)
    rM = c(1:nbexp)
    Gain = c(1:nbexp)

    for (i in M) {
      M[i] = max(X)
      rM[i] = M[i]**alpha
      if (rM[i] > A)
        Gain[i] = 0
      else
        Gain[i] = rM[i] - M[i]
    }
    G = mean(Gain)
    cat("pour alpha = ", alpha," G = ", G,"\n")
  }
}

# On appelle la fonction pour n = 2
f(n)
## pour alpha =  0.7  G =  0.1111848 
## pour alpha =  0.5  G =  0.235369 
## pour alpha =  0.3  G =  0.1113063
  • Quelle est la meilleure valeur de alpha parmi ces trois valeurs ? Arrivez-vous à trouver un meilleur alpha en dehors de ces valeurs ?

La meilleure valeur de alpha semble être 0.5. Je ne pense pas que l’on puisse trouver de meilleur alpha. En effet si veut gagner plus on pourrait se dire qu’il faudrait augmenter alpha mais à 0.7 (qui est supérieur à 0.5) on obtient un gain moyen moins grand.

  • Pour n = 10
set.seed(120)

n = 10
# On appelle la fonction pour n = 10
f(n)
## pour alpha =  0.7  G =  0 
## pour alpha =  0.5  G =  0.04025185 
## pour alpha =  0.3  G =  0

Pour n = 10 on obtient la même conclusion. Toutefois je pense que la variance va être plus importante.

Exercice 3 : Un dernier jeu à base de max et de pile ou face

Q3.6 Bob se dit qu’il n’a rien à perdre à toujours répondre “oui”. Quelle est sa probabilité de gagner?

La probabilité que Bob a de gagner correspond à la probabilité qu’Alice face Pile.

Étant donné que la probabilité de gagner va dépendre uniquement du lancer de la pièce donc du résultat, soit Pile soit Face, si celle-ci n’est pas biaisée la probabilité devrait être de 0,5.

set.seed(255)
n=1000

# Lancer de la pièce
coin = sample(x=c("P","F"), n , replace=T)
mean(coin=="P")
## [1] 0.481

Q3.7 Elaborez une autre stratégie permettant à Bob de tomber juste strictement plus d’une fois sur deux.

Au début j’avais pensé à une stratégie assez complexe en me disant que Bob répondrait forcément “non” si le chiffre est <= 0.1 et forcément “oui” si il est >= 0.9. Tandis que pour les nombres entre ]0.1,0.9[ il aurait répondu “oui” avec une probabilité de “1/2” et non avec une probabilité de 1/2.

Cependant ma stratégie était un peu complexe et dure à écrire.

Et c’est en relisant la question précédente que je me suis rendue compte qu’il suffisait de garder les mêmes probabilités que l’on avait trouvé mais que la réponse de Bob ne dépendrait pas de la valeur de la pièce mais plutôt de la valeur du nombre donné.

Bob répondra donc “oui” si le nombre donné par Alice est >= 0.5 et “non” si il est < 0.5. En effet un nombre plus grand a plus de chance d’être A2 que A1, et inversement.

  • Evaluez le gain de cette stratégie lorsque Alice choisit A1 = 0.4 et A2 = 0.6.

Le gain de notre stratégie pour A1 = 0.4 et A2 = 0.6 est que Bob a 100% de chance de gagner.

  • Evaluez le gain de cette stratégie lorsque Alice tire ces deux nombres uniformément dans l’intervalle [0,1]
set.seed(100)

n= 1000
# On génère A1 et A2
A1 = runif(n,0.0,1.0)
A2 = runif(n,A1,1.0)

nbex= 1000
# On lance la pièce
coin = sample(x=c("P","F"),size=nbexp,replace=T)

res =  c(1:nbexp)

# Bob gagne si Alice donne A2 avec A2 >=0.5 ou bien si Alice donne A1 avec A1 <0.5
for(i in res) {
  res[i] = (coin[i] == "P" && A2[i] >= 0.5 || coin[i] == "F" && A1[i] < 0.5)
}
cat("Bob a une espérance de gagner de : ", mean(res == TRUE) , "\n")
## Bob a une espérance de gagner de :  0.67

Avec notre stratégie Bob a 67% de chance de gagner ce qui est bien supérieur à la première stratégie de Bob.