###################### ## Simulazione in R ## ###################### # le distribuzioni piu' comuni sono contenute nella distribuzione base di R # esempio: distribuzione normale # dnorm: densita' # pnorm: funzione di ripartizione # qnorm: funzione quantile (inversa generalizzata) # rnorm: simulazione # Beta: rbeta # Binomiale: rbinom # Cauchy: rcauchy # Chi-quadrato: rchisq # Esponenziale: rexp # F: rf # Gamma: rgamma # Geometrica: rgeom # Ipergeometrica: rhyper # Lognormale: rlnorm # Logistica: rlogis # Normale: rnorm # Poisson: rpois # Student: rt # Uniforme: runif # Weibull: rweibull # molte altre distribuzioni sono contenute in pacchetti aggiuntivi # e.g.: distribuzione di pareto nel pacchetto 'actuar' # runif fornisce il generatore casuale in (0,1) # il seme viene controllato tramite il comando set.seed # 1) imposta il seme a 1 e genera 5 uniformi U(0,1) # 2) genera 5 uniformi U(6,10) # 3) controllare graficamente l'uniformita del generatore casuale # usare 10000 simulazioni e i comandi plot e hist / density # 4) testare l'indipendenza delle uniformi simulate al punto precedente con il test Box-Pierce (o Ljung-Box) # H0: i dati vengono da variabili indipendenti # 5) set.seed si puo' usare per impostare il generatore casuale oppure usare RNGkind # NON CAMBIARE GENERATORE CASUALE SE NON SI HANNO RAGIONI SPECIFICHE PER FARLO!!!! RNGkind(kind = NULL, normal.kind = NULL) # kind permette di scegliere il generatore casuale # in R sono implementati i seguenti: # "Wichmann-Hill": periodo ~ 7*10^12 # "Marsaglia-Multicarry": periodo ~ 2^60 # "Super-Duper": periodo ~ 4.6*10^18 # "Mersenne-Twister" (default): periodo ~ 2^19937-1 ******** # "Knuth-TAOCP-2002": periodo ~ 2^129. # "Knuth-TAOCP" # "L'Ecuyer-CMRG" # "user-supplied" # 6) NON USARE METODI COSTRUITI "ALLA MANO" SE METODI DIRETTI SONO GIA' PRESENTI IN R # => CONTROPRODUCENTE # => INEFFICIENTE # => PERICOLOSO # esempio: esponenziale usando rexp oppure con il metodo dell'inversa => poca differenza nsim <- 10 ^ 6 # un milione di simulazioni set.seed(1) # 7) altro esempio: chi-quadrato con 2n gradi di liberta' (n intero) puo' essere ottenuta come 2(X1 + X2 + ... + Xn) dove Xi sono esponenziali di parametro 1 indipendenti oppure come Y1^2 + ... + Yn^2 dove le Yi sono normali standard # usare "apply" e "colSums set.seed(0) nsim <- 10 ^ 6 # si velocizza se usiamo "colSums"? # se si aumentano i gradi di liberta': # 8) simulare 500 lanci di moneta equa, T = 0, C = 1 # con "rbinom", "runif" e "sample" # verificare distribuzione casuale usando "table" e replicate (valutazioni ripetute di una data espressione) # con "runif" # con "sample" # "sample" permette di simulare (campionare) da una distribuzione finita, con o senza rimpiazzo # qual'e' il piu' efficiente (veloce)? # (con 5000000 simulazioni) # 9) uso di sample: simulare 50 estrazioni da una distribuzione discreta -2, 1, 5 con prob 1/4, 1/3, 5/12 # 10) scrivere una funzione per simulare estrazioni di sfere colorate da un' urna con e senza rimpiazzo # la funzione deve prendere in input i nomi dei colori, il numero di sfere per ogni colore, il numero di estrazioni e se avvengono con o senza rimpiazzo # 11) simulare estrazione del lotto su 10+1 ruote # 12) simulare la prima mano a poker con 4 giocatori