2011-08-12 9 views
3

F #에서 첨자 화 기능을 사용하기 위해 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 또는 첨도 함수 자체에 있어야합니다. 다른 변수는 모두 skewness 함수에서 사용되고 올바르게 작동합니다.

다시 한번 나는 모든 도움을 주셔서 대단히 감사합니다.

+0

다시 추가해야합니다. Knuth의 점진적 알고리즘을 사용하여 순간을 계산하고 있습니다. 목표로 삼고있는 수식은 http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance에서 확인할 수 있습니다. –

답변

4

마지막 줄에서 -3.0을 제거하십시오. 과 -3.0을 초과하는 첨도를 계산 중입니다.

+0

오. 당신이 그것에 대해 생각할 때 명백한 종류. 대단히 감사합니다 :). –