statistics

La distribuzione normale

Il concetto di distribuzione normale è uno degli elementi chiave nel campo delle ricerche statistiche. Molto spesso infatti i dati che raccogliamo mostrano delle caratteristiche tipiche, talmente tipiche da chiamare la distribuzione risultante semplicemente… “normale”.
In questo post vedremo le caratteristiche di questa distribuzione, oltre a sfiorare qualche altro concetto di notevole importanza come:



Abbiamo visto in post precedenti esempi di distribuzioni di probabilità per variabili discrete: ad esempio la Binomiale, la Geometrica, la distribuzione di Poisson

La distribuzione normale è una distribuzione di probabilità continua; anzi, è la più famosa e la più usata delle distribuzioni di probabilità continue. Ricordiamo al volo che una variabile continua può assumere un numero infinito di valori entro ogni intervallo dato.

La normale ha forma di campana, è detta anche gaussiana – dal nome del celebre matematico che ha fornito un contributo fondamentale a questa materia – ed è simmetrica rispetto alla sua media. Si estende indefinitamente in entrambe le direzioni, ma la maggior parte dell’area – cioè la probabilità – è raccolta attorno alla media.
La curva appare cambiare di forma in due punti, che chiamiamo punti di inflessione, e che coincidono con una distanza di una deviazione standard in più e in meno della media.

Genero con due righe in R la caratteristica forma di questa distribuzione:

Visualizzare la “normalità” dei nostri dati

R offre diversi strumenti per valutare lo scostamento di una distribuzione da una normale teorica.

Uno di questi è la funzione qqnorm(), che crea un grafico della distribuzione, in funzione dei quantili teorici normali (qq=quantile-quantile):

qqnorm(variabile)
qqline(variabile)

Lo verifico con un esempio, generando una distribuzione normale:

x<- rnorm(100,5,10)
 qqnorm(x)
 qqline(x)

il risultato è questo, e come si vede abbiamo la conferma visiva della sostanziale normalità della distribuzione:

Trasformare i dati

Quando l’asimmetria di una distribuzione dipende dal fatto che una variabile si estende su svariati ordini di grandezza, abbiamo una possibilità agevole per rendere la nostra distribuzione simmetrica e simile ad una normale: trasformare la variabile nel suo logaritmo:

qqnorm(log10(variabile))
qqline(log10(variabile))

ma come calcolo in questo caso la tendenza centrale?

Se uso qualcosa tipo mean(log10(variabile)) non ho più l’unità di misura…
Per recuperarla posso usare l’antilogaritmo, cioè calcolo:
10^risultato.
Bisogna però sempre tenere a mente che questa è la media geometrica.


Bene: abbiamo il nostro set di dati e abbiamo verificato che la distribuzione è ragionevolmente simile a una normale. E’ giunto il momento di trovare delle applicazioni pratiche per mettere a frutto le nostre nuove conoscenze!  

La regola empirica

La regola empirica è uno dei pilastri della statistica. Senza addentrarci troppo nei dettagli teorici, il succo è questo:
le percentuali dei dati di una distribuzione normale compresi tra 1, 2 e 3 deviazioni standard dalla media sono approssimativamente il 68%, il 95% e il 99,7%. E’ una regola di tale importanza e uso comune che è meglio riscriverla con maggiore enfasi…

LA REGOLA EMPIRICA
Le percentuali dei dati di una distribuzione normale compresi tra
1, 2 e 3 deviazioni standard dalla media
sono approssimativamente
il 68%, il 95% e il 99,7%.

Standardizzare è bello (e utile…). Lo Z score.

La distribuzione normale standardizzata è una distribuzione normale con media nulla e scarto quadratico medio (o deviazione standard, come dicono gli anglosassoni *) unitario.

* nel blog uso i due termini “scarto quadratico medio” e “deviazione standard” in maniera indifferente…poichè esprimono lo stesso concetto e sono entrambi di uso comune.

Cioè con:

\( \mu=0 \\ \sigma=1 \\ \)

Qualsiasi distribuzione normale può essere convertita in una distribuzione normale standardizzata, ponendo la media uguale a zero ed esprimendo gli scarti dalla media in unità di scarti quadratici medi, quello che gli anglosassoni molto efficacemente chiamano Z-score.

Uno Z-score misura la distanza che intercorre tra un dato e la media, usando le deviazioni standard. Quindi, uno Z-score può essere positivo (l’osservazione è sopra la media) o negativo (sotto la media). Uno Z-score di -1 indicherà, ad esempio, che la nostra osservazione cade una deviazione standard al di sotto della media. Ovviamente, uno Z-score pari a 0 equivale alla media.

Lo Z-score è un valore “puro”, quindi ci fornisce un “metro di misura” di straordinaria efficacia. In pratica, è un indice che mi consente di comparare valori tra diverse distribuzioni (purchè “normali”, ovviamente), usando un “metro” standard.

Il calcolo, come abbiamo visto, è quasi banale: semplicemente divido la deviazione per lo scarto quadratico medio:

\( Z = \frac{Deviazione}{Scarto\ Quadratico\ Medio} \\ \\ \)

In queste condizioni, sappiamo che circa il 68% dell’area sottostante la curva normale standardizzata è compreso tra 1 scarto quadratico dalla media, il 95% entro due, il 99.7% entro tre.
Cioè:

\( 68.26\% \ entro\ \mu \pm \sigma \\ 95.4\% \ entro\ \mu \pm 2\sigma \\ 99.74\% \ entro\ \mu \pm 3\sigma \\ \\ \)

Per trovare le probabilità – cioè le aree – per i problemi che implicano la distribuzione normale, si converte il valore X nel corrispondente Z-score:

\( Z = \frac{X-\mu}{\sigma} \\ \\ \)

Quindi si cerca il valore di Z nelle tabelle e si trova la probabilità sottostante la curva compresa tra la media e Z.

Sembra difficile? E’ facilissimo, e divertentissimo. E con R, o con la TI-83, è davvero un giochetto da ragazzi!

L’importanza dello Z-score risiede anche (e soprattutto) nella sua estrema utilità pratica: consente infatti di poter raffrontare utilmente osservazioni tratte da popolazioni con differenti medie e deviazioni standard, usando una scala comune. E’ per questo che il processo si chiama standardizzazione: consente infatti di comparare osservazioni tra variabili che hanno differenti distribuzioni. Usando la tabella (o la calcolatrice o il pc) possiamo rapidamente calcolare le probabilità e i percentili, e identificare eventuali valori estremi (outliers).

Poichè sigma è positivo, Z sarà positivo se X>mu e negativo se X<mu. Il valore di Z rappresenta il numero di deviazioni standard del valore sopra o sotto la media.

Facciamo un esempio al volo

Ho delle osservazioni di un qualche fenomeno che hanno valore medio 65:

\( \mu = 65 \\ \)

La deviazione standard è 10:

\( \sigma = 10 \\ \)

E osservo un valore di 81 :

\( X = 81 \\\\ \)

Il valore dello Z-score si calcola in un attimo:

\( Z= \frac{X – \mu}{\sigma} = \frac{81 – 65}{10} = \frac{16}{10} = 1.6 \\ \)

Il valore osservato, su scala standard, cade 1,6 deviazioni standard sopra la media. Per capire dunque quale percentuale di osservazioni risultano sotto al valore osservato, mi basterà prendere la tabella:

la tabella degli Z scores in azione…

Come si nota, incrociando il mio valore z: 1,6 al livello dello 0,05 trovo il valore 0,9505, che equivale a dire che il 95,05% dei valori osservati è inferiore a 81.

Ovviamente, avrei potuto ricavare il valore in R senza usare la tabella, semplicemente con:

pnorm(1.6)

Per chi usa Python:

from scipy.stats import norm

p = norm.cdf(1.6)
print(p)

E ora la parte divertente: facciamo un po’ di esempi pratici!

Esempio 1

Qual è la probabilità di un evento con Z-score < 2.47 ?

Prendo in mano la tabella e vedo che 2.47 = 0.9932.

Quindi, il 99.32% dei valori si trova entro 2.47 scarti quadratici medi dalla media.

Rappresentando graficamente la situazione, quello che mi viene chiesto è di trovare l’area della superficie grigia, cioè l’area sottesa dalla curva a sinistra del punto con ascissa Z=2.47:

In R il calcolo è semplicissimo. Mi basta digitare:

pnorm(2.47)

La funzione pnorm() infatti ci consente di ottenere la curva della probabilità cumulativa della normale. In altri termini, ci consente di calcolare l’area relativa (ricordando che l’area totale è 1) sotto la curva, dal valore dato di Z fino a +infinito oppure -infinito.

Di default, R usa la coda inferiore, cioè trova l’area da -infinito a Z.
Per computare l’area tra Z e +infinito mi basterà settare lower.tail=FALSE.

Esempio 2

Qual è la probabilità di un valore Z-score > 1.53 ?

Dalla tabella trovo il valore 0.937, quindi deduco che il 93,7% dei valori sono sotto a Z-score 1.53.
Allora, per trovare quanti sono sopra: 100-93.7 = 6.3%

In R mi basta digitare:

1 - pnorm(1.53)

Esempio 3

Qual è la probabilità di “pescare” un valore casuale di meno di 3.65, data una distribuzione normale con media = 5 e deviazione standard = 2.2 ?

Troviamo subito lo Z-score per il valore 3.65:

\( Z= \frac{3.65 – 5}{2.2} = \frac{-1.35}{2.2} \simeq -0.61 \\ \\ \)

Cerchiamo questo valore nella tabella: 0.2709. Dunque, ci sono 27.09% probabilità che un valore minore di 3.65 “esca” da una selezione casuale con media 5 e deviazione standard 2.2.

Se volessi usare una calcolatrice scientifica, con la TI83 mi basterebbe digitare:

normalcdf(-1e99,3.65,5,2.2)

Mentre con una Casio fx mi basterebbe seguire questi passi:

MENU
STAT
DIST
NORM
Ncd
Data: Variable
Lower: -100
Upper: 3.65
sigma: 2.2
mu: 5

EXECUTE

Il risultato ovviamente è leggermente diverso da quello ricavato dalla tabella, perchè nella tabella ho arrotondato il valore della divisione (3.65-5)/2.2 a -0.61, tralasciando la restante parte decimale…

Esempio 4 : trovare le probabilità tra 2 Z-scores

Questo è il caso più divertente di tutti. In realtà, basta trovare le 2 probabilità e sottrarre…

Qual è la probabilità associata con un valore tra Z=1.2 e Z=2.31 ?

Penso alla mia curva normale: prima trovo l’area a sinistra di Z2. Poi trovo l’area a sinistra di Z1. Quindi sottraggo i due valori per ricavare l’area tra i due, che è la probabilità cercata.

Oppure uso R e scrivo semplicemente:

pnorm(2.31)-pnorm(1.2)

e il risultato, in questo caso 10.46%, è trovato in un momento!

Un attimo, ma se volessi calcolare il valore di Z a partire da una probabilità cumulativa? Basta usare la funzione inversa di pnorm() che in R è qnorm().
Ad esempio, per trovare il valore di Z con un area 0.5, digito:

qnorm(0.5)

e otterrò il risultato, che chiaramente sarà 0 (la media di una normale standardizzata ha valore 0 e la media divide la normale in due aree uguali…).

Per chi usa Python il codice è:

from scipy.stats import norm

q = norm.ppf(0.5)
print(q)

La diseguaglianza di Chebyshev

La caratteristica più importante della disuguaglianza di Chebishev è che si applica ad ogni distribuzione di probabilità di cui siano noti il valore medio e la deviazione standard.

Avendo a che fare con una distribuzione di tipo ignoto oppure certamente non normale, la diseguaglianza di Chebyshev ci viene in aiuto, affermando che:

Se assumiamo un valore k reale positivo, la probabilità che la v.c. X abbia un valore compreso tra:

\( \mu \ – \ k \sigma \ e \ \mu \ + \ k \sigma \\\)

è maggiore di:

\( 1 – \frac{1}{k^{2}} \\ \)

In altri termini: supponiamo di conoscere la media e la deviazione standard di un insieme di dati, che non seguono una distribuzione normale. Possiamo dire che per ogni valore k >0 almeno una frazione (1-1/k2) dei dati cade nell’intervallo compreso tra :

\( \mu \ – \ k \sigma \ e \ \mu \ + \ k \sigma \\\)

Come sempre, un esempio è utile a chiarire il tutto. Prendo un dataset di esempio…i salari medi pagati dalle squadre di baseball USA nel 2016:

TeamSalary ($M)
Arizona Diamondbacks91,995583
Atlanta Braves77,073541
Baltimore Orioles141,741213
Boston Red Sox198,328678
Chicago Cubs163,805667
Chicago White Sox113,911667
Cincinnati Reds80,905951
Cleveland Indians92,652499
Colorado Rockies103,603571
Detroit Tigers192,3075
Houston Astros89,0625
Kansas City Royals136,564175
Los Angeles Angels160,98619
Los Angeles Dodgers248,321662
Miami Marlins64,02
Milwaukee Brewers51,2
Minnesota Twins99,8125
New York Mets128,413458
New York Yankees221,574999
Oakland Athletics80,613332
Philadelphia Phillies91,616668
Pittsburgh Pirates95,840999
San Diego Padres94,12
San Francisco Giants166,744443
Seattle Mariners139,804258
St, Louis Cardinals143,514
Tampa Bay Rays60,065366
Texas Rangers158,68022
Toronto Blue Jays131,905327
Washington Nationals142,501785

La media risulta: 125.3896
La deviazione standard: 48.64039

La disuguaglianza di Chebyshev

\( 1 – \frac{1}{k^{2}} \\ \)

ci dice che almeno il 55.56% è in questo caso nell’intervallo:

\( (\mu − 1.5\sigma, \mu + 1.5\sigma)= (52.42902, 198.3502) \\ \\ \)
paolo

Recent Posts

Guida ai Test Statistici per analisi A/B

I test statistici sono strumenti fondamentali per l’analisi dei dati e la presa di decisioni informate. Scegliere…

8 mesi ago

Come usare gli Alberi Decisionali per classificare i dati

Gli Alberi Decisionali sono un tipo di algoritmo di apprendimento automatico che utilizza una struttura…

10 mesi ago

L’algoritmo di Discesa del Gradiente spiegato semplice

Immaginiamo di voler trovare il percorso più veloce per raggiungere una destinazione in auto. Si…

1 anno ago

La Discesa del Gradiente: un nuovo studio mette in discussione un assunto base sull’ottimizzazione

Nel 1847, il matematico francese Augustin-Louis Cauchy stava lavorando su calcoli astronomici, quando ideò un…

1 anno ago

Il Metodo Montecarlo spiegato in modo semplice e applicato a casi reali

La simulazione Monte Carlo è un metodo utilizzato per quantificare il rischio associato a un…

2 anni ago

La distribuzione ipergeometrica

Abbiamo visto che la distribuzione binomiale si basa sull’ipotesi di una popolazione infinita N, condizione che si…

2 anni ago