From 8c7798a6598e0d1c44bc9860a005768f4fb00bc1 Mon Sep 17 00:00:00 2001 From: Fran Urbano Date: Tue, 15 Jun 2021 22:01:13 +0200 Subject: [PATCH 1/6] Fix machine error negative values on m2 --- src/jarque_bera.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/jarque_bera.jl b/src/jarque_bera.jl index 42f43977..6dc6a3cc 100644 --- a/src/jarque_bera.jl +++ b/src/jarque_bera.jl @@ -63,7 +63,7 @@ function JarqueBeraTest(y::AbstractVector{T}) where T<:Real m4r += yi^4 / n end # compute central moments (http://mathworld.wolfram.com/CentralMoment.html) - m2 = -m1r^2 + m2r + m2 = abs(-m1r^2 + m2r) m3 = 2 * m1r^3 - 3 * m1r * m2r + m3r m4 = -3 * m1r^4 + 6 * m1r^2 * m2r - 4 * m1r * m3r + m4r From 0f3f4c6de82f34581a5d05fcdbafc2c9e770173b Mon Sep 17 00:00:00 2001 From: Fran Urbano Date: Tue, 15 Jun 2021 23:46:44 +0200 Subject: [PATCH 2/6] Fix machine error negative values on m2 --- src/jarque_bera.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/jarque_bera.jl b/src/jarque_bera.jl index 6dc6a3cc..97762ff3 100644 --- a/src/jarque_bera.jl +++ b/src/jarque_bera.jl @@ -63,7 +63,7 @@ function JarqueBeraTest(y::AbstractVector{T}) where T<:Real m4r += yi^4 / n end # compute central moments (http://mathworld.wolfram.com/CentralMoment.html) - m2 = abs(-m1r^2 + m2r) + m2 = max(0.0,-m1r^2 + m2r) m3 = 2 * m1r^3 - 3 * m1r * m2r + m3r m4 = -3 * m1r^4 + 6 * m1r^2 * m2r - 4 * m1r * m3r + m4r From 017ace875d46e16d0e5b1a5de02616546b1b7d15 Mon Sep 17 00:00:00 2001 From: Fran Urbano Date: Wed, 16 Jun 2021 08:43:20 +0200 Subject: [PATCH 3/6] Update jarque_bera.jl Fix machine error negative values on m2. Fix NaN when m2 equals 0. Improve performance. --- src/jarque_bera.jl | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/jarque_bera.jl b/src/jarque_bera.jl index 97762ff3..f0d399df 100644 --- a/src/jarque_bera.jl +++ b/src/jarque_bera.jl @@ -57,13 +57,14 @@ function JarqueBeraTest(y::AbstractVector{T}) where T<:Real M = Base.promote_op(/, T, typeof(n)) m1r = m2r = m3r = m4r = zero(M) @inbounds for yi in y # compute raw moments - m1r += yi / n - m2r += yi^2 / n - m3r += yi^3 / n - m4r += yi^4 / n + m1r += y1 = yi / n + m2r += y2 = y1 * y1 * n + m3r += y3 = y1 * y2 * n + m4r += y4 = y1 * y3 * n end # compute central moments (http://mathworld.wolfram.com/CentralMoment.html) - m2 = max(0.0,-m1r^2 + m2r) + m2 = -m1r^2 + m2r + m2 <= 0 && return JarqueBeraTest(n, n * 9 / 24, 0, 0) m3 = 2 * m1r^3 - 3 * m1r * m2r + m3r m4 = -3 * m1r^4 + 6 * m1r^2 * m2r - 4 * m1r * m3r + m4r From d2fb8b0ad14319fb6cfcc1574d133254844f6aaf Mon Sep 17 00:00:00 2001 From: Fran Urbano Date: Wed, 16 Jun 2021 10:06:59 +0200 Subject: [PATCH 4/6] Update jarque_bera.jl avoid last operation machine error problems --- src/jarque_bera.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/jarque_bera.jl b/src/jarque_bera.jl index f0d399df..b4badf4f 100644 --- a/src/jarque_bera.jl +++ b/src/jarque_bera.jl @@ -64,7 +64,7 @@ function JarqueBeraTest(y::AbstractVector{T}) where T<:Real end # compute central moments (http://mathworld.wolfram.com/CentralMoment.html) m2 = -m1r^2 + m2r - m2 <= 0 && return JarqueBeraTest(n, n * 9 / 24, 0, 0) + m2^(3/2) <= 0 || m2^2 == 0 && return JarqueBeraTest(n, n * 9 / 24, 0, 0) m3 = 2 * m1r^3 - 3 * m1r * m2r + m3r m4 = -3 * m1r^4 + 6 * m1r^2 * m2r - 4 * m1r * m3r + m4r From 7590cbe3221792639d82462f43306a298032b0ec Mon Sep 17 00:00:00 2001 From: Fran Urbano Date: Wed, 16 Jun 2021 10:18:47 +0200 Subject: [PATCH 5/6] Update jarque_bera.jl Fix negative machine error values --- src/jarque_bera.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/jarque_bera.jl b/src/jarque_bera.jl index b4badf4f..45f24f7c 100644 --- a/src/jarque_bera.jl +++ b/src/jarque_bera.jl @@ -64,7 +64,7 @@ function JarqueBeraTest(y::AbstractVector{T}) where T<:Real end # compute central moments (http://mathworld.wolfram.com/CentralMoment.html) m2 = -m1r^2 + m2r - m2^(3/2) <= 0 || m2^2 == 0 && return JarqueBeraTest(n, n * 9 / 24, 0, 0) + m2^(3/2) <= 0 || m2^2 <= 0 && return JarqueBeraTest(n, n * 9 / 24, 0, 0) m3 = 2 * m1r^3 - 3 * m1r * m2r + m3r m4 = -3 * m1r^4 + 6 * m1r^2 * m2r - 4 * m1r * m3r + m4r From db8ea787017aec4bcfb20603956688a299cc38c3 Mon Sep 17 00:00:00 2001 From: Fran Urbano Date: Wed, 16 Jun 2021 10:25:37 +0200 Subject: [PATCH 6/6] Update jarque_bera.jl --- src/jarque_bera.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/jarque_bera.jl b/src/jarque_bera.jl index 45f24f7c..67f20d36 100644 --- a/src/jarque_bera.jl +++ b/src/jarque_bera.jl @@ -64,7 +64,7 @@ function JarqueBeraTest(y::AbstractVector{T}) where T<:Real end # compute central moments (http://mathworld.wolfram.com/CentralMoment.html) m2 = -m1r^2 + m2r - m2^(3/2) <= 0 || m2^2 <= 0 && return JarqueBeraTest(n, n * 9 / 24, 0, 0) + (m2 <= 0 || m2^(3/2) <= 0 || m2^2 <= 0) && return JarqueBeraTest(n, n * 9 / 24, 0, 0) m3 = 2 * m1r^3 - 3 * m1r * m2r + m3r m4 = -3 * m1r^4 + 6 * m1r^2 * m2r - 4 * m1r * m3r + m4r