commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "" <>
Subject Re: [Math] Design of "o.a.c.m.stat.descriptive.moment"
Date Mon, 16 May 2016 23:42:12 GMT
Hi Giles,
I ran into the same problem. Many months ago I asked about higher order
moments in Multivariate Stats. I pulled the code and implemented third and
fourth order moments in MVStats. I had to "unprotect" some methods and
mostly got everything working. The problem arose (I think) in one of the
unit tests for AggregateBlahBlah where the code actually uses stat
quantities (like std dev) to go backwards to get 2nd moment. I gave up when
I saw that :)
I think it could be reimplemented easier. Why not compose a class called
StatisticalMoments which contains 1st, 2nd, 3rd, 4th moments as hard coded
variables, with hard coded methods for updating those moments and merging
them. Higher order moments (than fourth) could be contained in array and
the requisite update methods could be the generic expressions for n-order
update / merge.
In this way, all other stat classes could inherit the StatisticalMoments
Maybe you have all thought of doing it this way already, and it failed
spectacularly for some reason :)
Mike Brzustowicz

On Sat, May 7, 2016 at 10:11 AM, Gilles <>

> Hi.
> Looking at some way out for MATH-1228, I uncovered what looks to me
> as an abuse of inheritance: "ThirdMoment" extends "SecondMoment".
> "Skewness" contains a "ThirdMoment" instance variable but, in order
> to compute its value, "m3" (cf. "getResult()"), it also must read
> the result of that variable's parent type ("SecondMoment"), i.e. "m2".
> IMO, this makes no sense at the conceptual level: a third moment is
> _not_ a second moment.
> And the problem is compounded as:
>  * "FourthMoment" inherits from "ThirdMoment", and
>  * "SecondMoment" extends "FirstMoment".
> In this strange hierarchy, the fields are all "protected" in order
> to be accessed from subclasses, making the whole thing fragile and
> inefficient (as pointed out by the OP of MATH-1228).
> From a programming POV, the design is flawed because "getResult()"
> is, rightfully, intended to be overridden in subclasses.
> However, "protected" access is used to work around that very purpose
> of inheritance.
> And thus, good practice (cf. MATH-758) cannot be implemented.
> Did I miss the point of this package's design?
> Or am I right that it should be completely redesigned?
> Regards,
> Gilles
> ---------------------------------------------------------------------
> To unsubscribe, e-mail:
> For additional commands, e-mail:

  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message