Simulation de lois discrètes

Question 1.1

set.seed(5);
rand = runif(1,0,1)

distribution = c(0.1,0.2,0.05,0.05,0.05,0.15,0.35,0.05)

indice = 0
sum = 0

while (sum <= rand){
  indice = indice +1
  sum = sum + distribution[indice]
}

indice
## [1] 2

algorithme Cumulative Distribution Function CDF

coût moyen : E(X) -> optmisation : mettre les plus grandes proba en premier

autre algo possible : tabulation

Question 1.2

Algo 1 et 2

algo CDF/tabulation avec les probabilités de la loi binomiale -> précalcul des probas

P(X=k) = (k parmi n)p^i(1-p)^i

Binomiale1<-function(n,p){
  distribution = rep(0,n)
  # précalcul des probas
  for (i in 1:n){
    distribution[i]= choose(n, i)*p^i*(1-p)^(n-i)
  }
  # algo CDF
  rand = runif(1,0,1)
  indice = 0
  sum = 0
  while (sum <= rand){
    indice = indice +1
    sum = sum + distribution[indice]
  }
   return(indice)
}


Binomiale1(100,0.5)
## [1] 52

Algo 3

Binomiale3<-function(n,p){
res = 0
for (i in 1:n){
  res = res + ifelse(runif(1,0,1)<=p,0,1)
}
return(res)
}

Binomiale3(100,0.5)
## [1] 50

coût moyen de l’algo : n comparaisons

Question 1.3

Algo 1 et 2 : CDF/Tabulation avec P(X=k)=(1-p)^(k-1)*p ?

/! il n’y a pas de maximum à k donc il faudrait un tableau de taille infinie pour le précalcul -> solution : calculer les probas en même temps que la génération

Algo 3

Geometrique<-function(p){
res = 0
while (runif(1,0,1)<= 1-p){
  res = res +1
}
return(res)
}

Geometrique(0.1)
## [1] 1

coût moyen de l’ago : E(X) = 1/p

Question 1.4 P(X=i)=c*i

somme pour i de 1 à n des P(X=i) = 1

somme pour i de 1 à n des c*i = 1

c*somme pour i de 1 à n des i = 1

c = 2/(n*(n+1))

algo du rejet

proba la plus grande pmax = c*n

rejet<-function(p,k){
  #voir cours
}