# Vi sono vari modi per definire la asimmetria di una distribuzione di dati, che
# nella letteratura internazionale viene chiamata skewness. Chi voglia approfondire
# l'argomento veda en.wikipedia.org/wiki/Skewness o mathworld.wolfram.com/Skewness.html.
# Il più usato (dovuto a Pearson e Fisher, come altri indici di asimmetria), a cui in
# genere ci riferisce quando di parla di "skewness", è pari a  M(((X–M(X))^3)/sigma^3:
# è la media dello scarto cubico (dalla media) divisa per il cubo dello s.q.m. (in modo
# da "astrarre" dalla dispersione dei dati). Se i dati sono simmetrici rispetto alla
# media l'indice è nullo; se hanno una coda verso destra è positivo; se l'hanno verso
# sinistra l'indice è negativo. Può andare da -∞ a ∞. Qualche esempio:
V <- function(dati) mean((dati-mean(dati))^2) # la varianza
sk <- function(dati) sum((dati-mean(dati))^3/sqrt(V(dati))^3)/length(dati)
x <- c(1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5)
# o, equivalentemente:
x <- c(1,rep(2,2),rep(3,4),rep(4,9),rep(5,16))
y <- -x; y
 [1] -1 -2 -2 -3 -3 -3 -3 -4 -4 -4 -4 -4 -4 -4 -4 -4 -5 -5 -5 -5 -5 -5 -5 -5
[25] -5 -5 -5 -5 -5 -5 -5 -5
# Rappresentiamo i dati con istogrammi centrati in 1, 2, ..., affiancati
dev.new(width=4,height=4,xpos=50,ypos=1); hist(x,seq(-0.5,5.5,1))
dev.new(width=4,height=4,xpos=300,ypos=1); hist(y,seq(-5.5,0.5,1))
 
# I coefficienti di asimmetria
sk(x); sk(y)
[1] -1.243813
[1] 1.243813
# Tra i vari indici di asimmetria usati vi è quello di Bowley:
# ((Q3-Q2)-(Q2-Q1))/(Q3-Q1)  dove Qi è l'i-mo quartile (Q2 è la mediana)
# Il significato geometrico è abbastanza evidente, ma è un indicatore che non
# tiene conto delle "code" (eslude i dati prima del 1º quartile e dopo il 3º) e che
# è significativo solo in casi molto particolari.  Vediamo come non ha alcun senso
# nel caso dei nostri dati:
# [ ricordiamo che  fivenum  dà  min, 1qua., 2qua., 3qua., max ]
Q <- function(dati,n) fivenum(dati)[n+1]  # i quartili
sk2 <- function(x) ((Q(x,3)-Q(x,2))-(Q(x,2)-Q(x,1)))/(Q(x,3)-Q(x,1))
sk2(x); sk2(y)
[1] 0
[1] 0
# Ottengo un indice nullo!
#
# Ecco come effettuare i calcoli con WolframAlpha:
# skewness{1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5}
# ottengo:  -(2597*sqrt(3/374))/187 = -1.24381
# skewness(-{1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5})
# ottengo:  (2597*sqrt(3/374))/187 = 1.24381
# Quartileskewness{1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5}
# ottengo:  0
#
# In Excel è usato un indice di asimmetria derivato da quello di Fisher e
# Pearson pari a:
sk3 <- function(x) sk(x)*length(x)^2/((length(x)-1)*(length(x)-2))
sk3(x)
[1] -1.374464
# Un altro indice di asimmetria (dovuto a Pearson) è pari a:
sk4 <- function(x) (mean(x)-median(x))/sqrt(V(x))
sk4(x)
[1] -0.3231104
# Questo indice ha la caratteristica di stare tra -1 ed 1 (a volte viene
# usato il valore opposto a questo:  (median(x)-mean(x))/sqrt(V(x))
#
# In definitiva, lo stesso coefficiente di asimmetria puo' essere usato in
# casi particolari per confrontare dati dello stesso tipo. Ma il suo uso
# significativo richiede competenze a attenzioni molto particolari: meglio
# non usare a scatola nera coefficienti di questo tipo e basarsi sulle
# rappresentazioni grafiche o su "propri" indici di asimmetria riferiti ai
# percentili!!!