支持加权协方差计算的Python包

支持加权协方差计算的Python包,python,numpy,statistics,scipy,covariance,Python,Numpy,Statistics,Scipy,Covariance,是否有python统计软件包支持加权协方差的计算(即,每个观测值都有一个权重)?不幸的是,numpy.cov不支持权重 最好在numpy/scipy框架下工作(即,能够使用numpy数组加速计算) 非常感谢 statsmodels在stats中进行加权协方差计算 但我们仍然可以直接计算: # -*- coding: utf-8 -*- """descriptive statistic with case weights Author: Josef Perktold """ import nu

是否有python统计软件包支持加权协方差的计算(即,每个观测值都有一个权重)?不幸的是,numpy.cov不支持权重

最好在numpy/scipy框架下工作(即,能够使用numpy数组加速计算)


非常感谢

statsmodels在
stats
中进行加权协方差计算

但我们仍然可以直接计算:

# -*- 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)
这张照片是:

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]]
编辑说明


最初的答案指出了statsmodels中的一个错误,该错误已经被修复。

因为版本1.10确实支持使用“aweights”参数进行加权协方差计算。

-试试这个吗?@BrianCain:链接导致404错误。看起来statsmodels错误已经修复。@Mayou36谢谢您的编辑。当我看到它的时候,它已经被拒绝了。我更新了我的答案,以反映修正状态模型版本,我认为只有当我们认为权重是整数,代表了尊重观察的倍数时,这才起作用。例如,如果权重是总和为1或小于1的小浮点数,则无偏归一化无法工作。换句话说,权重与numpy cov中的权重类似,但与numpy cov中的权重不同。
freq_权重不必是整数。自由度校正的唯一假设是,
和权
对应于观测数或有效NOB。例如,对于稳健回归,一个选项的全权重为1,而作为异常值候选值的观测值的权重小于1。e、 g.协方差或散射矩阵的M估计量。statsmodels不重新缩放权重(与Stata相反)。因此,用户可以使用不同的比例(和权重)对权重进行不同的解释。它也不包括
fweights
(与statsmodel的权重类似)。这应该是当今公认的答案。