3
我现在正适应我的formula for skewness在F#中做一个峰度函数。不幸的是,它再次返回错误的结果。f# - 峰度的递推公式
这里是我的代码
let kurtosis_aux (m, m2, m3, m4, k) x =
m + (x - m)/k,
m2 + ((x - m)*(x - m)*(k - 1.0))/k,
m3 + ((x - m)*(x - m)*(x - m)*(k - 1.0)*(k - 2.0))/(k * k) - (3.0 * (x - m) * m2)/k,
m4 + ((x - m)*(x - m)*(x - m)*(x - m)*(k - 1.0)*(k * k - (3.0 * k) + 3.0))/(k * k * k) + 6.0 * (x - m)*(x - m)* m2/(k * k) - (4.0*(x - m)* m3)/k ,
k + 1.0;;
let kurtosis xs =
let _, m2, m3, m4, n = Seq.fold kurtosis_aux (0.0, 0.0, 0.0, 0.0, 1.0) xs
((n - 1.0) * m4/(m2 * m2)) - 3.0;;
最后,我测试在一个小载体,并应该得到约2.94631
kurtosis [|9.0; 2.0; 6.0; 3.0; 29.0|];;
但不是FSI返回-0.05369308728。
该错误必须在kurtosis_aux函数的部分m4或峰度函数本身中。其他变量都用在偏斜度函数中并正常工作。
再次,我非常感谢任何和所有的帮助。
应该再次添加,我使用Knuth的增量算法来计算时刻,我想要的公式可以在这里找到http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance –