UP | HOME

Séance 12 : Algo & Prog avec R

Table des matières

1 Marche aléatoire en une dimension

1.1 Simulation de marches aléatoires

Écrivez une fonction Walk1D(nsteps, nwalks, prob) renvoyant une matrice entière de taille (nsteps+1) x nwalks. Chaque colonne donne les positions du marcheur pendant une marche aléatoire en une dimension de nsteps pas partant de 0. La fonction doit déclencher une erreur si ses arguments sont invalides (stopifnot).

1.2 Visualisation de marches aléatoires

Écrire une fonction PlotWalk1D(walks) affichant une (plot) ou plusieurs (matplot) marches aléatoires.

par(mfrow=c(2,1))
walks <- Walk1D(500, nwalks=8)
PlotWalk1D(walks[,1])
PlotWalk1D(walks)

rand_walks.jpg

1.3 Fréquence des positions

  1. Écrire une fonction HistWalk1D(walks) affichant un histogtamme (hist) des densités de probabilité pour les positions des marcheurs.
    walks <- Walk1D(500, nwalks=1000)
    HistWalk1D(walks)
    

    freq_pos.jpg

  2. Écrire une fonction HeatWalk1D(walks) affichant une heatmap des positions des marcheurs à chaque pas.
    HeatWalk1D(head(walks, 25))
    

    heatmap_pos.jpg

1.4 Étude de la réccurence

Écrire une fonction HistRecWalk1D(walks) renvoyant un histogramme avec les densités de probabilités de l'intervalle de temps entre deux passages à l'origine.

HistRecWalk1D(head(walks, 101))

hist_rec.jpg

2 Marche aléatoire en deux dimensions

Programmez un script de marche aléatoire d'une tortue. À chaque pas, la tortue tourne d'un angle aléatoire en degrés (runif) et avance aléatoirement entre 1 et 5 unités (sample). Utilisez la fonction rainbow pour faire varier la couleur du pinceau en fonction du pas.

library(TurtleGraphics)
turtle_init(200,200,mode="cycle")

3 Vidage d'une urne (inspiré d'ESC 1999)

Soit un entier strictement positif \(n\). Une urne \(U_n\) contient \(n\) boules numérotées de 1 à \(n\). On y effectue une succession de tirages d'une boule, en appliquant la règle suivante : si la boule tirée porte le numéro \(k\), avant de procéder au tirage suivant, on enlève toutes les boules dont le numéro est supérieur ou égal à k. On note \(X_n\) la variable aléatoire égale au nombre de tirages nécessaires pour vider l'urne \(U_n\) de toutes ses boules.

3.1 Simulation

  1. Écrire une fonction SimUrne(n) simulant les tirages jusqu'à vider l'urne \(U_n\). La fonction renvoie les urnes successives \(U_j\) lors des \(X_n\) tirages.
  2. Écrire une fonction SimXn(n, m) simulant le nombre de tirages nécessaires pour vider l'urne \(U_n\)
replicate(3, SimUrne(50))
SimXn(100, 15)
[[1]]
[1] 50 12  3  0

[[2]]
[1] 50 32 24 15  8  5  2  1  0

[[3]]
[1] 50 19 18  7  6  3  0
 [1] 3 5 4 3 8 6 8 3 5 5 4 9 6 6 7

3.2 Histogramme de la fonction de masse

  1. Afficher un histogramme (hist) avec les densités de probabilité de vider une urne \(U_n\) en un nombre de tirages donné avec m simulations.
  2. Ajouter la courbe (lines) de la loi normale (dnorm) paramétrée par la moyenne et l'écart type de l'échantillon.

3.3 Comparaison avec la probabilité théorique

On peut établir la probabilité théorique \(P(X_n = k)\) que l'urne \(U_n\) soit vidée en \(k\) tirages :

\begin{equation} P(X_n = k) = \begin{cases} 1 & \text{if } n = k = 0 \\ 0 & \text{if } k = 0 \text{ or } k > n \\ \frac{1}{n} \sum_{i=k}^n P( X_{i-1} = k-1) & \text{Otherwise} \end{cases} \end{equation}
  1. Écrire une fonction ProbXn(n, k) renvoyant la probabilité théorique \(P(X_n = k)\).
  2. Écrire une fonction DistXn(n) renvoyant la distribution de \(X_n\).
  3. Transformer ProbXn(n, k) en une mémo-fonction.
n <- 10
m <- 1000
du <- round(DistXn(n), digits = 3)
edu <- tabulate(SimXn(n, m), n)
edu <- round(edu/sum(edu), digits = 3)
cbind(
  c("k", "P(X_n=k)", paste("m =", m)),
  rbind(seq_along(du), du, edu)
  )
k 1 2 3 4 5 6 7 8 9 10
P(Xn=k) 0.1 0.283 0.323 0.199 0.074 0.017 0.003 0 0 0
m = 1000 0.09 0.274 0.345 0.193 0.082 0.01 0.006 0 0 0
  1. IDEA Comment peut-on simplifier \(P(X_n = k)\) ?

Created: 2017-08-02 mer. 12:08