[SciPy-User] problem with computing moments of normal distribution

josef.pktd@gmai... josef.pktd@gmai...
Wed Oct 14 07:43:16 CDT 2009


On Wed, Oct 14, 2009 at 6:12 AM, Mark Bakker <markbak@gmail.com> wrote:
> Hello List, I seem to have trouble computing the moments of a normal
> distribution when the 'loc' keyword (I know, that's the mean in this case)
> is specified.
> Any ideas? Here's my output:
>
> In [207]: f = scipy.stats.norm()
> In [208]: f.moment(1) # works
> Out[208]: 0.0
> In [209]: f = scipy.stats.norm(loc=1)
> In [210]: f.moment(1) # doesn't work
> ---------------------------------------------------------------------------
> TypeError                                 Traceback (most recent call last)
> /Users/mark/models/whpa/brad/timeseriesmodel.py in <module>()
> ----> 1
>       2
>       3
>       4
>       5
> /Library/Frameworks/Python.framework/Versions/5.0.0/lib/python2.5/site-packages/scipy/stats/distributions.py
> in moment(self, n)
>     131         return self.dist.stats(*self.args,**kwds)
>     132     def moment(self,n):
> --> 133         return self.dist.moment(n,*self.args,**self.kwds)
>     134     def entropy(self):
>     135         return self.dist.entropy(*self.args,**self.kwds)
> TypeError: moment() got an unexpected keyword argument 'loc'
>
> _______________________________________________
> SciPy-User mailing list
> SciPy-User@scipy.org
> http://mail.scipy.org/mailman/listinfo/scipy-user
>
>

The current moment method does not support loc and scale, only the
standard distribution.

    def moment(self, n, *args):
        """
        n'th order non-central moment of distribution

        Parameters
        ----------
        n: int, n>=1
            order of moment

        arg1, arg2, arg3,... : array-like
            The shape parameter(s) for the distribution (see docstring of the
            instance object for more information)

        """

You can get mean, variance, skew and kurtosis through norm.stats

>>> stats.norm.stats(1, loc=5, scale=2, moments = 'mvsk')
(array(5.0), array(4.0), array(0.0), array(0.0))

It is possible to recover the central and non-central first four
moments from mvsk ( I have some helper function for this somewhere).
If you are just interested in the first two moments, then the
translation is very short.

However, moments higher than 2, including skew and kurtosis, are not
fully bugfixed. I know some distributions have wrong higher moments
(ncf?), but I don't have yet a generic test function to verify the
values for all distributions, and it is slow to find a reference and
compare the wrong formulas. Some other problems with moments (and
stats) are for cases where the variance is infinite.

You could file an enhancement ticket for `moment`. Without looking up
some references, I don't know how loc and scale will affect the
non-central moments higher than the second. If you can work this out,
then it will be sooner that the enhancement of `moment` to handle loc
and scale will get into scipy.

I'm sorry for not having a more positive answer, there are still a few
gaps in stats.distributions.

Josef


More information about the SciPy-User mailing list