[SciPy-User] stats.distributions moments and expect - another round

josef.pktd at gmail.com josef.pktd at gmail.com
Sat Dec 4 09:27:08 EST 2010


I spend most of a day fixing the expect function for stats
distributions and checking mean, variance, skew and kurtosis, and
trying to get it to work for almost all distributions.

expect which uses integrate quad doesn't always work well, but the
results look mostly good except for some fat-tailed distributions.

Below are the comparisons between the stats method of the
distributions and the outcome of expect. The first failure for mean is
at 4 decimals. The tables are discrepancies at two decimals:

invgamma might still have some numerical integration problems, that I
haven't figured out yet. Some other ones still look like incorrect
formulas for skew and kurtosis.

As an aside: I think, finally, that we can add the doc templates to
many distributions, so we have a way of pointing out differences in
parameterization and known numerical problems. For example, I'm still
not sure whether dist.stats contains the correct information about
whether the moments don't exist or are infinite.

Josef


Variance

>>> print SimpleTable(var_, headers=['distname', 'diststats', 'expect'])
==========================================
  distname    diststats         expect
------------------------------------------
   pareto   1.60340572053   1.57246536012
tukeylambda 0.304764722791 0.0268724542194
fatiguelife   884942.25      884940.75504
     t      3.69051720817   3.66604272097
  powerlaw  0.858574961358 0.0641248702779
  invgamma  13.1319516251    5.5288716506
   rdist    1.78002848501   0.526315790145
------------------------------------------

Skew

>>> print SimpleTable(skew, headers=['distname', 'diststats', 'expect'])
===========================================
  distname     diststats         expect
-------------------------------------------
   mielke    7.59540085257   6.91088104518
    fisk     38.7938857832   12.9246301568
  foldnorm   0.971407236222  0.202188769695
  gilbrat    6.18487713863   6.17333365849
 loglaplace  16.9237038681   11.2535633383
fatiguelife 0.0408718910942  3.93239048725
  powerlaw  -0.906960466124 -0.420181302329
    ncf      40747519832.7   8.94481163856
     f       1.93130205529   1.80641432186
  invgamma  -0.477729689377  655.942282864
-------------------------------------------

Kurtosis

>>> print SimpleTable(kurt, headers=['distname', 'diststats', 'expect'])
===========================================
  distname     diststats         expect
-------------------------------------------
   mielke    -149.405089743  362.442518204
    fisk     -224.659270348  2099.30241789
  foldnorm   2.70517285483  -0.294828589688
tukeylambda  -2.98365209914 -0.897302898918
  dweibull   1.90893020344   -1.06484211833
  gilbrat    110.936392176   107.859563214
 loglaplace  -164.332555303   1330.2395564
 genpareto   14.8285714286   14.8119563403
  lognorm    81.1353811489   79.6180870122
    burr     112616.270172   6.21265707889
    ncf     -239984516633.0  13492.9902378
     f        7.9138697318   7.06539159862
    nct      -409040.407062  0.605963897342
  invgamma    -2.866573514   2116889.58176
   rdist     -2.56785479799  -1.53846154515
-------------------------------------------



More information about the SciPy-User mailing list