This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.
When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
#Exercice 0
#1.Simuler une dizaine de réalisations indépendantes de variables aléatoires de loi uniforme sur [0,1].
runif(10)
## [1] 0.18311902 0.53963300 0.22735962 0.99112732 0.79571575 0.45036542
## [7] 0.72153543 0.62566786 0.04908972 0.08636519
#2. Changer la graine (seed) et recommencer.
set.seed(1)
runif(10)
## [1] 0.26550866 0.37212390 0.57285336 0.90820779 0.20168193 0.89838968
## [7] 0.94467527 0.66079779 0.62911404 0.06178627
set.seed(2)
runif(10)
## [1] 0.1848823 0.7023740 0.5733263 0.1680519 0.9438393 0.9434750 0.1291590
## [8] 0.8334488 0.4680185 0.5499837
#On peut voir que mettre une certaine graine(seed) nous renvoie la même distribution uniforme chaque fois qu'on relance. Ça se passe parce que le générateur n'est pas vraiment aléatoire, mais pseudoaléatoire.
#3. Simuler alors un échantillon de taille entre 1000 et 10 000, choisie individuellement et donnez une représentation de la distribution empirique de votre échantillon.
x<-runif(10000)
hist(x)
#Nous pouvons voir que nous avons presque une distribution uniforme, avec chaque valeur ayant une fréquence similaire.
#Exercice 1
#1. Simulez Nmc réalisations indépendantes d'une variable aléatoire Z. Vous choisirez individuellement les valeurs de p1,p2,...,p7 ainsi que la valeur de Nmc.
nfamilles=7
jeu_de_familles<-function(ntrials){
trials = rep(0,ntrials)
for (j in 1:ntrials)
{
trials[j] = sample(1:nfamilles,1)
}
return(trials)
}
trials<-jeu_de_familles(1000)
#Choisissez individuellement un k E {1,...,7} donnez un estimateur pk du parametre pk construit à partir de vos simulations. Justifiez la convergence asymptotique de cet estimateur.
k=1
pk<-sum(trials==k)/length(trials)
#La vraie valeur pk doit être 1/7, alors que l'estimateur pk va se rapprocher de 1/7 en augmentant le n. Ça se vérifie avec la loi forte des grands nombres.
#3. Donnez une représentation de la distribution empirique de pk.
n<-c(1:1000)
pk_vec<-rep(0,1000)
for(i in 1:1000){
trials<-jeu_de_familles(i)
pk_vec[i]<-sum(trials==k)/length(trials)
}
plot(n,pk_vec)
mean(pk_vec)
## [1] 0.1437907
#Nous pouvons voir que l'estimateur de pk va se rapprocher de l'esperance de pk, égale à 1/7, avec un plus grand nombre de simulations choisies.
#Exercice 2
#1. Simulez une variable aleatoire reelle de loi N(0,1) suivant la methode de Box-Muller puis la methode du rejet polaire (Marsaglia).
#La methode de Box Muller
box<-function(mean,variance,n)
{
u1<-runif(n)
r<--2*log(u1)
u2<-runif(n)
th<-2*pi*u2
z1<-sqrt(r)*cos(th)
z2<-sqrt(r)*sin(th)
z<-vector(length=n*2)
i=1
j=1
while (i<=n*2)
{
z[i]=z1[j]
i=i+1
z[i]=z2[j]
j=j+1
i=i+1
}
z<-z*variance+mean
return(z)
}
z<-box(0,1,1000)
hist(z,main="box-mueller",breaks=50,freq=FALSE)
mean(z)
## [1] -0.02580264
sd(z)
## [1] 1.008534
#La methode Marsaglia
marsaglia<-function(mean,variance,n){
a<-2*runif(n)-1
b<-2*runif(n)-1
w<-a^2+b^2
r<-(-2*log(w)/w)
#z_1<-a*sqrt(-2*log(w)/w)
#z_2<-b*sqrt(-2*log(w)/w)
z<-vector(length=n)
i=1
while (i<=n)
{
if(r[i]>=0){
z[i]=a[i]*sqrt(r[i])
}
i=i+1
}
z<- z[z!=0]
return(mean+variance*z)
}
z<-marsaglia(0,1,5000)
hist(z,breaks=50,freq=FALSE)
mean(z)
## [1] -0.0183878
sd(z)
## [1] 0.9916237
#2. Comparez les temps de simulation des deux methodes en fonction du nombre de gausiennes a simuler. Expliquer en quelques mots les raisons d'eventuelles differences.
system.time(z<-marsaglia(0,1,10000))
## user system elapsed
## 0.003 0.000 0.002
system.time(z<-box(0,1,10000))
## user system elapsed
## 0.004 0.000 0.003
#La methode de Marsaglia va avoir un temps d'execution moindre, car elle n'a pas besoin de calculer les cos et les sin.
#3
install.packages("fitdistrplus")
## Installing package into '/home/rstudio-user/R/x86_64-pc-linux-gnu-library/3.6'
## (as 'lib' is unspecified)
library(fitdistrplus)
## Loading required package: MASS
## Loading required package: survival
## Loading required package: npsurv
## Loading required package: lsei
plotdist(z,"norm",para=list(mean=5, sd=10))
#4. E[X] Monte Carlo.
n<-rep(0,1000)
marsaglia_mean<-rep(0,1000)
for(i in 1:1000){
marsaglia_mean[i]=mean(marsaglia(5,10,i))
}
plot(1:1000,marsaglia_mean,type="l")
#Exercice 3
#1.
inverse_exp<-function(u,mu){
return(-log(1-u)/mu)
}
e<-inverse_exp(runif(25000),1)
z<-box(0,1,12500)
hist(e,freq=FALSE,breaks=500)
install.packages("Rlab")
## Installing package into '/home/rstudio-user/R/x86_64-pc-linux-gnu-library/3.6'
## (as 'lib' is unspecified)
library(Rlab)
## Rlab 2.15.1 attached.
##
## Attaching package: 'Rlab'
## The following object is masked from 'package:survival':
##
## cancer
## The following object is masked from 'package:MASS':
##
## michelson
## The following objects are masked from 'package:stats':
##
## dexp, dgamma, dweibull, pexp, pgamma, pweibull, qexp, qgamma,
## qweibull, rexp, rgamma, rweibull
## The following object is masked from 'package:datasets':
##
## precip
bernoulli<-rbern(25000, 0.2)
A=(z*((bernoulli-1)^2))+e*bernoulli
hist(A,breaks=500,freq=FALSE)
mean(A)
## [1] 0.2033087
#Exercice 4
N = 500
k_mean = 0
k_var = 0.5
h = 0.3
X = sample(x = c(0:9),size = N,replac=TRUE, prob = c(0.1,0.05,0.15,0.06,0.14,0.25,0.02,0.02,0.02,0.19))
#On choisit comme fonction la densité de la loi normale
Kh<- function(x,h){
return (dnorm(x/h,mean = k_mean,sd = k_var))/h
}
f<-function(x,h){
sum(Kh(x-X,h))/N
}
empiric<-numeric(N)
for (i in 1:N){
empiric[i]=f(10*(i-1)/N,h)
}
hist(x = X,freq=FALSE)
lines(seq(from=0,to=9,length.out = N),empiric,col='red')
You can also embed plots, for example:
Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.