Générer des variables aléatoires#
runif#
La fonction runif
permet de générer des pseudo-variables aléatoires indépendantes entre deux bornes
runif(n=combien, min, max)
runif(1,0,10)
runif(10,0,1)
- 0.391265990911052
- 0.944397742394358
- 0.0583748868666589
- 0.807293069781736
- 0.922995628789067
- 0.53985829395242
- 0.100377480965108
- 0.892141963588074
- 0.262095428770408
- 0.860348788555712
On peut insérer maintenant les valeurs générées à l’intérieur d’un vecteur
x<-runif(100,0,1)
Ou les insérer à l’intérieur d’une matrice
x<-matrix(x, 10)
x
0.1031455 | 0.20560760 | 0.60547841 | 0.016167183 | 0.6731824 | 0.2983440 | 0.4279105 | 0.1107067 | 0.27689745 | 0.28757575 |
0.8544190 | 0.04934581 | 0.46786948 | 0.822747607 | 0.3635915 | 0.5675481 | 0.5713736 | 0.5726758 | 0.04865674 | 0.39477700 |
0.5791466 | 0.25051973 | 0.20736952 | 0.949094431 | 0.5135776 | 0.4954617 | 0.3845289 | 0.8187577 | 0.08233638 | 0.53351164 |
0.7609537 | 0.10049459 | 0.72561746 | 0.009224867 | 0.1506025 | 0.5433803 | 0.8925770 | 0.1004788 | 0.53130572 | 0.01432272 |
0.1564488 | 0.09266130 | 0.59163184 | 0.500228564 | 0.8474000 | 0.4856955 | 0.5485465 | 0.8093377 | 0.29581964 | 0.25010193 |
0.1631710 | 0.96319657 | 0.92231603 | 0.170530931 | 0.5061732 | 0.5183121 | 0.1560865 | 0.9770170 | 0.03466855 | 0.66306497 |
0.3614597 | 0.66250443 | 0.16081249 | 0.769641058 | 0.7692786 | 0.5719878 | 0.2154222 | 0.4968549 | 0.92650905 | 0.31926456 |
0.9817375 | 0.76642683 | 0.03323872 | 0.149769855 | 0.2209362 | 0.8520179 | 0.3956307 | 0.3497186 | 0.47855346 | 0.99613080 |
0.2431281 | 0.29705300 | 0.66974095 | 0.934209090 | 0.2783285 | 0.7326813 | 0.3305101 | 0.8304703 | 0.95840193 | 0.54565083 |
0.5310420 | 0.20889320 | 0.49959443 | 0.456785140 | 0.6228956 | 0.8087795 | 0.2891737 | 0.7372600 | 0.98994205 | 0.16276899 |
Nous avons maintenant obtenu une matrice de dimension 10X10
Seed#
Comme dans SAS, nous avons appris comment générer les mêmes variables aléatoires dans un contexte de cumulation par exemple, avec la fonction seed
set.seed(2)
runif(2,0,1)
- 0.18488225992769
- 0.702374035958201
runif(2,0,1)
- 0.573326334822923
- 0.168051920365542
runif(2,0,1)
- 0.943839338840917
- 0.943474958650768
Si on remet le seed=2, on obtient alors les mêmes valeurs que nous avons obtenues auparavant
set.seed(2)
runif(2,0,1)
- 0.18488225992769
- 0.702374035958201
runif(2,0,1)
- 0.573326334822923
- 0.168051920365542
runif(2,0,1)
- 0.943839338840917
- 0.943474958650768
Sample (échantillonage)#
La fonction sample
tire un échantillon aléatoire de \(n\) variables à partir d’un ensemble de données allant de \(\left\{1, \dots ,N\right\}\)
sample(1:10,5)
- 1
- 10
- 4
- 5
- 9
sample(x,5)
- 0.622895628213882
- 0.809337728191167
- 0.548546533333138
- 0.579146591713652
- 0.737260030582547
sample(x,5)
- 0.663064970402047
- 0.622895628213882
- 0.485695464769378
- 0.384528908180073
- 0.981737528229132
\(n\leq N\)
sample(x,length(x)+1)
Error in sample.int(length(x), size, replace, prob): cannot take a sample larger than the population when 'replace = FALSE'
Traceback:
1. sample(x, length(x) + 1)
2. sample.int(length(x), size, replace, prob)
Lorsque notre échantillon tiré est plus grand que notre ensemble de données, on peut utiliser un tirage avec remise:
# sample(0:1, 100, replace = T)
Cette fonction fonctionne aussi sur un tirage de variable de type caractères
sample(state.name, 5)
- 'Kentucky'
- 'Montana'
- 'Delaware'
- 'Wyoming'
- 'North Carolina'
La fonction sample
donne des probabilités égales à tous les éléments tirés d’un ensemble de données. Toutesfois, il est possible de préciser la probabilité de chaque élément tiré.
s<-sample(1:5, 1000, replace=T, prob=c(.2,.2,.2,.2,.2))
Si on utilise la fonction table
afin de compter l’occurrence de chaque élément
tableau <- table(s)
tableau
s
1 2 3 4 5
222 187 203 183 205
on remarque que chaque élément à été tiré à un taux d’environ 20%
tableau[[1]]/sum(tableau)
Si on change les probabilités maintenant, mais attention la somme des probabilités doit être égale à 1
s<-sample(1:5, 1000, replace=T, prob=c(.2,.5,.1,.1,.1))
table(s)
s
1 2 3 4 5
197 509 101 87 106
rnorm#
La moyenne par défaut est égale à 0 et l’écart-type=1
rnorm(1)
rnorm(1, 0, 100)
Créons un vecteur de 100 valeurs avec moyenne=100 et écart-type=100
x<-rnorm(100, 0, 100)
Si on calcule la moyenne de ce vecteur;
mean(x)
Nous avons obtenu une moyenne proche de la moyenne de nos variables aléatoires générées par la fonction rnorm
La même chose maintenant pour l’écart-type
sd(x)
Toutefois, si nous augmentons le nombre de variables aléatoires généré, nous sommes alors plus proches des arguments de la fonction rnorm
que nous avons saisie
x<-rnorm(10000, 0, 100)
mean(x)
sd(x)