首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用(python) Scipy拟合伽马分布

用(python) Scipy拟合伽马分布
EN

Stack Overflow用户
提问于 2010-05-24 18:18:19
回答 4查看 47.8K关注 0票数 32

有人能帮我在python中拟合伽马分布吗?嗯,我有一些数据:X和Y坐标,我想找出符合这个分布的gamma参数……在Scipy doc中,事实证明fit方法确实存在,但我不知道如何使用它:s.首先,参数"data“必须采用哪种格式,以及如何提供第二个参数(参数),因为这就是我要查找的内容。

EN

回答 4

Stack Overflow用户

发布于 2010-05-24 18:38:29

生成一些gamma数据:

代码语言:javascript
复制
import scipy.stats as stats    
alpha = 5
loc = 100.5
beta = 22
data = stats.gamma.rvs(alpha, loc=loc, scale=beta, size=10000)    
print(data)
# [ 202.36035683  297.23906376  249.53831795 ...,  271.85204096  180.75026301
#   364.60240242]

在这里,我们将数据拟合到伽马分布:

代码语言:javascript
复制
fit_alpha, fit_loc, fit_beta=stats.gamma.fit(data)
print(fit_alpha, fit_loc, fit_beta)
# (5.0833692504230008, 100.08697963283467, 21.739518937816108)

print(alpha, loc, beta)
# (5, 100.5, 22)
票数 69
EN

Stack Overflow用户

发布于 2014-04-04 15:29:13

我对ss.gamma.rvs-函数不满意,因为它可以生成负数,这是伽马分布不应该有的。因此,我通过期望值=均值(Data)和方差= var(data) (有关详细信息,请参阅维基百科)对样本进行拟合,并编写了一个函数,该函数可以在没有scipy的情况下生成伽马分布的随机样本(我发现很难在附注中正确安装它):

代码语言:javascript
复制
import random
import numpy

data = [6176, 11046, 670, 6146, 7945, 6864, 767, 7623, 7212, 9040, 3213, 6302, 10044, 10195, 9386, 7230, 4602, 6282, 8619, 7903, 6318, 13294, 6990, 5515, 9157]

# Fit gamma distribution through mean and average
mean_of_distribution = numpy.mean(data)
variance_of_distribution = numpy.var(data)

def gamma_random_sample(mean, variance, size):
    """Yields a list of random numbers following a gamma distribution defined by mean and variance"""
    g_alpha = mean*mean/variance
    g_beta = mean/variance
    for i in range(size):
        yield random.gammavariate(g_alpha,1/g_beta)

# force integer values to get integer sample
grs = [int(i) for i in gamma_random_sample(mean_of_distribution,variance_of_distribution,len(data))]

print("Original data: ", sorted(data))
print("Random sample: ", sorted(grs))

# Original data: [670, 767, 3213, 4602, 5515, 6146, 6176, 6282, 6302, 6318, 6864, 6990, 7212, 7230, 7623, 7903, 7945, 8619, 9040, 9157, 9386, 10044, 10195, 11046, 13294]
# Random sample:  [1646, 2237, 3178, 3227, 3649, 4049, 4171, 5071, 5118, 5139, 5456, 6139, 6468, 6726, 6944, 7050, 7135, 7588, 7597, 7971, 10269, 10563, 12283, 12339, 13066]
票数 8
EN

Stack Overflow用户

发布于 2010-11-09 08:39:36

如果你想要一个很长的例子,包括关于估计或修复发行版支持的讨论,那么你可以在https://github.com/scipy/scipy/issues/1359和链接的邮件列表消息中找到它。

在scipy的主干版本中添加了在拟合期间修复参数(如位置)的初步支持。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2896179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档