El desafio propuesto es aprender estadísticas mientras aprendo un poco de los lenguajes python y R (usando iPython notebook como herramienta). No soy especialista en ninguna de estas áreas, creo que una forma interesante de aprender es describir el proceso, por eso este manual.
Es una ciencia basada en las matemáticas que recopila metodos y procedimientos para el análisis de datos. Al provenir originalmente de la palabra "Estado" indica su origen como una valiosa herramienta para la toma de desiciones.
Podemos decir que tiene una parte descriptiva y una inferencial. La primera se ocupa de describir, analizar, resumir o encontrar regularidades o patrones en un conjunto de datos provistos. La segunda -apoyada en la probabilística- permite inferir comportamientos futuros de los datos estudiados.
Cada uno de los entes en un estudio. Por ejemplo cada personas en un censo o cada lanzamiento de una moneda en un analisis probabilistico.
El total de las unidades elementales o entes que forman parte de un estudio. Puede ser finita (censo) o infinito (lanzamientos de una moneda)
Conjunto de unidades elementales elegidos para un estudio. El proceso de elegir una muestra de modo que esta pueda representar lo mejor posible a la población se denomina muestreo y es una parte muy importante de la estadística.
Cada una de las propiedades que se puede observadar en un ente se denomina variable. Pueden ser de diferentes tipos:
Variables cualitativas: Datos no numericos a cerca de un ente. Por ejemplo el color, el estado civil de una persona, etc.
Variables cuantitativas: Datos que se pueden medir con números. Por ejemplo la altura de una persona en centímetros.
Si pensamos a la población o la muestra como un ente los valores que lo describen se denominan parametros. Por ejemplo la edad promedio de la población de estudiantes. Las variables varían de un sujeto o ente a otro, los parámetros son propiedades que describen a la población.
Cuando un dato es calculado sobre un muestra y no sobre toda la población se lo denomina estadistico.
Para los cálculos siguientes vamos a empezar a usar los lenguajes de programación python y R. Para esto vamos a definir una pequeña poblacion. Usaré el prefijo p y r para identificar variables en python y R.
En python para estadística usamos la libreria numpy
from __future__ import division # no es necesario comprender esta línea por ahora
import numpy as np # importamos la libreria numpy para poder usarla en cálculos.
Para poder escribir código en R necesitamos la extención rmagic
%load_ext rmagic
# Esta permite usar R en esta consola con el prefijo "%R "
The rmagic extension is already loaded. To reload it, use: %reload_ext rmagic
# en python los vectores se encierran entre []
# para asignar valor a una variable en python usamos el "="
pedades = [44, 43, 48, 39, 33, 41, 50, 33]
print pedades # mostrar en pantalla el valor de esta variable. Podemos no usar el print, solo lo usaremos esta vez.
[44, 43, 48, 39, 33, 41, 50, 33]
# la definicion anterior es de python "puro", en adelante vamos a usar numpy
pedades = np.array([44, 43, 48, 39, 33, 41, 50,33]) # descarto el valor anterior de la variable "pedades"
pedades # imprimime en pantalla el valor de pedades.
array([44, 43, 48, 39, 33, 41, 50, 33])
# en R la funcion c() permite construir un vector
# para asignar valor a una variable en R usamos el "<-"
%R redades <- c(44, 43, 48, 39, 33, 41, 50, 33)
# no usamos print o comando similar, la consola muestra siempre en resultado de lo que procesamos
array([ 44., 43., 48., 39., 33., 41., 50., 33.])
Tanto python con numpy y R requieren de una mayor introducción. En este apunte las propiedades de estos lenguajes se irán describiendo a medida que los conceptos estadísticos lo requieran.
Este parámetro es uno muy simple. Se trata de la division de los valores usados sobre el total de valores.
# en R la media se calcula con la funcion mean()
%R mean(redades)
array([ 41.375])
%R sum(redades)/length(redades) # sin la funcion mean se calcularia asi en R
array([ 41.375])
# en numpy tambien
np.mean(pedades)
41.375
# sin la funcion mean en python y con numpy la media se calcularía:
np.sum(pedades)/pedades.size
41.375
En un conjunto de datos ordenados la mediana es el valor que esta colocado al centro. Si la cantidad de elementos es par se toman los dos valores centrales y se calcula la media
np.median(pedades)
42.0
%R median(redades)
array([ 42.])
Los numeros en R son vectores de un elemento, es por esto que vemos el resultado en R no como un número.
En una serie de datos la moda es el valor que se repite con mayor frecuencia. Si hay mas de un valor se denomina multimodal.
# al parecer numpy no incluye una funcion para calcular la moda y si la librería scipy
import scipy.stats as sci
sci.mode(pedades)
(array([ 33.]), array([ 2.]))
# el primer valor es la "moda" y el segundo es la cantidad de repeticiones.
# en R pasa algo similar, la funcion para calcular la moda no esta entre las funciones estándar
%R library(modeest) # carga la biblioteca modeest para dispones de la funcion que calcula la moda mfv.
%R mfv(redades)
Error in library(modeest) : there is no package called ‘modeest’ Error in eval(expr, envir, enclos) : could not find function "mfv"
Es una medida de la dispersion o la variabilidad de los elementos analizados en relacion a la media. Su valor mínimo es cero. La varianza se mide en unidades diferentes a los elementos sobre los que se calcula. Por ejemplo si usamos valores en metros la varianza viene dada en metros cuadrados.
Concretamente es la suma de las diferencias de cada elemento con la media al cuadrado sobre el total de elementos.
#en R sería
%R sum((redades-mean(redades))^2)/(length(redades)-1)
array([ 39.125])
# pero se puede calcular como la funcion var()
%R var(redades)
array([ 39.125])
# con numpy el calculo es
np.sum( (pedades-np.mean(pedades)) ** 2 / (pedades.size))
34.234375
# pero no es necesario semejante cálculo, con en R numpy tiene una funciona para la varianza
np.var(pedades) # tambien funcionaria con pedades.var()
34.234375
Como vemos la varianza en R no se calcula y no da el mismo resultado que con numpy. La diferencia esta en que en R se divide por el total de elementos menos 1 y en numpy simplemente sobre el total (?).
Es la raiz cuadrada (positiva) de la varianza. Mientras mayor sea más dispersos estarán los valores en relacion a la media. Al estar expresado en la misma unidad que los valores es mas facil de comprender.
%R sqrt(var(redades)) #forma simple en R
array([ 6.254998])
%R sd(redades) # la funciona que ya hace este calculo es sd()
array([ 6.254998])
#en numpy se calcula con la funcion std()
np.std(pedades)
5.8510148692342252