R: simulazioni

# Obiettivo: simulare dati per poter fare test.
# Es. per simulare il lancio di un dado funzione sample

sample(1:6, 4, replace = TRUE)    # simulo 4 lanci di dado

# Replaced = TRUE reinserisce il numero dopo ogni lancio, per simulare le
# estrazioni di una partita a tombola replaced = FALSE.
# E' possibile impostare la probabilità di ciascun evento.
# Es. lancio 100 volte moneta che ha il 30% di probabilità di dare croce (0) e il
# 70% testa (1)

sample(c(0,1), 100, replace = TRUE, prob = c(0.3, 0.7))

# Ogni variabile casuale in R ha una funzione per le simulazioni (col nome di
# r[variabilecasuale]).
# Es. binomiale, che replica l'es. di prima

rbinom(1, size = 100, prob = 0.7)   # numero di teste in 100 lanci 
# (prob 0.7)
rbinom(100, size = 1, prob = 0.7)   # elenco dei risultati dei
# 100 lanci

# Es. normale

rnorm(10)   # genera 10 numeri random da una normale standard (media =
# 0, sd = 1)
rnorm(10,100,25)   # genera 10 numeri random da una normale con media
# = 100 e sd = 25

# replicate() consente di replicare n volte un'operazione.
# es. simulare 100 gruppi di numeri random, ognuno dei quali contiene 5
# valori generati da una Poisson con media 10.

replicate(100, rpois(5, 10))

# Creata una matrice in cui ogni colonna contiene i 5 numeri generati dalla
# Poisson con media 10.
# Con colMeans() possiamo vedere la media di ciascuna colonna.

colMeans(replicate(100, rpois(5, 10)))

# Facendo un'istogramma delle medie vediamo che sono distribuite come
# una normale, come da teorema del limite centrale

hist(colMeans(replicate(100, rpois(5, 10))))

# Funzione utilissima per le simulazioni è set.seed(), poichè consente di
# replicare esattamente il campione creato. Es.

set.seed(125)   # 125 numero intero preso a caso, possiamo utilizzare
# qualsiasi integer
sample(1:6, 4, replace = TRUE)

# Ogni volta che faccio precedere quest'ultima funzione con set.seed(125) il
# risultato sarà sempre 5, 1, 2, 3. In questo modo è possibile far replicare
# esattamente il risultato di un lavoro da chiunque passandogli il codice.




No comments:

Post a Comment