Repaso de Estadística Descriptiva

Un breve resumen de estadística descriptiva a partir de lo que voy aprendiendo del curso de edX, I Heart Stats: Learning to Love Statistics, usando python.

Tipos de Variables

Hay dos tipos de variables en estadística, que seguro se explicaran en mas detalle en lo que viene del curso:
  • Independientes (causa)
  • Dependientes (efecto)

Niveles de Medición (Levels of Measurement)

  • Ratio: Una variable de razon (ratio level variable) es como la variable de intervalo pero el $0$ si significa que no hay nada.
p.e. Analizando ingresos, 0 significa que no hay ingresos
  • Interval: Una variable de intervalo (interval level variable) son clasificaciones ordenadas, y si hay distancias equivalentes entre los niveles. Lo malo con esto es que $0$ es un punto arbitrario (no significa nada).
p.e. El IQ, una persona con IQ de 150 no es el doble de inteligente que una con IQ de 75 porque el 0 no significa que no es inteligente
  • Ordinal: Una variable ordinal (ordinal level variable) son clasificaciones ordenadas, no hay distancias equivalentes entre los niveles.
p.e. clase alta, clase media, clase baja
  • Nominal/Categorical: Quiere decir que la variable nos dice algo acerca de clasificación (no ordering). Una variable nominal (nominal level variable) tiene que ser exhaustiva (exhaustive, cubre todos los posibles casos de la variable) y mutuamente exclusiva (mutually exclusive, puede pertenecer solo a una categoria). Una variable dicotómica es un tipo de variable nominal que solo tiene dos categorias.
p.e. textual, visual

Estadística Descriptiva

Es el término dado al análisis de datos que ayuda a describir o resumir los datos de una manera significativa.

Medidas de Tendencia Central

Promedio o Media Aritmética (Mean/Average). Usarla en variables de tipo Intervalo o Ratio. Medida de tendencia central mas usada.
Mediana (Median), Usarla en variables desde el tipo Ordinal. Conociendo esta medida se puede decir que:
  • Es el valor que divide los datos en dos mitades del mismo tamaño
La mediana parte los datos en dos. Se podrian partir los datos en "cuartiles", en este caso serían:
  • Primer cuartil = 25%
  • Segundo cuartil = 50%
  • Tercer cuartil = 70%
  • Cuarto cuartil = 100%
Se llaman "percentiles" cuando los datos se dividen en 100 partes.
Moda (Mode), Usarla en variables de tipo Nominal.

Medidas de Dispersión

La idea con dispersión es saber que tan dispersos están los datos.
  • Cuando la dispersion es baja (datos sesgados o skewed), la exactitud (accuracy) o la consitencia (consistency) es mayor, la tendencia central es mas típica y el promedio es una buena medida de los datos.
Desviacion Estandar (Standard Deviation): Se usa en variables de tipo Intervalo o Ratio. Se elevan al cuadrado y esto hace que el valor sea mayor, para escalar este valor se saca la raíz cuadrada. En general es mejor que la "desviacon media" como se explica en http://www.mathsisfun.com/data/standard-deviation.html
$$ s = \sigma = \sqrt{\frac{1}{N}\sum\limits_{i} (X_i - \overline{X})^2} $$
Desviacion Media (Mean Deviation/Mean Absolute Deviation): Se usa en variables de tipo Intervalo o Ratio. Es la distancia promedio de los datos con respecto a la media.
Si se suman todos los $X_i - \overline{X}$, resulta el valor 0.
$$ MD = \frac{1}{N}\sum\limits_{i} |X_i - \overline{X}| $$
Rango (Range): Se usa en variables de tipo Ordinal.
$$range(D) = max(D) - min(D)$$
Razon de Variacion (Variation Ratio): Se usa en variables de tipo Nominal. Siendo $N$ el numero de casos y $N_m$ es numero de casos en la moda (numero en la categoría modal). Mientras menor sea este valor menor es la variación.
$$VR = 1 - \frac{N_m}{N}$$

Un ejemplo

In [1]:
import sys
if sys.version_info[0] < 3:
    from StringIO import StringIO
else:
    from io import StringIO
    
import numpy as np
import pandas as pd
from scipy import stats
from IPython.display import display

tsv = StringIO("""
Age Happiness # of pets Religion
57 Not too happy 2 Not religious
57 Very happy 2 Islamic
11 Pretty happy 1 Not religious
25 Pretty happy 2 Hindu
31 Very happy 0 Hindu
47 Not too happy 0 Christian
47 Not too happy 2 Other religion
64 Very happy 1 Islamic
29 Not too happy 3 Christian
36 Pretty happy 3 Other religion
2 Very happy 0 Other religion
59 Pretty happy 3 Christian
31 Very happy 0 Jewish
4 Not too happy 1 Islamic
52 Not too happy 3 Christian
70 Pretty happy 0 Christian
60 Not too happy 2 Buddhist
76 Very happy 3 Not religious
56 Pretty happy 0 Other religion
59 Very happy 0 Not religious
""")

df = pd.read_csv(tsv, sep='\t')
display(df)
Age Happiness # of pets Religion
0 57 Not too happy 2 Not religious
1 57 Very happy 2 Islamic
2 11 Pretty happy 1 Not religious
3 25 Pretty happy 2 Hindu
4 31 Very happy 0 Hindu
5 47 Not too happy 0 Christian
6 47 Not too happy 2 Other religion
7 64 Very happy 1 Islamic
8 29 Not too happy 3 Christian
9 36 Pretty happy 3 Other religion
10 2 Very happy 0 Other religion
11 59 Pretty happy 3 Christian
12 31 Very happy 0 Jewish
13 4 Not too happy 1 Islamic
14 52 Not too happy 3 Christian
15 70 Pretty happy 0 Christian
16 60 Not too happy 2 Buddhist
17 76 Very happy 3 Not religious
18 56 Pretty happy 0 Other religion
19 59 Very happy 0 Not religious
Medida de tendencia central y de dispersión mas apropiada para Age - mean, standard deviation
In [2]:
print "Median = " + str(np.median(df["Age"]))
print "Standard Deviation = " + str(np.std(df["Age"]))
Median = 49.5
Standard Deviation = 20.9863646209
Medida de tendencia central y de dispersión mas apropiada para Happiness - median, variation ratio
In [3]:
# La mediana es "Pretty Happy", pero tambien puede ser "Very happy" si se toman en cuenta la mediana por conteo de frecuencias)
print df["Happiness"].value_counts()
print 
print "VR = " + str( 1 - stats.mode(df["Happiness"])[1]/df["Happiness"].count() )
Not too happy    7
Very happy       7
Pretty happy     6
dtype: int64

VR = [ 0.65]
Medida de tendencia central y de dispersión mas apropiada para # of pets - mean, standard deviation
In [4]:
print "Median = " + str(np.mean(df["# of pets"]))
print "Standard Deviation = " + str(np.std(df["# of pets"]))
Median = 1.4
Standard Deviation = 1.2
Medida de tendencia central y de dispersión mas apropiada para Religion - mode, variation ratio
In [5]:
mode = stats.mode(df["Religion"])
print "Objeto Mode = "
print mode

print "VR = " + str(1 - mode[1]/df["Religion"].count())
Objeto Mode = 
(array(['Christian'], dtype=object), array([ 5.]))
VR = [ 0.75]