Laboratorio con R Corso di Inferenza Statistica

Pagina creata da Lucia D'Amico
 
CONTINUA A LEGGERE
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