commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Luc Maisonobe (JIRA)" <>
Subject [jira] Updated: (MATH-296) LoessInterpolator.smooth() not working correctly
Date Fri, 18 Sep 2009 20:31:16 GMT


Luc Maisonobe updated MATH-296:

    Attachment: math-296-test.patch

The math-296-test.patch is a set of two test cases that reproduce the problem.

Running the first test shows that at the end of iteration 0, the weights for points at indices
4 and 5 are set to 0. At iteration 1, when computing point i=4, the bandwidth is such that
ileft=3 and iright=4. For k=3, we get w=0 because dist=4 and denom=1/4. For k=4 and k=5, we
get w=0 because robustness[k]=0. So all w are 0, sumWeights=0 and since it is used in some
divisions, NaN appears.

I think their should be some protection against this case somewhere. I'll ask the author of
the original contribution about this.

> LoessInterpolator.smooth() not working correctly
> ------------------------------------------------
>                 Key: MATH-296
>                 URL:
>             Project: Commons Math
>          Issue Type: Bug
>    Affects Versions: 2.0
>         Environment: Java 1.6 on Vista
>            Reporter: Romeo Palijan
>         Attachments: math-296-test.patch
> I have been comparing LoessInterpolator.smooth output with the loessFit output from R
(, probably the most widely used loess implementation) and have had strangely
different numbers. I have created a small set to test the difference and something seems to
be wrong with the smooth method but I do no know what and I do not understand the code.
> *Example 1*
> |x-input: |1.5| 3.0| 6| 8| 12|13| 22| 24|28|31|
> |y-input: |3.1|6.1|3.1|2.1|1.4|5.1|5.1|6.1|7.1|7.2|
> |Output LoessInterpolator.smooth():|NaN|NaN|NaN|NaN|NaN|NaN|NaN|NaN|NaN|NaN|
> |Output from loessFit() from R: |3.191178027520974|3.0407201231474037|2.7089538903778636|2.7450823274490297|4.388011000549519|4.60078952381848|5.2988217587114805|5.867536388457898|6.7797794777879705|7.444888598397342|
> *Example 2 (same x-values, y-values just floored)*
> |x-input: |1.5| 3.0| 6| 8| 12|13| 22| 24|28|31|
> |y-input: |3|6|3|2|1|5|5|6|7|7|
> |Output LoessInterpolator.smooth(): |3|6|3|2|0.9999999999999005|5.0000000000001705|5|5.999999999999972|7|6.999999999999967|
> |Output from loessFit() from R: |3.091423927353068|2.9411521572524237|2.60967950675505|2.7421759322272248|4.382996912300442|4.646774316632562|5.225153658563424|5.768301917477015|6.637079139313073|7.270482144410326|
> As you see the output is practically the replicated y-input.
> At this point this funtionality is critical for us but I could not find any other suitable
java-implementation. Help. Maybe this strange behaviour gives someone a clue?

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message