У меня проблема со странной формулой эксцесса, используемой в документации по Java: http://commons.apache.org/proper/commons-math//javadocs/api-3.0/org/apache/commons/math3/stat/descriptive/moment/Kurtosis.html
Computes the Kurtosis of the available values.
We use the following (unbiased) formula to define kurtosis:
kurtosis = { [n(n+1) / (n -1)(n - 2)(n-3)] sum[(x_i - mean)^4] / std^4 } - [3(n-1)^2 / (n-2)(n-3)]
where n is the number of values, mean is the Mean and std is the StandardDeviation
Note that this statistic is undefined for n < 4. Double.Nan is returned when there is not sufficient data to compute the statistic.
Самое близкое значение, которое я получил от java-программы, я получил, когда использовал эту формулу https://www.itl.nist.gov/div898/handbook/eda/section3/eda35b.htm, но я все еще был выше 0,2 от ожидаемого значения.
Я не понимаю квадратные скобки, и когда я попытался реализовать формулу, я был на 3 порядка от требуемого значения.
Можно ли перевести формулу документации java для перевода либо в Ruby, либо в какую-то математическую запись, которая имеет смысл?
первая попытка
Это мой перевод на Ruby, которыйпримерно на 0,2 больше, чем значение, создаваемое Java-программой.
def kurtosis
return 0 if @values.length == 1
cached_mean = mean
n = @values.length.to_f
rku = @values.sum { |x| (x - cached_mean)**4 }
rkb = standard_deviation**4
real_kurtosis = rku / rkb
bk = (n * (n + 1)) / ((n - 1) * (n - 2) * (n - 3))
ak = (3 * (n - 1)**2) / ((n - 2) * (n - 3))
(bk * real_kurtosis) - ak
end