zoukankan      html  css  js  c++  java
  • SciPy 统计

    章节


    scipy.stats模块包含了统计工具以及概率分析工具。

    分布: 直方图和概率密度函数

    给定随机过程的观测值,其直方图是随机过程的概率密度函数PDF的估计量:

    示例

    import numpy as np
    
    samples = np.random.normal(size=1000)
    bins = np.arange(-4, 5)
    bins
    
    histogram = np.histogram(samples, bins=bins, normed=True)[0]
    bins = 0.5*(bins[1:] + bins[:-1])
    bins
    
    from scipy import stats
    pdf = stats.norm.pdf(bins)  # norm是一个分布对象
    
    import matplotlib.pyplot as plt
    plt.plot(bins, histogram) 
    plt.plot(bins, pdf) 
    
    # plt.savefig('./st1-1.png') # 保存要显示的图片
    plt.show()
    
    

    输出

    scipy stats 图1

    如果我们知道随机过程属于一个给定的随机过程家族,比如正态过程,我们就可以对观测值进行最大似然拟合来估计潜在分布的参数。这里我们将一个正态过程与观察到的数据进行拟合:

    loc, std = stats.norm.fit(samples)
    print(loc, std)
    

    输出

    0.0030534094701394794   1.0143664443890137
    

    分布对象
    scipy.stats.norm是一个分布对象: scipy.stats中的每个分布都表示为一个对象。例如:正态分布对象,还有PDF, CDF等等。

    平均值、中位数和百分位数

    均值是样本的平均值:

    np.mean(samples) 
    

    中位数是样本的中间值:

    np.mean(samples) 
    

    中位数也是百分位数50,因为50%的观察值低于它:

    stats.scoreatpercentile(samples, 50) 
    

    同样,我们可以计算百分位数90:

    stats.scoreatpercentile(samples, 90)   
    

    统计检验

    统计检验是一种决策指标。例如,如果我们有两组观测值,假设是高斯过程产生的,我们可以用T检验来判断两组观测值的均值是否存在显著差异:

    a = np.random.normal(0, 1, size=100)
    b = np.random.normal(1, 1, size=10)
    stats.ttest_ind(a, b) 
    

    输出

    Ttest_indResult(statistic=-1.497229887954618, pvalue=0.1372503797899352)
    

    产生的输出包括:

    • T统计值/statistic: 是一个数字,其符号与两个随机过程的差值成正比,其大小与该差值的显著性有关。
    • p值/pvalue: 两个过程相同的概率。如果它接近1,这两个过程几乎肯定是相同的。越接近于零,这些过程就越有可能有不同均值。
  • 相关阅读:
    递延收益
    企业收到政府补助的核算方法
    总额法
    发行股票手续费为什么冲减资本公积
    溢价发行
    融资筹资的区别是什么
    资本公积转增股本
    认股权证和股票期权有什么区别?
    postgresql 锁表查询语句
    生成不带版本的jar包 不影响deploy
  • 原文地址:https://www.cnblogs.com/jinbuqi/p/11833542.html
Copyright © 2011-2022 走看看