Indice
Le distribuzioni di probabilità in R
In R, per le principali distribuzioni di probabilità sono disponibili le seguenti funzioni:
- funzione di densità d- (ad es. dnorm)
- funzione di ripartizione, o di probabilità continua p- (ad es. pnorm)
- funzione dei quantili q- (ad es. qnorm)
- funzione di generazione di una distribuzione casuale r- (ad es. rnorm)
Quindi: per calcolare le probabilità puntuali o esatte, usiamo le funzioni dbinorm()
, dnorm()
ecc (dove la “d” sta per densità). Per calcolare le aree di probabilità, utilizziamo invece le funzioni di ripartizione, o funzione cumulativa, o di probabilità cumulata p-: pnorm()
, pt()
ecc.
Le funzioni p- e q- (quantili) possono essere usate come classiche tavole delle distribuzioni.
Vedi: pagina di documentazione di queste funzioni in generale.
densità | ripartizione | quantili | random gen | parametri richiesti | |
---|---|---|---|---|---|
binomiale | dbinom | pbinom | qbinom | rbinom | size, prob |
normale | dnorm | pnorm | qnorm | rnorm | — |
t di Student | dt | pt | qt | rt | df (gradi di libertà) |
chi quadrato | dchisq | pchisq | qchisq | rchisq | df |
Poisson | dpois | ppois | qpois | rpois | lambda |
F | df | pf | qf | rf | df1 e df2 |
uniforme | dunif | punif | qunif | runif * | — |
* tipicamente utilizzata come generatore di numeri casuali, ma vedi anche: RNG.
Per le altre distribuzioni, vedi: Probability Distributions in R (Stat 5101, Geyer)
Distribuzione binomiale
Esempio tratto da: R-Tutorial:
Test composto di 12 domande e 5 alternative di risposte di cui solo una corretta. Rappresentiamo la situazione in cui le risposte sono date a caso (prob = 1 su 5, ovvero 0,2).
Probabilità di ottenere precisamente 4 risposte corrette (usiamo la funzione di densità d-):
dbinom(4, size = 12, prob = 0.2)
## [1] 0.1328756
- binom.R
# distribuzione d <- dbinom(1:12, size=12, prob=0.2) # probabilità p <- dbinom(4, size = 12, prob = 0.2) plot(d, pch = 21, bg = "black", xlab="", ylab = "", size = 3) abline(h = p, lty = 2) abline(v = 4, lty = 2) text(1.15, 0.145, "0.133", cex = 0.9) rm(d, p)
Probabilità di ottenere 4 risposte esatte o meno (< = 4) (usiamo la funzione di ripartizione, o probabilità cumulativa, p-):
pbinom(4, size=12, prob=0.2)
## [1] 0.9274445
Probabilità di ottenere 4 o più risposte esatte (>= 4):
pbinom(4, size=12, prob=0.2, lower.tail = FALSE)
# oppure 1 - pbinom(4, size=12, prob=0.2)
## [1] 0.0725555
In tutte le funzioni (p-) l'argomento lower.tail
(coda inferiore) è impostato per default su TRUE
: dato un valore, verrà dunque calcolata la probabilità cumulata (o, per le distribuzioni continue, l'area di probabilità) dei valori inferiori o uguali.
Distribuzione normale
o distribuzione gaussiana, o di Gauss; vedi: Distribuzione normale
Caso 1: test a una coda
Il grafico che segue rappresenta una distribuzione normale, mentre la retta indica il quantile 1,65.
L'area totale della curva è pari a 1. L'area che va da 1,65 in su è pari a 0,05 (q >= 1,65, o coda superiore). L'area restante è dunque pari a 0,95 (q < 1,65, o coda inferiore). Infatti:
# area (p) per q < 1.65 pnorm(q = 1.65)
## [1] 0.9505285
# area per q > 1.65 pnorm(q = 1.65, lower.tail = FALSE)
# oppure 1 - pnorm(q = 1.65)
## 0.04947147
Caso 2: test a due code
Calcoliamo la stessa area, dividendola su due code (come nei test a due code, appunto; il risultato sarà naturalmente sempre 0,95):
# quantile per p = 0.05 qnorm(0.05 / 2)
## [1] -1.959964
# area per q > 1.95 pnorm(q = 1.95, lower.tail = FALSE)
## [1] 0.02558806
# area per q < -1.95 pnorm(q = -1.95)
## [1] 0.02558806
Per avere l'area di probabilità al di sopra del quantile (q >) impostiamo l'argomento lower.tail = FALSE
, oppure usiamo il valore 1-p.
# sottraggo a 1 le due aree 1 - pnorm(q = 1.95, lower.tail = FALSE) - pnorm(q = -1.95)
# oppure 1 - (1 - pnorm(q = 1.95)) - pnorm(q = -1.95)
# oppure, visto che le due code sono uguali: abs(1 - 2*(pnorm(1.95)))
## [1] 0.9488239
Caso 3
Nel grafico che segue, le aree non sono uguali (q = 2 e -1). Voglio conoscere l'area compresa fra questi due quantili:
# sottraggo a 1 le due aree 1 - pnorm(q = 2, lower.tail = FALSE) - pnorm(q = -1)
# oppure 1 - (1 - pnorm(q = 2)) - pnorm(q = -1)
## [1] 0.8185946
t di Student
vedi: Distribuzione t di Student Vedi anche: Test t
Nelle funzioni relative, per la distribuzione t di Student bisogna indicare i gradi di libertà:
# q per p = 0.05 qt(0.05, df = 10) ## [1] -1.812461 <code rsplus> # area per q < 1.8 pt(q = 1.8, df = 10)
## [1] 0.9489739
# area per q > 1.8 pt(q = 1.8, df = 10, lower.tail = FALSE)
## [1] 0.05102612
Chi quadrato
vedi Distribuzione chi quadrato
Anche in questo caso, bisogna indicare i gradi di libertà della distribuzione (attenzione: non ha valori negativi):
# area per q < 25 pchisq(q = 25, df = 10)
## [1] 0.9946545
# area per q > 25 pchisq(q = 25, df = 10, lower.tail = FALSE)
# oppure 1 - pchisq(q = 25, df = 10)
## [1] 0.005345505