2012-07-11 18 views
9

¿Existe un paquete estadístico python que admita el cálculo de la covarianza ponderada (es decir, cada observación tiene un peso)? Desafortunadamente, numpy.cov no admite pesas.Paquete Python que admite el cómputo de covarianza ponderado

Preferiblemente trabajando bajo una estructura numpy/scipy (es decir, capaz de usar matrices numpy para acelerar el cálculo).

¡Muchas gracias!

+0

http://www-pcmdi.llnl.gov/svn/repository/cdat/trunk/Packages/genutil/Lib/statistics.py - ¿intenta eso? –

+0

statsmodels casi lo tiene – user333700

Respuesta

6

statsmodels tiene un cálculo de covarianza ponderado en stats.

Pero todavía podemos calcular también directamente:

# -*- coding: utf-8 -*- 
"""descriptive statistic with case weights 

Author: Josef Perktold 
""" 

import numpy as np 
from statsmodels.stats.weightstats import DescrStatsW 


np.random.seed(987467) 
x = np.random.multivariate_normal([0, 1.], [[1., 0.5], [0.5, 1]], size=20) 
weights = np.random.randint(1, 4, size=20) 

xlong = np.repeat(x, weights, axis=0) 

ds = DescrStatsW(x, weights=weights) 

print 'cov statsmodels' 
print ds.cov 

self = ds #alias to use copied expression 
ds_cov = np.dot(self.weights * self.demeaned.T, self.demeaned)/self.sum_weights 

print '\nddof=0' 
print ds_cov 
print np.cov(xlong.T, bias=1) 

# calculating it directly 
ds_cov0 = np.dot(self.weights * self.demeaned.T, self.demeaned)/\ 
       (self.sum_weights - 1) 
print '\nddof=1' 
print ds_cov0 
print np.cov(xlong.T, bias=0) 

Esta impresora:

cov statsmodels 
[[ 0.43671986 0.06551506] 
[ 0.06551506 0.66281218]] 

ddof=0 
[[ 0.43671986 0.06551506] 
[ 0.06551506 0.66281218]] 
[[ 0.43671986 0.06551506] 
[ 0.06551506 0.66281218]] 

ddof=1 
[[ 0.44821249 0.06723914] 
[ 0.06723914 0.68025461]] 
[[ 0.44821249 0.06723914] 
[ 0.06723914 0.68025461]] 

nota editorial

La respuesta inicial ha señalado un error en statsmodels que ha sido arreglado mientras tanto.

+0

Parece que el error statsmodels fue [solucionado en 2013] (https://github.com/statsmodels/statsmodels/issues/370#issuecomment-15357376). – drevicko

+0

@ Mayou36 Gracias por la edición. Ya fue rechazado cuando lo vi. Actualicé mi respuesta para reflejar la versión corregida de statsmodels – user333700