来自gamma.fitscipy.stats的www.example.com的Ruby版本

pgky5nke  于 2022-11-10  发布在  Ruby
关注(0)|答案(1)|浏览(101)

正如标题所示,我试图找到一个函数,它可以接受一个浮点数数组,并找到一个适合我的数据的分布。
从这里,我将使用它来查找我传递给它的新数据的CDF。
我已经安装并查看了scibruby发行版和NArray文档,但似乎没有任何内容与“fit”方法匹配
python代码如下所示


# Approach 2: Model-based percentiles.

# Step 1: Find a Gamma distribution that fits your data

alpha, _, beta = stats.gamma.fit(data, floc = 0.)

# Step 2: Use that distribution's CDF to get percentiles.

scores = 100-100*stats.gamma.cdf(new_data, a = alpha, scale=beta)
print(scores)

先谢谢你了

oewdyzsn

oewdyzsn1#

经过深入研究其他软件包和大量的帮助,有人从'交叉验证'论坛,我有需要的答案。
为了获得所需的“alpha”和“beta”值,以给予伽玛分布的形状和比率,您需要发现数据中的“方差”值。
有几种方法可以实现这一点。

代码示例;

data = [<insert your numbers>]
sum = data.sum
sum_square_mean = (sum**2) / data.size
all_square = data.map { |n| n**2 }.sum
net_square = all_square - sum_square_mean
minus_one = data.size - 1
variance = net_square / minus_one
mean = data.sum(0.0) / data.size
mean_squared = mean**2
alpha = mean_squared / variance
beta = mean / variance
theta = variance / mean

“minus_one”这一行并不是完全必要的,但它在统计学中是为了减少错误率而使用的,可以查一下Bessels的修正,你可以从net_square /data. size中得到方差。
使用'descriptive_statistics' gem的第二个选项

require('descriptive_statistics')

# doesn't account for bessel's correction

@alpha = (data.mean**2) / data.variance
@beta = data.mean / data.variance
@theta = data.variance / data.mean

一旦有了这些值,就可以使用Distribution Gem,docs here中的cdf函数
下一个阶段是将值传递给此函数,该函数将返回一个百分点。
请确保使用“1/beta”计算,否则它将不起作用

percentile = 100 - (100 * Distribution::Gamma::Ruby_.cdf(x, alpha, 1 / beta))

你可能注意到了我还计算了θ
这是一个单独的函数,也就是说,我也可以通过传入百分位数来返回伽玛分布的值。

value = Distribution::Gamma.quantile(0.5, alpha, theta)

这个函数也被称为'反cdf','反累积分布函数','概率点函数'或'百分点点函数',这里简称为'分位数'
有关伽玛分布的更多信息,请参阅wiki
Gamma Distribution

相关问题