Ricerca Sociale con R

Una wiki per l'analisi dei dati con R

Strumenti Utente

Strumenti Sito


Il Laboratorio di Analisi dei Dati con R, dell'Università di Teramo su piattaforma Meet, inizia il 9 aprile 2021 - Iscrizione - email
r:test_statistici:distribuzioni_di_probabilita

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

vedi 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)
Distribuzione binomiale

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.

binom_r.R
# distribuzione
dr <- pbinom(1:12, size=12, prob=0.2)
 
# probabilità
p <- pbinom(4, size=12, prob=0.2) 
 
plot(dr, 
     pch = 21, bg = "black", 
     xlab="", ylab = "")
abline(h = p, lty = 2)
abline(v = 4, lty = 2)
text(1.07, 0.96, "0.93", cex = 0.9)
 
rm(dr, p)
Binomiale: funzione di ripartizione

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.

Distribuzione normale - caso 1
normale.R
curve(dnorm(x), -3, +3,
       ylab = "", xlab = "")
grid()
abline(v = 1.65, lty = 2)

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
Normale - funzione di ripartizione
normale_r.R
# probabilita
p <- pnorm(q = 1.65)
 
curve(pnorm(x), -3, +3,
       ylab = "", xlab = "")
abline(h = p, lty = 2)
abline(v = 1.65, lty = 2)
text(-2.9, 0.92, "0.95", cex = 0.9)
text(1.35, 0, "1.65", cex = 0.9)
 
rm(p)

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:

Distribuzione normale - caso 3
# 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

# 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):

chisq_d.R
curve(dchisq(x, df = 10), 0, 30,
      ylab = "", xlab = "")
grid()
abline(v = 25, lty = 2)
Distribuzione del chi quadrato
# 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
r/test_statistici/distribuzioni_di_probabilita.txt · Ultima modifica: 25/09/2021 13:13 da admin