Skip to content

Instantly share code, notes, and snippets.

@avdata99
Last active August 29, 2015 13:58
Show Gist options
  • Save avdata99/9942432 to your computer and use it in GitHub Desktop.
Save avdata99/9942432 to your computer and use it in GitHub Desktop.
Aprendiendo estadisticas con python (numpy) y R
{
"metadata": {
"name": ""
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"Apuntes de estad\u00edstica"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"El desafio propuesto es aprender estad\u00edsticas mientras aprendo un poco de los lenguajes python y R (usando iPython notebook como herramienta).\n",
"No soy especialista en ninguna de estas \u00e1reas, creo que una forma interesante de aprender es describir el proceso, por eso este manual."
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"\u00bfQue es la estad\u00edstica?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Es una ciencia basada en las matem\u00e1ticas que recopila metodos y procedimientos para el an\u00e1lisis de datos.\n",
"Al provenir originalmente de la palabra \"Estado\" indica su origen como una valiosa herramienta para la toma de desiciones.\n",
"\n",
"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\u00edstica- permite inferir comportamientos futuros de los datos estudiados."
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Conceptos b\u00e1sicos"
]
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"Unidad elemental"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Cada uno de los entes en un estudio. \n",
"Por ejemplo cada personas en un censo o cada lanzamiento de una moneda en un analisis probabilistico."
]
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"Poblaci\u00f3n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"El total de las *unidades elementales* o entes que forman parte de un estudio. Puede ser finita (censo) o infinito (lanzamientos de una moneda)"
]
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"Muestra"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"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\u00f3n se denomina **muestreo** y es una parte muy importante de la estad\u00edstica."
]
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"Variables"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Cada una de las propiedades que se puede observadar en un *ente* se denomina **variable**.\n",
"Pueden ser de diferentes tipos:\n",
"\n",
"**Variables cualitativas**: Datos no numericos a cerca de un *ente*. Por ejemplo el color, el estado civil de una persona, etc.\n",
"\n",
"**Variables cuantitativas**: Datos que se pueden medir con n\u00fameros. Por ejemplo la altura de una persona en cent\u00edmetros."
]
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"Par\u00e1metros"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Si pensamos a la *poblaci\u00f3n* o la *muestra* como un *ente* los valores que lo describen se denominan *parametros*.\n",
"Por ejemplo la edad promedio de la poblaci\u00f3n de estudiantes.\n",
"Las variables var\u00edan de un sujeto o ente a otro, los par\u00e1metros son propiedades que describen a la poblaci\u00f3n.\n",
"\n",
"Cuando un dato es calculado sobre un muestra y no sobre toda la poblaci\u00f3n se lo denomina *estadistico*."
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Par\u00e1metros b\u00e1sicos de la estad\u00edstica"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Para los c\u00e1lculos siguientes vamos a empezar a usar los lenguajes de programaci\u00f3n python y R.\n",
"Para esto vamos a definir una peque\u00f1a poblacion.\n",
"Usar\u00e9 el prefijo *p* y *r* para identificar variables en **p**ython y **R**.\n",
"\n",
"En *python* para estad\u00edstica usamos la libreria **numpy**"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from __future__ import division # no es necesario comprender esta l\u00ednea por ahora\n",
"import numpy as np # importamos la libreria numpy para poder usarla en c\u00e1lculos."
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 15
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Para poder escribir c\u00f3digo en **R** necesitamos la extenci\u00f3n rmagic"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%load_ext rmagic \n",
"# Esta permite usar R en esta consola con el prefijo \"%R \""
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"The rmagic extension is already loaded. To reload it, use:\n",
" %reload_ext rmagic\n"
]
}
],
"prompt_number": 19
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# en python los vectores se encierran entre []\n",
"# para asignar valor a una variable en python usamos el \"=\"\n",
"pedades = [44, 43, 48, 39, 33, 41, 50, 33]\n",
"print pedades # mostrar en pantalla el valor de esta variable. Podemos no usar el print, solo lo usaremos esta vez."
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[44, 43, 48, 39, 33, 41, 50, 33]\n"
]
}
],
"prompt_number": 54
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# la definicion anterior es de python \"puro\", en adelante vamos a usar numpy\n",
"pedades = np.array([44, 43, 48, 39, 33, 41, 50,33]) # descarto el valor anterior de la variable \"pedades\"\n",
"pedades # imprimime en pantalla el valor de pedades."
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 55,
"text": [
"array([44, 43, 48, 39, 33, 41, 50, 33])"
]
}
],
"prompt_number": 55
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# en R la funcion c() permite construir un vector\n",
"# para asignar valor a una variable en R usamos el \"<-\"\n",
"%R redades <- c(44, 43, 48, 39, 33, 41, 50, 33)\n",
"# no usamos print o comando similar, la consola muestra siempre en resultado de lo que procesamos"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 56,
"text": [
"array([ 44., 43., 48., 39., 33., 41., 50., 33.])"
]
}
],
"prompt_number": 56
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Tanto python con numpy y R requieren de una mayor introducci\u00f3n. \n",
"En este apunte las propiedades de estos lenguajes se ir\u00e1n describiendo a medida que los conceptos estad\u00edsticos lo requieran."
]
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"Media (o promedio)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Este par\u00e1metro es uno muy simple. Se trata de la division de los valores usados sobre el total de valores."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# en R la media se calcula con la funcion mean()\n",
"%R mean(redades)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 57,
"text": [
"array([ 41.375])"
]
}
],
"prompt_number": 57
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%R sum(redades)/length(redades) # sin la funcion mean se calcularia asi en R"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 58,
"text": [
"array([ 41.375])"
]
}
],
"prompt_number": 58
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# en numpy tambien\n",
"np.mean(pedades)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 59,
"text": [
"41.375"
]
}
],
"prompt_number": 59
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# sin la funcion mean en python y con numpy la media se calcular\u00eda:\n",
"np.sum(pedades)/pedades.size"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 60,
"text": [
"41.375"
]
}
],
"prompt_number": 60
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"Mediana"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"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**"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"np.median(pedades)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 61,
"text": [
"42.0"
]
}
],
"prompt_number": 61
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%R median(redades)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 62,
"text": [
"array([ 42.])"
]
}
],
"prompt_number": 62
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Los numeros en R son vectores de un elemento, es por esto que vemos el resultado en R no como un n\u00famero."
]
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"Moda"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"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*."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# al parecer numpy no incluye una funcion para calcular la moda y si la librer\u00eda scipy\n",
"import scipy.stats as sci\n",
"sci.mode(pedades)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 63,
"text": [
"(array([ 33.]), array([ 2.]))"
]
}
],
"prompt_number": 63
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# el primer valor es la \"moda\" y el segundo es la cantidad de repeticiones.\n",
"\n",
"# en R pasa algo similar, la funcion para calcular la moda no esta entre las funciones est\u00e1ndar\n",
"%R library(modeest) # carga la biblioteca modeest para dispones de la funcion que calcula la moda mfv.\n",
"%R mfv(redades)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Error in library(modeest) : there is no package called \u2018modeest\u2019\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Error in eval(expr, envir, enclos) : could not find function \"mfv\"\n"
]
}
],
"prompt_number": 95
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"Varianza"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Es una medida de la dispersion o la variabilidad de los elementos analizados en relacion a la media. Su valor m\u00ednimo es cero.\n",
"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.\n",
"\n",
"Concretamente es la suma de las diferencias de cada elemento con la media al cuadrado sobre el total de elementos."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#en R ser\u00eda\n",
"%R sum((redades-mean(redades))^2)/(length(redades)-1)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 68,
"text": [
"array([ 39.125])"
]
}
],
"prompt_number": 68
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# pero se puede calcular como la funcion var()\n",
"%R var(redades)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 69,
"text": [
"array([ 39.125])"
]
}
],
"prompt_number": 69
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# con numpy el calculo es \n",
"np.sum( (pedades-np.mean(pedades)) ** 2 / (pedades.size))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 83,
"text": [
"34.234375"
]
}
],
"prompt_number": 83
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# pero no es necesario semejante c\u00e1lculo, con en R numpy tiene una funciona para la varianza\n",
"np.var(pedades) # tambien funcionaria con pedades.var()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 82,
"text": [
"34.234375"
]
}
],
"prompt_number": 82
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Como vemos **la varianza en R no se calcula y no da el mismo resultado que con numpy**.\n",
"La diferencia esta en que en R se divide por el total de elementos menos 1 y en numpy simplemente sobre el total (?)."
]
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"Desviaci\u00f3n est\u00e1ndar o t\u00edpica"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Es la raiz cuadrada (positiva) de la varianza. Mientras mayor sea m\u00e1s dispersos estar\u00e1n los valores en relacion a la media.\n",
"Al estar expresado en la misma unidad que los valores es mas facil de comprender."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%R sqrt(var(redades)) #forma simple en R"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 88,
"text": [
"array([ 6.254998])"
]
}
],
"prompt_number": 88
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%R sd(redades) # la funciona que ya hace este calculo es sd()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 91,
"text": [
"array([ 6.254998])"
]
}
],
"prompt_number": 91
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#en numpy se calcula con la funcion std()\n",
"np.std(pedades)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 96,
"text": [
"5.8510148692342252"
]
}
],
"prompt_number": 96
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment