Fitting distributions, goodness of fit, p-value. Is it possible to do this with Scipy (Python)?

后端 未结 1 1858
礼貌的吻别
礼貌的吻别 2020-12-07 23:06

INTRODUCTION: I\'m a bioinformatician. In my analysis which I perform on all human genes (about 20 000) I search for a particular short sequence motif to check how many time

相关标签:
1条回答
  • 2020-12-07 23:59

    In SciPy documentation you will find a list of all implemented continuous distribution functions. Each one has a fit() method, which returns the corresponding shape parameters.

    Even if you don't know which distribution to use you can try many distrubutions simultaneously and choose the one that fits better to your data, like in the code below. Note that if you have no idea about the distribution it may be difficult to fit the sample.

    enter image description here

    import matplotlib.pyplot as plt
    import scipy
    import scipy.stats
    size = 20000
    x = scipy.arange(size)
    # creating the dummy sample (using beta distribution)
    y = scipy.int_(scipy.round_(scipy.stats.beta.rvs(6,2,size=size)*47))
    # creating the histogram
    h = plt.hist(y, bins=range(48))
    
    dist_names = ['alpha', 'beta', 'arcsine',
                  'weibull_min', 'weibull_max', 'rayleigh']
    
    for dist_name in dist_names:
        dist = getattr(scipy.stats, dist_name)
        param = dist.fit(y)
        pdf_fitted = dist.pdf(x, *param[:-2], loc=param[-2], scale=param[-1]) * size
        plt.plot(pdf_fitted, label=dist_name)
        plt.xlim(0,47)
    plt.legend(loc='upper left')
    plt.show()
    

    References:

    - Distribution fitting with Scipy

    - Fitting empirical distribution to theoretical ones with Scipy (Python)?

    0 讨论(0)
提交回复
热议问题