Métodos estadísticos en recursos hídricos con Python

precipitacionpython.png

El siguiente documento desarrolla las estadísticas sobre recursos hídricos, orientado en los códigos de Phyton. La teoría proviene del Capítulo 1 de Statistical Methods in Water Resources Techniques of Water Resources Investigations (Hesel, 2002). Los scripts están escritos en Python con la interfase IPython.

 

Medidas de Ubicación

Medida clásica – la media

La media (X) se calcula como la suma de todos los valores de datos (Xi), dividido por el tamaño de la muestra. Aquellos datos que se encuentren a mayor distancia del centro ejercen una fuerza hacia abajo que los más cercanos al centro. Si se elimina un punto cerca del centro, el punto de equilibrio sólo necesitará un pequeño ajuste para mantener el conjunto de datos en equilibrio. Pero si se suprimiera un valor de los valores límite, el punto de equilibrio se desplazaría de manera dramática. La media no es una medida "resistente" de ubicación.

La media (triángulo) como punto de equilibrio de un conjunto de datos.

La media (triángulo) como punto de equilibrio de un conjunto de datos.

Variación de la media hacia abajo luego de retirar un valor atípico (outlier). Figura 1. Dependencia de la media por valores extremos (Hesel, 2002).

Variación de la media hacia abajo luego de retirar un valor atípico (outlier).

Figura 1. Dependencia de la media por valores extremos (Hesel, 2002).

Medida resistente - la Mediana

La mediana o percentil 50 ó P0.50, es el valor central de la distribución cuando los datos se clasifican por orden de magnitud. La mediana es sólo mínimamente afectada por la magnitud de una sola observación. La resistencia al efecto del cambio en un valor o a la presencia de observaciones periféricas es a menudo una propiedad deseable.

Ejemplo:

In[]:
import numpy as np
a = np.array([2,4,8,9,11,11,12])
b = np.array([2,4,8,9,11,11,120])
print "La media arimetrica del set a es: ", np.mean(a)
print "La media arimetrica del set b es: ", np.mean(b)
print "Pero"
print "El valor medio del set a es: ", np.median(a)
print "El valor medio del set b es: ", np.median(b)

Out[]:
La media arimetrica del set a es:8.14285714286
La media arimetrica del set b es:23.5714285714
Pero
El valor medio del set a es:9.0
El valor medio del set b es:9.0

 

Otras medidas de Ubicación

Otras tres medidas de tendencia que se utilizan con menor frecuencia son: el moda, la media geométrica, la media armónica y la media truncada.

 

Moda

Es el valor que tiene la barra más alta en un histograma. Es mucho más aplicable para datos agrupados, datos que se registran únicamente de la manera en que llegan a un número finito de categorías, a diferencia de los datos continuos. Es muy fácil de obtener, sin embargo, es una pobre medida de ubicación para datos continuos, ya que su valor depende a menudo de la agrupación arbitraria de esos datos.

 

Ejemplo:

In[]:
import numpy as np
import scipy.stats 
a = np.array([1,2,3,1,2,1,1,1,3,2,2,1])
b = (3,4,5,6,7,8,5,5,6,2,3,1,2,5,5,1,3,2,2,1)
print "La moda del set a es: ", scipy.stats.mode(a)
print "La moda del set b es: ", scipy.stats.mode(b)
#Sino quisieramos ver los parentesis tendriamos que hacer este script
print "La moda del set a es: ", scipy.stats.mode(a)[0][0], "y se repite",scipy.stats.mode(a)[1][0] ,"veces"
print "La moda del set b es: ", scipy.stats.mode(b)[0][0], "y se repite",scipy.stats.mode(a)[1][0] ,"veces"

Out[]:
La moda del set a es:(array([ 1.]), array([ 6.]))
La moda del set b es:(array([ 5.]), array([ 5.]))
La moda del set a es:1.0 y se repite 6.0 veces
La moda del set b es:5.0 y se repite 6.0 veces

 

Media Geométrica

La media geométrica (GM) con frecuencia se reporta para un conjuntos de datos positivamente sesgados. GM es la media de los logaritmos, transforma de nuevo a sus unidades originales.

GM = exp (Meany), donde Yi = ln (Xi) ... eq 1,5

                       

Media armónica

Calcula la media armónica a lo largo del eje especificado.

Esto es: n / (1/x1 + 1/x2 + ... + 1/xn)

 

Media truncada

El compromiso entre la mediana y la media está reflejado por la media truncada de las observaciones de menor a mayor valor y el cálculo de la media de lo que queda.

Estos estimadores son llamados "medias truncadas" y cualquier porcentaje deseable de datos puede ser recortado. El recorte más común es eliminar el 25 por ciento de los datos en cada extremo.

Diagrama de la media truncada. Figura 2. Esquema de la media truncada (Hesel, 2002).

Diagrama de la media truncada.

Figura 2. Esquema de la media truncada (Hesel, 2002).

Ejemplo:

In[]:
import numpy as np
import scipy.stats 
#inicializamos el diccionario
datos = {}
#abrimos el archivo con los datos y poblamos el diccionario
precipfile = open("C:\\Users\\Saul\\Dropbox\\Curso_19_Python_en_ Hidrologia\\1_Doc\\AuxFiles\\Ejercicio_Media_Geometrica.txt",'r')
for precipline in precipfile:
(clave,valor) = precipline.split()
datos[clave] = valor
print datos
#borramos el encabezado y generamos un array de numpy con los datos de precipitacion
del datos['Year']
print datos
ppt = np.array([float(v) for k,v in datos.iteritems()])
print ppt
#calculamos la media geometrica
mediageom = scipy.stats.mstats.gmean(ppt)
print "La media geométrica es =", mediageom
#calculamos la media armónica
mediaarmo = scipy.stats.mstats.hmean(ppt)
print "La media armónica es =", mediaarmo
#calculamos la media
media = scipy.stats.cmedian(ppt,numbins=1000)
print "La media =", media
#calculamos los percentile 25% y 75% y hallamos la media recortada
liminf = scipy.stats.scoreatpercentile(ppt,25)
limsup = scipy.stats.scoreatpercentile(ppt,75)
print "El 25% percentil es =", liminf, "y el 75% percentil es =", limsup
trimean = scipy.stats.mstats.tmean(ppt,(108.2,136.025))
print "La media recortada es =", trimean

Out[]:
{'1991': '105.5', '1990': '136.7', '1993': '205.7', '1992': '109.1', '1995': '124', '1994': '169.8', '1997': '110', '1996': '114.1', '1999': '111', '1998': '109.1', '2005': '98.1', '1988': '132.3', '1989': '135.8', '2002': '151.4', '2003': '164.2', '2000': '104.9', '2001': '133.2', '2006': '96.2', '2007': '99.1', '2004': '130.2', 'Year': 'Ppt_mm'}
{'1991': '105.5', '1990': '136.7', '1993': '205.7', '1992': '109.1', '1995': '124', '1994': '169.8', '1997': '110', '1996': '114.1', '1999': '111', '1998': '109.1', '2005': '98.1', '1988': '132.3', '1989': '135.8', '2002': '151.4', '2003': '164.2', '2000': '104.9', '2001': '133.2', '2006': '96.2', '2007': '99.1', '2004': '130.2'}
[ 105.5136.7205.7109.1124. 169.8110. 114.1111. 109.1
98.1132.3135.8151.4164.2104.9133.2 96.2 99.1130.2]
La media geométrica es = 124.394628085
La media armónica es = 122.082926002
La media = 114.121171171
El 25% percentil es = 108.2 y el 75% percentil es = 136.025
La media recortada es = 120.88

 

Referencias

Helsel, D.R. y R. M. Hirsch, 2002. Statistical Methods in Water Resources Techniques of Water Resources Investigations, Tomo 4, Capítulo A3. U.S. Geological Survey. 522 páginas.

 

Download the required data for this exercise here.

 

Footer_Suscribirse.png

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.

Posted on January 29, 2014 and filed under Modelamiento, Gestión del agua, Hidroinformática, Hidrología.