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)
1.33367028320208
runif(10,0,1)
  1. 0.391265990911052
  2. 0.944397742394358
  3. 0.0583748868666589
  4. 0.807293069781736
  5. 0.922995628789067
  6. 0.53985829395242
  7. 0.100377480965108
  8. 0.892141963588074
  9. 0.262095428770408
  10. 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
A matrix: 10 × 10 of type dbl
0.10314550.205607600.605478410.0161671830.67318240.29834400.42791050.11070670.276897450.28757575
0.85441900.049345810.467869480.8227476070.36359150.56754810.57137360.57267580.048656740.39477700
0.57914660.250519730.207369520.9490944310.51357760.49546170.38452890.81875770.082336380.53351164
0.76095370.100494590.725617460.0092248670.15060250.54338030.89257700.10047880.531305720.01432272
0.15644880.092661300.591631840.5002285640.84740000.48569550.54854650.80933770.295819640.25010193
0.16317100.963196570.922316030.1705309310.50617320.51831210.15608650.97701700.034668550.66306497
0.36145970.662504430.160812490.7696410580.76927860.57198780.21542220.49685490.926509050.31926456
0.98173750.766426830.033238720.1497698550.22093620.85201790.39563070.34971860.478553460.99613080
0.24312810.297053000.669740950.9342090900.27832850.73268130.33051010.83047030.958401930.54565083
0.53104200.208893200.499594430.4567851400.62289560.80877950.28917370.73726000.989942050.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) 
  1. 0.18488225992769
  2. 0.702374035958201
runif(2,0,1) 
  1. 0.573326334822923
  2. 0.168051920365542
runif(2,0,1) 
  1. 0.943839338840917
  2. 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) 
  1. 0.18488225992769
  2. 0.702374035958201
runif(2,0,1) 
  1. 0.573326334822923
  2. 0.168051920365542
runif(2,0,1) 
  1. 0.943839338840917
  2. 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. 1
  2. 10
  3. 4
  4. 5
  5. 9
sample(x,5)
  1. 0.622895628213882
  2. 0.809337728191167
  3. 0.548546533333138
  4. 0.579146591713652
  5. 0.737260030582547
sample(x,5)
  1. 0.663064970402047
  2. 0.622895628213882
  3. 0.485695464769378
  4. 0.384528908180073
  5. 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)
  1. 'Kentucky'
  2. 'Montana'
  3. 'Delaware'
  4. 'Wyoming'
  5. '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)
0.222

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)
0.106821263122198
rnorm(1, 0, 100)
-24.9130626933775

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)
-5.83207843041791

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)
93.1100361171955

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)
0.963181514782263
sd(x)
101.228973820731