F#中偏度的递归公式 [英] Recursive formula for skewness in F#

查看:69
本文介绍了F#中偏度的递归公式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用Knuth的递归公式在F#中创建偏度函数,该公式基于乔恩·哈罗普(Jon Harrop)F#的科学家方差公式.

I am trying to make a skewness function in F# using Knuth's recursive formula, based on the formula for the variance in Jon Harrop's F# for scientists.

这是我的代码(带有辅助功能)

Here is my code, (with an auxilliary function)

let skewness_aux (m, m2, m3, k) x =
     let m'  = m  + (x - m)/k
     let m2' = m2 + ((x - m)*(x - m)*(k-1.0))/k
     m', m2', m3 + (x-m)*(x-m)*(x-m)*(k-1.0)*(k-2.0)/(k*k)-(3.0*(x-m)*m2)/k, k + 1.0;;

let skewness xs =
    let _, m2, m3, n2 = Seq.fold skewness_aux (0.0, 0.0, 0.0, 1.0) xs
    (sqrt(n2) * m3)/(sqrt (m2*m2*m2));;

最后是一点测试-

 skewness [|2.0; 2.0; 3.0|];;

哪个应该返回1/(sqrt2)大约0.707107,但是却给了我0.8164965809

Which should return 1/(sqrt2) approx 0.707107, but is instead giving me 0.8164965809

任何比我头脑更聪明的人都对为什么它不起作用有任何建议?公式看起来正确.我正在使用有关更高矩函数的Wikipedia页面以及Pebay在2008年关于交叉检查主题的论文.

Any wiser heads than mine got any advice on why it isn't working? The formulas look correct. I am using the wikipedia page on algorithms for higher moment functions as well as Pebay's 2008 paper on the subject to cross check.

在此先感谢您提供的所有帮助.

Many thanks in advance for any and all help.

推荐答案

您的skewness_aux函数返回m,m2,m3和k + 1.因此,您需要使用sqrt(n2-1),而不是sqrt(n2).

Your skewness_aux function returns m, m2, m3, and k+1. Therefore, you need to use sqrt(n2-1), not sqrt(n2).

这篇关于F#中偏度的递归公式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆