Exercice 1

Alice choisit (secrètement) un nombre a (strictement positif mais quelconque).•

Elle tire ensuite n > 2 nombres X1,X2,…,Xn indépendemment et uniformément dans l’intervalle [0,a].

n est un nombre fixe et décidé par Alice et Bob avant de jouer (par exemple n= 10)

Bob doit essayer de “deviner” le nombre a à partir des Xi.

Question 1.1

M = max Xi est un estimateur de a.

Étudier pour différentes valeurs de a et de n de votre choix l’espérance de M

## On choisit a et n
a = 52
n = 100

## On tire indépendemment et uniformément n valeurs entre 0 et a et on choisit leur maximum
## On réplique cette opération 10000 fois
## Pour calculer la moyenne des maximums obtenus
## Cela nous donne l'éspérence de M = max Xi ci dessus
## Une fois qu'on a l'éspérence on peut également calculer la variance

M = replicate(n = 100000, max(runif(n,0,a)))
E=mean(M)
V=mean((M-mean(M))**2)

E
## [1] 51.48286
V
## [1] 0.2629421
## Remarque : On peut jouer à faire varier n et a
## plus n est grand plus l'éspérance est proche de a

## Formule de E[M] en fonction de a et n
E = (n/(n+1)) * a
E
## [1] 51.48515
## Voici une formule montrant comment "corriger" M pour que E = a
E = (n/(n+1)) * a + (1/(n+1)) * a
E
## [1] 52
## Formule de Var[M] en fonction de a et n
V = (n/(n+2)) * (a^2) - ((n/(n+1)) * a)^2
V
## [1] 0.2598746

Question 1.2

Étudier pour différentes valeurs de a et de n de votre choix l’espérance de

M = 2/n * ∑i Xi

## On choisit a et n
a = 52
n = 100

## On tire indépendemment et uniformément X = X1 ... Xn ( n valeurs entre 0 et a )
## On calcule la somme des Xi et on la multiplie par 2/n
## On réplique cette opération 10000 fois
## Cela nous donne l'éspérence de M = 2/n * ∑i Xi ci dessus
## Une fois qu'on a l'éspérence on peut également calculer la variance

M = replicate(10000, (2/n) * sum(runif(n,0,a)))
E = mean(M)
V = mean((M-mean(M))**2)

E
## [1] 52.04364
V
## [1] 8.987089
## On remarque que E est très proche de a

## Démontrons que E[M] = a
## E(M) = E(2/n*sum(Xi)) = 2/n * sum(E(Xi)) = 2/n * sum(a/2) = 2/n * na/2 = a

## Dans cette expérience V est beaucoup plus grand que dans la question précédente, c'est donc un moin bon estimateur de a

Exercice 2

Cette fois ci, Alice annonce à Bob la plus grande valeur obtenue (M = max Xi).

Bob doit alors deviner la valeur de a à partir de la valeur M révélée par Alice.

Pour cela, il propose une réponse r(M) aussi proche que possible de a.

– Si r(M) est strictement supérieur à a, Bob a perdu et Alice le lui prouve en révélant a

– Si r(M) est plus petie que a, Bob gagne la différence entre M et r(M)

(i.e., Alice doit donner G = r(M) − M euros à Bob)

Question 2.3

Stratégie de Bob : r(M) = 1.1 * M

## La stratégie de Bob semble efficace car il gagne en moyenne 1.66 euros

n = 10
a = 52

f = function(){
  X = runif(n,0,a)
  M = max(X)
  gain=0
  r = 1.1 * M
  if(r <= a) {
    gain = r - M
  }
  return(gain)
}

gains = sample(0,100000,replace=TRUE)
for(i in 1:100000) {
  gains[i]=f()
}
mean(gains)
## [1] 1.662928

Question 2.4

Supposons que

n = 3

a est tiré uniformément dans l’ensemble discret {0 , 0.1 , … , 1.0}

Les Xi sont des multiples de 0.1 tirés uniformément dans l’ensemble discret {0 , … , M}

Écrire un code permettant d’estimer P[A=a,M=m] pour les différentes valeurs de a et de m

Pour cette question j’ai eu besoin d’aide. Adrien m’a expliquer qu’il fallait contruire une matrice contenant les probabilités pour des valeurs de a et m

f = function(N,n) {
    g = function(a,n,m) {
        A=sample(x=(0:10)/10, 1);
        X=sample(x=(0:(10*A))/10, n, replace=TRUE)
        M=max(X);
        return (A==a && M==m)
    }
    Matrix = matrix(nrow = 11, ncol = 11, dimnames =
                     list(c("a=0","a=0.1","a=0.2","a=0.3","a=0.4","a=0.5","a=0.6","a=0.7","a=0.8","a=0.9","a=1"),
                          c("m=0","m=0.1","m=0.2","m=0.3","m=0.4","m=0.5","m=0.6","m=0.7","m=0.8","m=0.9","m=1")));
for (i in 0:10) { for(j in 0:10){
 Matrix[i+1,j+1] = mean(replicate(N, g(i/10, n, j/10))) 
}}
return(Matrix)
}

f(1000, 3)
##         m=0 m=0.1 m=0.2 m=0.3 m=0.4 m=0.5 m=0.6 m=0.7 m=0.8 m=0.9   m=1
## a=0   0.083 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
## a=0.1 0.009 0.083 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
## a=0.2 0.003 0.025 0.072 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
## a=0.3 0.000 0.012 0.026 0.062 0.000 0.000 0.000 0.000 0.000 0.000 0.000
## a=0.4 0.000 0.011 0.017 0.027 0.064 0.000 0.000 0.000 0.000 0.000 0.000
## a=0.5 0.001 0.002 0.006 0.017 0.037 0.042 0.000 0.000 0.000 0.000 0.000
## a=0.6 0.000 0.003 0.006 0.011 0.015 0.031 0.026 0.000 0.000 0.000 0.000
## a=0.7 0.000 0.002 0.005 0.006 0.013 0.021 0.016 0.036 0.000 0.000 0.000
## a=0.8 0.000 0.000 0.003 0.006 0.007 0.004 0.012 0.013 0.025 0.000 0.000
## a=0.9 0.000 0.000 0.001 0.002 0.003 0.009 0.014 0.015 0.020 0.032 0.000
## a=1   0.000 0.000 0.001 0.003 0.005 0.010 0.004 0.008 0.017 0.014 0.022
## Remarque : la partie triangulaire supérieur droite de la matrice est remplie de 0 car m > a est impossible
## On peut lire P[A=a | M=0.5] dans la colonne m=0.5 de la matrice obtenue

Question 2.5

## M^alpha < M ( avec alpha < 1 et M > 1 )
## Cela semble donc être une mauvaise stratégie

## On peut faire varier n et alpha
n = 10
a = 52
alpha = 0.9

f = function(){
  X = runif(n,0,a)
  M = max(X)
  gain=0
  r = M**alpha
  if(r <= a) {
    gain = r - M
  }
  return(gain)
}

gains = sample(0,100000,replace=TRUE)
for(i in 1:100000) {
  gains[i]=f()
}
mean(gains)
## [1] -15.13303