Laboratorio con R Corso di Inferenza Statistica
←
→
Trascrizione del contenuto della pagina
Se il tuo browser non visualizza correttamente la pagina, ti preghiamo di leggere il contenuto della pagina quaggiù
Laboratorio con R Corso di Inferenza Statistica Roberta Pappadà · Marco Stefanucci Corso di laurea in Statistica e Informatica per l’azienda, la finanza e l’assicurazione Università degli Studi di Trieste Dipartimento di Scienze Economiche, Aziendali, Matematiche e Statistiche “Bruno de Finetti” (DEAMS) a.a. 2021/2022
Variabili aleatorie e distribuzioni di probabilità 1. Distribuzioni di probabilità discrete Esempio: la distribuzione binomiale. Sappiamo che una variabile aleatoria binomiale di parametri n e p descrive il numero di successi ottenuti in un esperimento binomiale con n prove e probabilità di successo p, ed ha funzione di probabilità binomiale definita da n x p( x ) = p (1 − p)n− x , x = 0, 1, . . . , n. x Vogliamo calcolare la probabilità P( X = 5) dove X ∼ Bin(n, p) con n = 20, p = 0.5. Usi- amo la funzione seq() che produce vettori con componenti equispaziate, e choose(n,r) che restituisce il coefficiente binomiale di n su r (può essere utile ricordare che la fun- zione factorial(n) restituisce il fattoriale di n): x
”b” (both), punti e linee, ”h” (histogram), linee verticali, ”s”, ”S” (steps), linee orizzontali e verticali ”n” (none), sopprime la rappresentazione grafica • xlim, ylim: campo di variazione degli assi • xlab, ylab: titoli per gli assi • main, sub: titolo (principale e secondario) del grafico • add: variabile logica con modalità TRUE, FALSE; se uguale a TRUE sovrappone il risultato al grafico eventualmente presente nella finestra. Useremo spesso la funzione par() che consente di modificare alcuni parametri us- ati durante la generazione delle immagini o per riportare il loro valore alla situazione precedente. Usiamo la funzione plot() per rappresentare la funzione di probabilità binomiale: plot(x, pbin, type="h", main="Binomiale(20, 0.5)", xlab="x", ylab="p(x)") Binomiale(20, 0.5) 0.15 0.10 p(x) 0.05 0.00 0 5 10 15 20 x Per verificare come varia il grafico della densità (probabilità) binomiale per n = 20 al variare del parametro p possiamo costruire una semplice funzione che calcoli i valori della probabilità in funzione di x, n e p. 3
binomiale
plot(x, y0, type="h", ylim=c(0,0.2), xlab="x", ylab="p(x)") points(x-0.1, y1, type="h", col=2) 0.20 0.15 0.10 p(x) 0.05 0.00 0 5 10 15 20 x E se volessimo calcolare il valore della funzione di ripartizione di una binomiale in k intero? Possiamo calcolare le probabilità binomiali per la sequenza di valori x che vanno da 0 a k e poi usare la funzione sum(), come nell’esempio che segue. #parametri n
Distribution R name additional arguments beta beta shape1, shape2 binomial binom size, prob Cauchy cauchy location, scale chi-squared chisq df exponential exp rate F f df1, df2 gamma gamma shape, scale geometric geom prob hypergeometric hyper m, n, k log-normal lnorm meanlog, sdlog negative binomial nbinom size, prob normal norm mean, sd Poisson pois lambda Student’s t t df uniform unif min, max Weibull weibull shape, scale Per le più comuni distribuzioni di probabilità discrete e continue, sono disponibili i comandi per il calcolo di funzione di densità o probabilità, funzione di ripartizione, quantili e per la generazione di numeri pseudo-casuali: • d(x,) densità (o funzione di probabilità) in x • p(x,) funzione di distribuzione cumulata in x • q(r,) quantile r-esimo • r(N,) generazione casuale di N elementi estratti dalla distribuzione indicata L’aiuto in linea di R è utile per conoscere la sintassi delle funzioni che vi sono già implementate. Per accedere alle pagine di aiuto basta digitare help(nomefunzione) o ?nomefunzione. Per esempio, le funzioni relative alla distirbuzione binomiale sono de- nominate con un prefisso seguito da binom: dbinom() pbinom() qbinom() rbinom() args(dbinom) ## function (x, size, prob, log = FALSE) ## NULL 6
args(pbinom) ## function (q, size, prob, lower.tail = TRUE, log.p = FALSE) ## NULL Verifichiamo che la funzione dbinom fa esattamente quello che fa la funzione che abbiamo costruito noi. Ad esempio, si ripeta il calcolo della probabilità di ottenere 2 volte 6 lanciando 15 volte un dado. dbinom(2,15,1/6) ## [1] 0.272603 Analogamente, riprendendo l’esempio del calcolo della funzione di ripartizione in k = 3 per la binomiale di parametri n = 10, p = 0.2, si verifica che si ottiene lo stesso risultato ottenuto sopra. pbinom(3,10,0.2) ## [1] 0.8791261 Il ritardo dei mezzi di trasporto pubblico è distribuito secondo una variabile casuale X di tipo binomiale con parametri n = 6 e p = 0.55. Calcolare la probabilità di osservare un numero di successi (ritardo accettabile) compreso tra 3 (escluso) e 5. x1
bin2
Bin(n=20, p=0.1) Bin(n=20, p=0.3) 0.30 0.30 0.20 0.20 P(x) P(x) 0.10 0.10 0.00 0.00 0 5 10 15 20 0 5 10 15 20 x x Bin(n=20, p=0.5) Bin(n=20, p=0.9) 0.30 0.30 0.20 0.20 P(x) P(x) 0.10 0.10 0.00 0.00 0 5 10 15 20 0 5 10 15 20 x x par(par2) È interessante provare a usare il comando che genera numeri aleatori. Ad esempio, potremmo generare al computer una sequenza casuale del tipo testa o croce. Generiamo una sequenza di prove Bernoulliane con il comando rbinom() ottenendo 80 valori che sono 1 (testa) o 0 (croce). 9
set.seed(0) #per la riproducibilità dei risultati sim
0.20 probabilità 0.10 0.00 5 10 15 20 x Cosa accade se facciamo variare n e p? Possiamo utilizzare semplici strumenti di statistica descrittiva per valutare graficamente l’accostamento di variabili discrete a modelli teorici di riferimento. Simuliamo, ad esem- pio, dei dati da una Poisson di parametro (media) λ = 5 e confrontiamo la distribuzione dei valori simulati con le probabilità teoriche. Useremo la funzione table() che calcola una tabella di frequenza. # generiamo 500 valori dalla Po(5) n
0.20 0.15 probabilità 0.10 0.05 0.00 0 2 4 6 8 10 12 x Vediamo ora come possiamo usare R per risolvere alcuni semplici esercizi con vari- abili aleatorie geometriche e binomiali negative. La variabile aleatoria Y con legge geo- metrica di parametro p implementata in R assume valori 0, 1, 2, . . . e modella il numero di insuccessi prima del primo successo (tempo di attesa per il primo successo); la sua funzione di probabilità è P(k ) = p(1 − p)k , k = 0, 1, 2 . . . . In R la densità e la funzione di ripartizione di una geometrica di parametro p si ottengono rispettivamente con in comandi dgeom pgeom Nota: Per ottenere la variabile aleatoria X che modella il ”tempo di arrivo del primo successo” (valori 1, 2, 3, ...) è necessario operare la trasformazione X = Y + 1. Ad esempio, se p = 0.2 la probabilità che il primo successo arrivi alla 10-ma prova è data dal comando dgeom(10-1, 0.2), cioè bisogna considerare Y = X − 1. La funzione in R per la probabilità della variabile casuale Binomiale negativa intesa come numero aleatorio di insuccessi che precedono l’r-esimo successo k+r−1 r p(k) = p (1 − p)k , k = 0, 1, 2 . . . r è dnbinom(). 12
Si supponga di voler studiare l’effetto di un trattamento su una certa patologia, pre- sente nel 10% della popolazione. In particolare, si vogliono individuare esattamente 10 individui che presentano la condizione oggetto di studio. a. Qual è la probabilità che il numero di persone intervistate prima di trovare un individuo affetto dalla patologia sia esattamente pari a 8? b. Qual è la probabilità che il numero di persone da intervistare prima di trovare 10 individui affetti dalla patologia sia maggiore di 50? c. Determinare il numero atteso di persone da intervistare per individuare i 10 pazienti da sottoporre al trattamento. #a. tempo d'attesa per il primo 'successo': geometrica con p=0.1 dgeom(8, prob=0.1) #oppure dnbinom(8, size=1, prob=0.1) ## [1] 0.04304672 #b. tempo d'attesa per il decimo 'successo' 1-pnbinom(50, size=10, prob=0.1) ## [1] 0.9269345 #c. media=n/p 10/0.1 ## [1] 100 Esercizi 1. Si calcoli la probabilità che lanciando 50 volte una moneta si ottenga testa più di 45 volte. 2. Carlo acquista un biglietto in ciascuna di 50 diverse lotterie, e in ognuna la probabilità di vittoria è 1/100. Si consideri la v.a. X = ’numero di successi alla lotteria’. Calcolare la probabilità che Carlo risulti vincitore: a) almeno una volta; b) esattamente una volta; c) almeno due volte. Confrontare poi i risultati ottenuti supponendo di fare un’approssimazione della distribuzione di X con una Poisson. 13
3. Qual è la probabilità di ottenere la prima T (testa) dopo tre C (croci) nel lancio di una moneta truccata, tale per cui p = P( T ) = 1/8? 4. Si ottenga la funzione di probabilità della variabile aleatoria Y che rappresenta il numero di carte di cuori che si osservano in una mano di 10 carte estratte da un mazzo che ne contiene 52 (hint: si consideri la funzione dhyper()). Si determinino media e varianza. 5. Si ottenga il grafico della densità e della funzione di ripartizione della variabile casuale X ∼ Ge( p), per p = 0.2. 14
2. Distribuzioni di probabilità continue Esempio: la distribuzione normale. Utilizzando la seguente funzione implementata in R otteniamo il grafico della densità della distribuzione Gaussiana di media uguale a media e deviazione standard sd (valori di default 0 e 1): dnorm(x, mean = 0, sd = 1) Come visto in precedenza, utilizziamo il comando plot(), mentre points() consente di aggiungere punti in un grafico già esistente senza aprire una nuova finestra grafica; l’opzione type="l" serve a unire i punti con una linea disegnando una funzione con- tinua. In alternativa si può utilizzare il comando curve() per ottenere il grafico della densità, e si può sovrapporre una nuova funzione attraverso il parametro add=T. Nell’esempio seguente confrontiamo le densità delle distribuzioni Normali con medie rispettivamente uguali a 0, 1, 3 e deviazioni standard uguali a 1 e 1.5 e 2. x
dnorm(1) # calcola il valore della densità nel punto 1 dnorm(c(-1,0,1)) # calcola il valore della densità nei punti -1, 0 e 1 pnorm(1) # calcola il valore della funzione di ripartizione in 1 qnorm(0.10) # calcola lo 0.10-quantile Come detto, per ogni famiglia si può anche calcolare la funzione di ripartizione e la sua inversa (funzione dei quantili). Cioè, possiamo usare R per risolvere semplici problemi per cui si usano di solito le tavole. Sia X ∼ N (170, 100). Si calcoli a. P( X ≤ 185) e P(165 ≤ X ≤ 190); b. lo scarto interquartile di X. mu
Confrontare i grafici della densità Normale per diversi valori di µ, ad esempio µ = −1, 0, 3 e deviazione standard σ = 1.3. Per gli stessi parametri costruire il grafico della funzione di ripartizione. Abbiamo già accennato al fatto che per molte distribuzioni è possibile estrarre uno o più valori (pseudo) casuali. Questo sarà di grande utilità più avanti per semplici studi di simulazione. Supponiamo di voler estrarre un certo numero di valori casuali da una rettangolare (o uniforme continua) su (0, 1). Quale percentuale di questi dovremmo at- tenderci che si trovi al di sotto del valore 0.4? La risposta è il 40% dei valori. Verifichiamo allora il comportamento dei valori simulati rispetto a ciò che ci attendiamo. #generiamo 500 valori da una R(0,1) n
0.08 0.06 densità 0.04 0.02 0.00 −5 0 5 10 15 20 25 Una seconda strategia, molto utile se i dati disponibili non sono molto numerosi e quindi ha poco senso fare un istogramma, è quella di ottenere la funzione di ripartizione empirica e poi sovrapporne il grafico alla funzione di ripartizione della variabile aleatoria che ha generato i dati. La funzione di ripartizione empirica Fn ( x ) è calcolata sulla base di n osservazioni x1 , . . . , xn di una variabile aleatoria ed è data dal numero di osservazioni minori o uguali del valore x: ∑in=1 I { xi ≤ x } Fn ( x ) = n Per n sufficientemente grande Fn ( x ) è prossima alla funzione di ripartizione F ( x ) della popolazione di provenienza del campione. In R esiste la funzione ecdf() per calcolare una funzione di ripartizione empirica. Di seguito riportato il codice per ottenere il grafico della f.d.r. per un campione di ampiezza 150 da una N (0, 1). La f.d.r. teorica è disegnata in rosso. set.seed(9) edf_norm
ECDF and CDF 1.0 0.8 0.6 Fn(x) 0.4 0.2 0.0 −3 −2 −1 0 1 2 3 x La distribuzione Gamma Si provi a utilizzare l’Help per ottenere informazioni sulle funzioni implementate per la distribuzione gamma: • quali sono i parametri in input? come viene parametrizzata? • quali distribuzioni si ottengono come casi particolari? Usiamo la funzione qgamma() per calcolare la mediana della distribuzione gamma di parametri a = 2 (shape) e s = 1/3 (scale). qgamma(0.5, shape=2, scale=1/3) ## [1] 0.559449 qgamma(0.5, shape=2, rate=3) ## [1] 0.559449 # Attenzione allordine dei valori in input! qgamma(0.5, 2, 1/3) ## [1] 5.035041 19
Proviamo ora a confrontare i grafici delle densità di probabilità della distribuzione gamma 1 f (x) = x a−1 e− x/s , 0 ≤ x < ∞, Γ( a)s a per diverse scelte dei parametri a > 0, s > 0. Si noti che, come visto, in R il secondo parametro in input è rate ed è definito come 1/s. Dunque, ponendo n = a e λ = 1/s si ottiene la parametrizzazione λn n−1 −λx x e 0 ≤ x < ∞, (1) Γ(n) Poniamo, ad esempio, a = 0.75, 1.5, 3.5 (shape) e scegliamo il parametro di scala s in modo tale che la media (a ∗ s) risulti pari a 1. x
curve(dexp(x, rate = 5), ylab = "densità", from = 0, to = 2, main = "Distribuzione esponenziale") curve(dgamma(x, shape=1, rate=5), type="l", add=TRUE, col=3, lty=2, lwd=3) Distribuzione esponenziale 5 4 densità 3 2 1 0 0.0 0.5 1.0 1.5 2.0 x Inoltre anche le due seguenti linee di codice forniscono lo stesso risultato. Perchè? pgamma(2, shape=3/2, rate=1/2) ## [1] 0.4275933 pchisq(2, df=3) ## [1] 0.4275933 Esercizi 1. Sia Z la variabile aleatoria normale standard. Calcolare a. P( Z < 1) b. P( Z > 1) c. P( Z < −1) d. P(0.3 < Z ≤ 0.5) 21
2. Confrontare i grafici della densità normale di media µ = 0 e diversi valori di σ, ad esempio σ = 0.8, 1.3, 1.9. Per gli stessi parametri costruire il grafico della funzione di ripartizione. 3. Si ottenga il grafico della densità di una variabile aleatoria Beta per diverse scelte di parametri α e β. 4. Utilizzando R calcolare: a. la probabilità che una variabile con distribuzione Gaussiana di media 3 e deviazione standar 2.1 assuma dei valori nell’intervallo (2.1, 4.5); che assuma valori minori di 3.5 e valori maggiori di 2.3; b. la probabilità che una variabile aleatoria con distribuzione log-normale di parametri 1 e 0.2 assuma dei valori compresi tra 10 e 11; e che assuma valori maggiori di 9; c. P(5 < X < 8) dove X è una variabile aleatoria esponenziale di media 5. 5. Calcolare il valore della densità log-normale in 0.5 quando il parametro di scala è 1 e quello di forma 4‘e 2. Sovrapporre sullo stesso grafico le funzioni di densità di probabilità della distribuzione log-normale di parametri µ = 1, σ = 1 e µ = 1.5, σ = 0.5. 6. Confrontare in uno stesso grafico le funzione di ripartizione della distribuzione esponenziale di parametro λ = 1, 5, 10. Per ciascuna di queste distribuzioni calcolare i quantili 0.75, 0.8, 0.95. a. Qual è la probabilità che le vendite superino 1000? b. Qual è la probabilità che le vendite stiano fra 1100 e 1300? c. Qual è il valore delle vendite x ∗ che ha probabilità 0.10 di essere super- ato? 22
3. Distribuzione normale bivariata In R è possibile rappresentare graficamente funzioni di due variabili. Ad esempio, le fun- zione persp() nel pacchetto graphics consente di visualizzare cosa accade nello spazio in tre dimensioni. Si consideri la funzione di densità Gaussiana bivariata: 2 x −µ X y − µY 2 ( x −µ X )(y−µY ) 1 − 1 2 + σ −2ρ 2(1− ρ ) σX Y σ σ X Y f ( x, y) = p e , 2πσX σY 1 − ρ2 dove −∞ < x, y < ∞, σX , σY > 0 e ρ ∈ [−1, 1] è il coefficiente di correlazione lineare. Il comando persp() ha una sintassi è simile alla funzione plot() già vista in prece- denza. Gli argomenti sono le coppie di punti ( x, y), che formano un fitto reticolo su un intervallo opportuno, e la funzione f ( x, y), che viene valutata sui punti del reticolo tramite la funzione outer() (si veda ?outer). Fissati i parametri µ X = µY = 0, σX = σY = 1, definiamo la funzione NBiv, che calcola la densità congiunta in funzione del coefficiente di correlazione ρ. NBiv
f(x,y) x y • Si utilizzi la funzione definita sopra per ottenere il grafico della densità nor- male bivariata f ( x, y) di parametri µ X = µY = 0, σX = σY = 1 per X, Y indipendenti. • Si ottengano i grafici della densità normale bivariata per diversi valori dei parametri µ X , µY , σX , σY , ρ. Un piano parallelo al piano ( x, y) interseca orizzontalmente la superficie campanu- lare di una normale bivariata, formando un ellissoide tale per cui, in ogni punto ( x, y) appartenente all’ellisse, la funzione di densità è costante f ( x, y) = k. Vediamo come disegnare in R le curve di livello per diversi valori di ρ. par(mfrow=c(1,3)) #curve di livello rho
contour(xx,yy,z, main="rho=0") rho
Puoi anche leggere