############################################################################# ### ### labIII.txt - Mauro Gasparini, Novembre 2002 ### terzo laboratorio di R per studenti di ingegneria ### ### Distribuzioni in R. Simulazione. Definire nuove funzioni. ### ############################################################################# ##### Distribuzioni in R # R può essere usato come una calcolatrice delle seguenti distribuzioni: # geom geometrica # pois Poisson # chisq chi-square # t t di Student # gamma Gamma # lnorm lognormale # weibull Weibull # f F # unif uniforme # weibull Weibull # norm normale # binom binomiale # hyper ipergeometrica # exp esponenziale # Usare l'help per i dettagli sui loro parametri. # Per ogni distribuzione nella tabella, R può calcolare la densità # in un punto, calcolare la funzione di ripartizione in un punto, # calcolare un p-quantile, oppure generare un valore casuale # dalla distribuzione. Queste operazioni vengono fatte da funzioni # ottenute aggiungendo al nome della distribuzione il prefisso # d per la densità # p per la ripartizione # q per il quantile # r per la generazione di numero casuale (vedi la parte "Simulazione" di sotto) # Esempio: la distribuzione normale standardizzata. dnorm(1) # calcola il valore della densità nel punto 1 dnorm(c(-1,0,1)) # calcola il valore della densità nei punti -1,0 e1 pnorm(1) # calcola il valore della ripartizione in x. qnorm(0.10) # calcola lo 0,10-quantile, cioè il decimo percentile # Grafico della funzione di densità di una normale standard: x <- seq(-5,5,length=100) plot(x, dnorm(x), type="l") # parametri opzionali per normali qualsiasi (non standard): # il primo é la media, il secondo la deviazione standard, # come si evince dall'help: help(dnorm) lines(x, dnorm(x, 1, 2), col=2) # ricordate lines( )? # La stessa cosa si può fare per le distribuzioni discrete. # Esempio: la distribuzione binomiale di parametri n=10 e p=0.3 plot(x <- 0:10, dbinom(x,10,0.3), type='h', xlab="valori assumibili da X binomiale di parametri n=10 e p=0.3", ylab="densità della binomiale di parametri n=10 e p=0.3") axis(side=1,at=c(0:10)) # il comando axis( ) abbellisce l'asse delle x, vedi anche par( ) ##### Simulazione in R # Il prefisso r accennato sopra ci permette di simulare da distribuzioni note. # Esempio: simulare il numero di successi su 10 lanci con una moneta equa rbinom(1, 10, 0.5) # Esempio: simulare per 5 volte (5 "partite") # il numero di successi su 10 lanci con una moneta equa rbinom(5, 10, 0.5) # Simulare 100 valori casuali estratti da un normale standard rnorm(100) ##### Definizione di nuove funzioni (macro) in R # Per definire nuove funzioni, che servono per esempio per ripetere # gli stessi comandi con input diversi, si usa la sintassi # nomedellanuovafunzione <- function(argomenti){ serie di operazioni da fare con gli argomenti valore della funzione } # I valori degli argomenti sono locali alla funzione, cioè spariscono # dopo che la funzione è stata valutata. # Il valore ritornato dalla funzione è quello contenuto nell'ultima # espressione valutata dentro la funzione, e può essere un oggetto # qualunque di R. # Per esempio, per generare n numeri casuali da una distribuzione # normale standard, farne l'istogramma e ritornarne la media, # si può definire la nuova funzione: normistmed <- function(quantinevuoi){ temp <- rnorm(quantinevuoi) hist(temp) mean(temp) } # La funzione hist(temp) crea un istogramma del campione generato # da norm(quantinevuoi) come sottoprodotto della funzione. # Ciò mostra come una funzione possa fare delle cose # interessanti anche a livello intermedio. # La funzione mean(temp) calcola la media del campione generato # e la restituisce come valore della funzione normistmed. #### Esercizi da fare in classe ### 1) fare il grafico di una cdf normale di media 1 e varianza 4 ### 2) risolvere gli esercizi 4.26 e 4.27 dal Devore usando R ### 3) mostrare sull'asse delle ascisse del grafico binomiale di sopra # solo i valori pari ### 4) simulare i diametri di 100 tubi di diametro distribuito normalmente # con valore atteso 3 e deviazione standard 1 ### 5) scrivere una funzione cdf411(x) # che ritorni la cdf dell'esercizio 4.11 visto in classe e # così definita: F(x)=0 se x<0, F(x)=x^2/4 se 0<=x<2, F(x)=1 se x>=2 ### 6) salvare in un file "cdf411.R" la funzione appena definita e rileggerla # dentro R con il comando source("cdf411.R")