giovedì 10 gennaio 2019

Statistiche elementari parametriche

Siamo al terzo passo delle valutazioni che è sempre necessario effettuare nell'ambito di un percorso logico che prevede, per il calcolo delle statistiche elementari di una singola variabile (analisi univariata):
→ esecuzione dei test di normalità (gaussianità) per valutare se i dati seguono una distribuzione gaussiana;
→ calcolo delle statistiche elementari parametriche (media, deviazione standard, varianza, quantili parametrici) se i dati seguono una distribuzione gaussiana;
→ calcolo delle statistiche elementari non parametriche (mediana, deviazione assoluta mediana o MAD, quartili e altri quantili non parametrici) se i dati non seguono una distribuzione gaussiana.

Si tratta del passo conclusivo per la variabile altezza (espressa in cm) rilevata in 202 atleti australiani, in quanto con i test di normalità abbiamo stabilito che la variabile è distribuita in modo gaussiano: questa era la sintesi grafica dei risultati.



Ora copiate questo script, incollatelo nella Console di R e premete ↵ Invio:

# STATISTICHE ELEMENTARI PARAMETRICHE 
#
library(DAAG) # carica il pacchetto DAAG che include il set di dati ais
mydata <- as.matrix(ais[c(10)]) # ci interessa la sola colonna con l'altezza
#
# statistiche elementari parametriche 
#
min(mydata) # valore minimo
mean(mydata) # media 
max(mydata) # valore massimo
range(mydata) # range 
max(mydata)-min(mydata) # campo di variazione
var(mydata) # varianza
sd(mydata) # deviazione standard
(sd(mydata)/mean(mydata))*100 # coefficiente di variazione CV %
#
# confronta media e mediana
#
media <- mean(mydata) # calcola la media
mediana <- median(mydata) # calcola la mediana
data.frame(media, mediana) # le mette a confronto
#
# confronta deviazione standard e MAD
#
ds <- sd(mydata) # calcola la deviazione standard
mad <- mad(mydata) # calcola la Median Absolute Deviation (about the median) o MAD
data.frame(ds, mad) # le mette a confronto
#
# confronta quantili parametrici e non parametrici
#
qpar <- round(qnorm(c(seq(0.025, 0.975, 0.025)), mean=mean(mydata), sd=sd(mydata)), digits=2) # calcola i quantili parametrici
qnon <- round(quantile(mydata, probs=seq(0.025, 0.975, 0.025)), digits=2) # calcola i quantili non parametrici
dper <- abs(round(100*(qpar-qnon)/((qpar+qnon)/2), digits=2)) # calcola la differenza in percentuale
data.frame(qpar, qnon, dper) # li mette a confronto
#

Non avrebbe senso ripetere l'analisi esplorativa dei dati, i test di normalità e la sintesi grafica dei risultati - per questi si rimanda agli script riportati nel percorso logico indicato all'inizio. Per cui qui ci limitiamo a calcolare le usuali statistiche elementari parametriche, riportando per confronto i risultati delle statistiche elementari non parametriche corrispondenti. 

Dopo avere caricato il pacchetto DAAG [1] con la tabella ais, la variabile che ci interessa, contenuta nella colonna 10 della tabella ais viene assegnata (<-) all'oggetto mydata, sul quale sono calcolate le statistiche elementari parametriche con le funzioni:
→ min() per riportare il valore minimo osservato;
→ mean() per calcolare la media;
→ max() per riportare il valore massimo osservato;
→ range() per calcolare il range, che qui è correttamente;
→ max(mydata)-min(mydata) per calcolare il campo di variazione, talora indicato (impropriamente) come "range";
→ var() per calcolare la varianza,
→ sd() per calcolare la deviazione standard;
→ e con l'espressione (sd(mydata)/mean(mydata))*100 che calcola il coefficiente di variazione percentuale.

> min(mydata) # valore minimo
[1] 148.9
> mean(mydata) # media 
[1] 180.104
> max(mydata) # valore massimo
[1] 209.4
> range(mydata) # range 
[1] 148.9 209.4
> max(mydata)-min(mydata) # campo di variazione
[1] 60.5
> var(mydata) # varianza
         ht
ht 94.76038
> sd(mydata) # deviazione standard
[1] 9.734494
> (sd(mydata)/mean(mydata))*100 # coefficiente di variazione CV %
[1] 5.404931

Sono poi messe a confronto la media con la mediana

> media <- mean(mydata) # calcola la media
> mediana <- median(mydata) # calcola la mediana
> data.frame(media, mediana) # le mette a confronto
    media mediana
1 180.104   179.7

la deviazione standard con la MAD [2]

> ds <- sd(mydata) # calcola la deviazione standard
> mad <- mad(mydata) # calcola la Median Absolute Deviation (about the median) o MAD
> data.frame(ds, mad) # le mette a confronto
        ds     mad
1 9.734494 8.96973

e i quantili parametrici con i quantili non parametrici, riportando nell'ultima colonna la differenza percentuale tra i due

> qpar <- round(qnorm(c(seq(0.025, 0.975, 0.025)), mean=mean(mydata), sd=sd(mydata)), digits=2) # calcola i quantili parametrici
> qnon <- round(quantile(mydata, probs=seq(0.025, 0.975, 0.025)), digits=2) # calcola i quantili non parametrici
> dper <- abs(round(100*(qpar-qnon)/((qpar+qnon)/2), digits=2)) # calcola la differenza in percentuale
> data.frame(qpar, qnon, dper) # li mette a confronto
        qpar   qnon dper
2.5%  161.02 158.98 1.28
5%    164.09 163.96 0.08
7.5%  166.09 167.35 0.76
10%   167.63 169.17 0.91
12.5% 168.91 170.36 0.85
15%   170.01 171.40 0.81
17.5% 171.01 172.22 0.71
20%   171.91 172.76 0.49
22.5% 172.75 173.52 0.44
25%   173.54 174.00 0.26
27.5% 174.29 174.18 0.06
30%   175.00 175.00 0.00
32.5% 175.69 175.73 0.02
35%   176.35 176.07 0.16
37.5% 177.00 177.30 0.17
40%   177.64 177.94 0.17
42.5% 178.26 178.44 0.10
45%   178.88 178.99 0.06
47.5% 179.49 179.60 0.06
50%   180.10 179.70 0.22
52.5% 180.71 180.10 0.34
55%   181.33 180.36 0.54
57.5% 181.94 181.00 0.52
60%   182.57 182.66 0.05
62.5% 183.21 183.06 0.08
65%   183.85 183.90 0.03
67.5% 184.52 184.67 0.08
70%   185.21 185.17 0.02
72.5% 185.92 185.60 0.17
75%   186.67 186.18 0.26
77.5% 187.46 187.28 0.10
80%   188.30 188.62 0.17
82.5% 189.20 189.18 0.01
85%   190.19 190.67 0.25
87.5% 191.30 191.94 0.33
90%   192.58 192.79 0.11
92.5% 194.12 193.86 0.13
95%   196.12 195.17 0.49
97.5% 199.18 197.48 0.86

Le differenze trascurabili tra statistiche elementari parametriche e statistiche elementari non parametriche riflettono il fatto che nel caso di una distribuzione perfettamente gaussiana [3] le due coincidono - è quindi assolutamente lecito impiegare le seconde al posto delle prime. Mentre il contrario è sbagliato - nel caso di una distribuzione non gaussiana le statistiche elementari parametriche non devono essere impiegate.

Lo script può essere riutilizzato molto semplicemente, assegnando (<-) all'oggetto mydata i propri dati.


----------

[1] Vedere il post Il set di dati ais nel quale trovate anche come caricare i dati della tabella senza impiegare il pacchetto DAAG

[2] La Median Absolute Deviation about median o MAD ovvero la deviazione assoluta mediana (dalla mediana) è l'equivalente non parametrico della deviazione standard. Vedere: Rousseeuw PJ, Croux C. Alternatives to the Median Absolute Deviation. Journal of the American Statistical Association 88 (424), 1273-1283, 1993. URL consultato il 04/01/2019: https://goo.gl/4Rh53b

[3] Un esempio di dati distribuiti in modo perfettamente gaussiano è riportato nel post La distribuzione gaussiana.

Nessun commento:

Posta un commento