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
}