多元统计矩的无偏估计
PyMoments的Python项目详细描述
PyMoments公司
PyMoments是一个用于无偏估计多元统计矩的工具包。 在当前版本(1.0.0)中,只实现了多元k-统计量, 允许对累积量进行无偏估计。 h-统计量(用于中心矩的无偏估计)的实现是 计划将来发布。在
安装
PyMoments可以从GitHub安装 source,或者通过PyPI。 要从GitHub安装包,请首先克隆存储库:
$ git clone https://github.com/KevinDalySmith/PyMoments.git
导航到根目录,其中包含setup.py
文件。
然后可以使用setuptools安装包并运行单元测试:
或者,可以使用PyPI安装PyMoments:
$ pip install PyMoments
请注意,PyMoments需要NumPy。 我只在NumPy版本1.16.5中测试过这个包,但是它应该是兼容的 使用旧版本。在
基本用途
最简单的用例是从二维数据数组计算多元k统计量。 例如,从多元正态分布生成随机样本:
importnumpyasnpmu=np.zeros(3,)sigma=np.array([[2,0,1],[0,2,-1],[1,-1,2]])data=np.random.multivariate_normal(mu,sigma,size=(1000,))
data
变量是一个1000x3数组,其中每一列对应于三个数组中的一个
随机变量在联合分布中,每一行都是一个观察值。在
第一个k统计量与样本均值相同。因此,我们可以比较一阶 k—数组每列的统计信息,取简单平均值:
fromPyMomentsimportkstatfirst_order_kstats=[kstat(data,(0,)),kstat(data,(1,)),kstat(data,(2,))]sample_means=np.mean(data,axis=0)print('First-order k-statistics:',first_order_kstats)print('Sample means:',sample_means)
方法kstat(data, (0,))
从第一列计算一阶k统计量
数据的。正如本例的控制台输出所示,一阶k-统计信息是
确实相当于样本均值,最多浮点误差。在
二阶k统计量与协方差相同。因此,我们可以比较这些值
对数据协方差矩阵的kstat()
函数:
second_order_kstats=np.zeros((3,3))foriinrange(3):forjinrange(3):second_order_kstats[i,j]=kstat(data,(i,j))print('Second-order k-statistics:')print(second_order_kstats)print('Covariance matrix:')print(np.cov(data.T))
高阶k-统计量很难用熟悉的统计量来表达,但是 它们仍然提供了对潜在分布的洞察。 例如,三阶k-统计量与分布的偏度有关。 正态分布具有零偏态,因此,所有三阶k统计量 应该相当接近于零:
print('Sample third-order k-statistics:')print(kstat(data,(0,1,2)))print(kstat(data,(0,0,1)))print(kstat(data,(2,2,2)))
kstat()
方法的第二个参数指定了多组列索引
(作为整数序列),它对要计算的特定k统计量进行编码。
k统计量的阶数等于这个多集的长度。
请注意,kstat()
与此参数是对称的,即置换
指数对产出没有影响。允许重复索引;事实上,重复
计算经典的单变量k-统计量需要指数:
new_data=np.random.randn(1000,1)print('First univariate k-stat:')print(kstat(new_data,(0,)))print('Second univariate k-stat:')print(kstat(new_data,(0,0)))print('Third univariate k-stat:')print(kstat(new_data,(0,0,0)))print('Fourth univariate k-stat:')print(kstat(new_data,(0,0,0,0)))
还应指出的是,k-统计量变得有噪声,难以计算 递增顺序。例如,尝试在新样本上计算9阶单变量累积量 几次:
kstat(np.random.randn(1000,1),(0,)*9)
这个函数不仅需要几秒钟才能返回,而且重复这个实验可以
导致k-统计量的不同值,尽管
分布的九阶累积量为零。
n阶指数上kstat()
的运行时间与贝尔数B(n)成比例,因此。。。
我不建议尝试10阶或更高阶的k统计量。在
许可证、引证和确认
Kevin D.Smith的PyMoments是在非商业性的知识共享许可下授权的 ({a3})。如果可能,请引用 此软件包:
@misc{PyMoments:2020,
author = {Kevin D. Smith},
title = {PyMoments: A Python toolkit for unbiased estimation of multivariate statistical moments},
howpublished = {\texttt{https://github.com/KevinDalySmith/PyMoments}},
year = 2020
}
这项工作得到了美国国防威胁削减局(U.S.Defense Threat Reduction Agency)的部分支持,该机构获得了HDTRA1-19-1-0017号授权。在
- 项目
标签: