正如标题所示,我试图找到一个函数,它可以接受一个浮动数组,并找到一个适合我的数据的发行版。
从这里开始,我将使用它来查找我正在传递的新数据的CDF。
我已经安装并查看了sciruby分发版和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)提前谢谢你
发布于 2022-08-01 15:53:49
在深入研究了其他软件包和来自“交叉验证”论坛的人的大量帮助后,我有了所需的答案。
为了获得所需的'alpha‘和’β‘值,它将给出伽马分布的形状和速率,你需要发现数据中的’方差‘值是什么。
要实现这一点,有几种方法。有关更多信息,请参见这里;
代码示例;
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‘并不是完全必要的,但它是在统计中完成的,以降低错误率。查一下贝塞尔的修正。您只需从net_square / data.size获得差异即可。
第二个选项使用“统计”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有了这些值之后,就可以使用分布宝石,docs 这里中的cdf函数了。
下一个阶段是将值传递给这个函数,该函数将返回一个百分位数。
确保使用'1 over beta‘计算,否则它将无法工作。
percentile = 100 - (100 * Distribution::Gamma::Ruby_.cdf(x, alpha, 1 / beta))你可能注意到我也算过@theta
这是一个单独的函数,这意味着我也可以通过传递百分位数从伽马分布中返回值。用得像这样
value = Distribution::Gamma.quantile(0.5, alpha, theta)这个函数也被称为“逆cdf”、“逆累积分布函数”、“概率点函数”或“百分位函数”。这里简单地命名为“分位数”。
有关伽马分布的更多信息,请参见wiki。
https://stackoverflow.com/questions/73166080
复制相似问题