多元统计矩的无偏估计

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安装包并运行单元测试:

^{pr2}$

或者,可以使用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号授权。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何将cassandra中的行数据转换为与列相关的嵌套json   java如何使用jcr XPath在jcr:content/@jcr:data中搜索?   java在使用openCV进行安卓开发时如何利用手机的广角镜头   java解析扩展了接口,结束了一个潜在的无限循环   位置服务的@Override方法中存在java Android应用程序错误   java本地线程的用途和需求是什么   具有左右子访问的java节点树遍历   java验证JsonWebToken签名   JUL日志处理程序中的java日志记录   嵌入式Java读取给定时间段的串行数据。   java有没有办法从多个URL获取多个图像?   java线程通过等待intent阻止自己发送intent   java Spring MVC解析多部分内容请求   java JPA/Hibernate静态元模型属性未填充NullPointerException   java格式错误的字符(需要引号,得到I)~正在处理   java为什么PrintWriter对象抛出FileNotFoundException?   java Neo4j未正确保存标签   java IE不加载图像