Intervalli di fiducia per media e varianza: cosa sono e come calcolarli con Python e Scipy

intervalli di fiducia con Python

Gli intervalli di fiducia (o intervalli di confidenza) sono uno dei temi più importanti della statistica inferenziale: grazie ad essi possiamo stimare i parametri statistici di un’intera popolazione analizzando semplicemente i dati di un suo campione ristretto. A differenza delle stime puntuali, con gli intervalli di fiducia otterremo un range di valori e quindi una stima più realistica di cosa può accadere per l’intera popolazione.

Dopo aver chiarito meglio il passaggio da stima puntuale a stima intervallare, vedremo come costruire gli intervalli di confidenza per la media e la varianza di una popolazione normale. Chiariremo meglio cosa si intende per livello di fiducia, un concetto troppe volte mal interpetrato e calcoleremo gli intervalli con l’ausilio del linguaggio Python e della sua libreria Scipy.

Stima puntuale e stima intervallare

Supponiamo di estrarre un campione di cento individui da una popolazione totale di oltre duemila persone e di misurarne una particolare variabile quantitativa come l’altezza. A partire dai cento dati a disposizione, potrei calcolare gli usuali indici di statistica descrittiva come la media aritmetica e la varianza.

Nel caso il mio obiettivo sia semplicemente la descrizione dei cento dati del campione, potrei considerare già concluso il mio lavoro! Ma se volessi cercare di descrivere anche l’intera popolazione, allora dovrei utilizzare delle tecniche di stima. Il primo metodo più semplice è quello di dare delle stime puntuali, cioè costituite da un solo valore. In particolare potrei:

  • stimare che la media dell’altezza della popolazione sia uguale alla media riscontrata nel campione;
  • stimare che la varianza dell’altezza della popolazione sia un po’ più grande della varianza riscontrata nel campione.

Per quel che riguarda la varianza, è logico supporre che avendo a disposizione nel campione soltanto un numero limitato di dati, non abbia colto tutta la variabilità presente nella popolazione. Tecnicamente quello che si fa è moltiplicare il valore della varianza per il numero n/(n-1), dove n è la numerosità del campione.

Analizzando velocemente la formula, stiamo moltiplicando la varianza di partenza per una frazione il cui numeratore è leggermente superiore del denominatore. Tale frazione sarà dunque un numero di poco superiore a 1 e quindi il risultato del prodotto sarà di poco superiore al primo fattore.

L’affidabilità delle stime puntuali è però molto limitata, si tratta di un solo numero che è troppo influenzato dalla possibile scelta del campione. Vi faccio un esempio, quale tra queste due affermazioni pensate sia più attendibile, considerando che abbiamo misurato l’altezza solo di 100 su oltre 2000 persone?

  • “stimiamo che l’altezza media della popolazione sia 165 centimetri”
  • “stimiamo che l’altezza media della popolazione sia tra 162 e 168 centimetri”

La secondo frase è da un lato meno ambiziosa, ma dall’altro sicuramente più affidabile proprio perché racchiude un intero range di possibilità. Occorrerà comunque trovare un compromesso, in quanto se il range è troppo ampio l’affermazione statistica diventa priva di importanza. Pensiamo ad esempio alla frase:

“stimiamo che l’altezza media della popolazione sia tra 130 e 210 centimetri”

Vi anticipo subito che è impossibile ottenere un intervallo certo, corretto al cento per cento. Per quanto la procedura di campionamento possa essere corretta, potrei essere semplicemente sfortunato e prendere nel mio campione le cento persone più basse o più alte, ottenendo così stime completamente distorte.

Tuttavia, sotto l’ipotesi che la popolazione di partenza abbia una distribuzione normale, possiamo elaborare delle tecniche di stima intervallare il cui grado di fiducia può essere quantificato matematicamente, nel prossimo paragrafo vedremo come!

Intervallo di fiducia per la media di una popolazione normale

L’idea per costruire una stima intervallare della media consiste nel combinare questi quattro ingredienti:

  • il valore della stima puntuale
  • la numerosità del campione
  • la varianza dei dati
  • il livello di fiducia che ripongo sull’intervallo

Combinando questi quattro valori ottengo la formula per l’estremo sinistro dell’intervallo

Stima della media – coefficiente legato alla fiducia * stima deviazione standard / radice quadrata della numerosità del campione

Per l’estremo destro mi basterebbe sostituire il segno meno con il più. Il coefficiente di fiducia è collegato alla numerosità del campione e alla distribuzione di Student (https://it.wikipedia.org/wiki/Distribuzione_t_di_Student).

Si può dimostrare matematicamente che, se la popolazione di partenza ha distribuzione normale, scegliendo adeguatamente il coefficiente è possibile quantificare la percentuale di campioni tra quelli della numerosità fissata che con questo metodo portano alla costruzione di un intervallo corretto.

Ad esempio, scegliere un coefficiente per un grado di fiducia del 95%, vuol dire che dal 95% di tutti i possibili campioni con quella stessa numerosità si costruirà un intervallo che contiene effettivamente la media della popolazione. Non sappiamo se la media sarà esattamente al centro, se vicino all’estremo sinistro o all’estremo destro, ma comunque sarà all’interno dell’intervallo costruito.

Quando effettuiamo un’analisi statistica avremo a disposizione un solo campione, nessuno potrà dirci se fa parte o meno del 95% che porta ad un intervallo corretto. In questo senso si parla allora di 95% come livello di fiducia, invece che di probabilità.

Implementazione dell’intervallo di fiducia sulla media in Python

Vediamo come costruire nel concreto l’intervallo di fiducia sulla media di una popolazione normale con la libreria scipy del linguaggio Python. Importiamo preliminarmente dal mio Github un campione di dati riguardante la temperatura di una serie di città.

import pandas as pd
data = "https://raw.githubusercontent.com/iantomasinicola/Esercizi/main/Dati_test_normalita.csv"
d1 = pd.read_csv(data)

Verifichiamo la normalità della popolazione di partenza come mostrato in questo mio articolo https://www.yimp.it/distribuzione-normale/. Studiamo allora il codice Python per costruire un intervallo di fiducia sulla media della popolazione con livello di fiducia del 95%. Per prima cosa calcoliamo la media, la stima della deviazione standard e la numerosità:

media = d1["Temperatura"].mean()
s = d1["Temperatura"].std()
n = len(d1["Temperatura"])

Per ottenere l’intervallo di fiducia possiamo utilizzare il metodo di scipy stats.t.interval passandogli in input i seguenti argomenti:

  • confidence pari al livello di fiducia richiesto (0.95)
  • df pari alla numerosità del campione meno 1
  • loc pari alla media
  • scale pari al rapporto tra la stima della deviazione standard e la radice quadrata della numerosità del campione
from scipy import stats
import numpy as np
stats.t.interval(confidence = 0.95, 
                       df = n-1,
                       loc = media, 
                       scale = s / np.sqrt(n))

Otteniamo così l’intervallo (18.08, 20.21). Se il nostro campione fa parte del 95% “di campioni corretti” tra tutti quelli possibili composti da cento individui, allora all’interno di questo intervallo si troverà la media della popolazione!

corso di analisi dei dati
Visita la mia piattaforma didattica realizzata con l’obiettivo di creare un percorso unico e completo nella formazione per Data Analyst.

Intervallo di fiducia per la varianza

Vediamo ora come calcolare l’intervallo di fiducia per la varianza di una popolazione normale. Si tratta di un intervallo di fiducia non utilizzato spesso, sia perché non si trovano molte applicazioni pratiche e sia perché è davvero molto sensibile agli scostamenti dall’ipotesi di normalità. Anche in questo caso gli ingredienti sono:

Iniziamo a calcolare questi valori sullo stesso dataset precedente per costruire una stima intervallare della varianza con un grado di fiducia del 95%

s_quadro = d1["Temperatura"].var()
n = len(d1[["Temperatura"]])
den_1 = stats.chi2.ppf(0.975, n-1 )
den_2 = stats.chi2.ppf(0.025, n-1)

Le variabili den_1 e den_2 contengono i coefficienti legati alla distribuzione Chi quadrato, che utilizzeremo per calcolare i due estremi dell’intervallo. Osserviamo che scegliamo i valori di 0.975 e 0.025 in modo tale che la percentuale “rimanente” sia effettivamente del 5%.

A questo punto possiamo calcolare gli estremi dell’intervallo di fiducia in questo modo:

estremo_1 = s_quadro * (n-1) / den_1
estremo_2 = s_quadro * (n-1) / den_2

Otteniamo così i valori 22.06 e 38.61. In questo caso l’intervallo non è simmetrico rispetto alla stima puntuale pari a 28.62, ma più sbilanciato a destra.

Estraendo le radici quadrate dei due estremi, otterremo un intervallo di fiducia per la deviazione standard della popolazione.

Continua a imparare

Torna in alto
Torna su