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.218768464867026
- 0.843927519628778
- 0.955490986350924
- 0.853092069504783
- 0.90459299297072
- 0.84815823379904
- 0.665208274265751
- 0.357015398796648
- 0.285010195802897
- 0.562875396572053
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.53998182 | 0.3385591 | 0.714393215 | 0.50863234 | 0.2691519 | 0.96208106 | 0.03833357 | 0.02061107 | 0.4039779 | 0.52512589 |
0.78069957 | 0.1356623 | 0.004787139 | 0.10755873 | 0.4100617 | 0.08435897 | 0.17969655 | 0.27180456 | 0.6485540 | 0.01932214 |
0.37777460 | 0.7415678 | 0.900286994 | 0.95935084 | 0.8699246 | 0.65665361 | 0.91114427 | 0.72818206 | 0.2383789 | 0.28903593 |
0.26977526 | 0.3157843 | 0.313311158 | 0.61841454 | 0.1765343 | 0.76210585 | 0.35155016 | 0.89884020 | 0.7328853 | 0.96704602 |
0.73274439 | 0.5612604 | 0.770808213 | 0.74537682 | 0.3559948 | 0.26056296 | 0.67744944 | 0.07650493 | 0.4953687 | 0.73585195 |
0.30270771 | 0.6706790 | 0.362960988 | 0.33855992 | 0.4817620 | 0.73054091 | 0.74501654 | 0.68697716 | 0.2386631 | 0.35134433 |
0.56953203 | 0.9661451 | 0.151206902 | 0.49212693 | 0.4574692 | 0.80019318 | 0.94669432 | 0.81092006 | 0.8486719 | 0.95402881 |
0.03696671 | 0.2947059 | 0.175080407 | 0.91832823 | 0.6661304 | 0.67194526 | 0.87398943 | 0.74242762 | 0.2326970 | 0.25163788 |
0.66602075 | 0.6041335 | 0.933390653 | 0.33150507 | 0.1512177 | 0.20755232 | 0.63000980 | 0.12675605 | 0.8695550 | 0.66567372 |
0.87948910 | 0.5191934 | 0.397167063 | 0.05278656 | 0.7832253 | 0.33137119 | 0.12294835 | 0.78046289 | 0.7586347 | 0.16576948 |
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.783225254155695
- 0.0765049296896905
- 0.677449441282079
- 0.377774599939585
- 0.78046289132908
sample(x,5)
- 0.351344325812533
- 0.783225254155695
- 0.260562955169007
- 0.911144266370684
- 0.0369667082559317
\(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.int(length(x), size, replace, prob)
2. .handleSimpleError(function (cnd)
. {
. watcher$capture_plot_and_output()
. cnd <- sanitize_call(cnd)
. watcher$push(cnd)
. switch(on_error, continue = invokeRestart("eval_continue"),
. stop = invokeRestart("eval_stop"), error = invokeRestart("eval_error",
. cnd))
. }, "cannot take a sample larger than the population when 'replace = FALSE'",
. base::quote(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)