f# - 峰度的递归公式

时间:2011-08-12 12:09:08

标签: recursion f# statistics

我现在正在调整我的formula for skewness以在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或kurtosis函数本身。其他变量都在偏斜函数中使用并正常工作。

我再次非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

删除最后一行中的-3.0。 你用3.0来计算多余的峰度。