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.
- 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).
- Ordinal: Una variable ordinal (ordinal level variable) son clasificaciones ordenadas, no hay distancias equivalentes entre los niveles.
- 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.
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
- Primer cuartil = 25%
- Segundo cuartil = 50%
- Tercer cuartil = 70%
- Cuarto cuartil = 100%
Moda (Mode), Usarla en variables de tipo Nominal.
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}$$
$$ 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}$$
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)
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"]))
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() )
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"]))
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())