【发布时间】:2021-04-05 20:53:35
【问题描述】:
我有一些数据想要适合分布。数据由频率给出。我的意思是,我有我观察到的每一个事件以及我观察到它的次数。所以像:
data = [(1, 34), (2, 1023), (3, 3243), (4, 879), (5, 202), (6, 10)]
每个元组中的第一个数字是我观察到的事件,第二个数字是该事件的总观察数。
使用 Scipy,我可以通过调用 scipy.stats.lognorm.fit 来拟合(例如)对数正态分布。但是,此例程希望看到所有观察结果的列表,而不是频率。我可以像这样拟合分布:
import scipy
temp_data = []
for x in data:
temp_data += [x[0]] * x[1]
params = scipy.stats.lognorm.fit(temp_data)
但是哇,这似乎效率低得可怕。
在 Scipy 或其他类似工具中,是否可以根据频率拟合分布?如果没有,是否有更好的方法来拟合分布,而无需创建潜在的巨大值列表?
【问题讨论】:
-
寻找参数最常用的方法是最大似然法,在这种情况下,使用频率而不是单个数据完全等同于在每个数据上加上一个等于频率的权重.因此,您可以尝试寻找允许权重与拟合数据相关联的函数。我不知道 Scipy 是否允许这样做,也许它已经允许了。如果不是,也可以看看 R。做不到这一点,从头开始写也没什么大不了的。
-
谢谢@RobertDodier。似乎 Scipy 不允许使用权重。
标签: python scipy statistics