コード例 #1
0
def examples_normexpand():
    skewnorm = SkewNorm_gen()
    rvs = skewnorm.rvs(5, size=100)
    normexpan = NormExpan_gen(rvs, mode="sample")

    smvsk = stats.describe(rvs)[2:]
    print "sample: mu,sig,sk,kur"
    print smvsk

    dmvsk = normexpan.stats(moments="mvsk")
    print "normexpan: mu,sig,sk,kur"
    print dmvsk
    print "mvsk diff distribution - sample"
    print np.array(dmvsk) - np.array(smvsk)
    print "normexpan attributes mvsk"
    print mc2mvsk(normexpan.cnt)
    print normexpan.mvsk

    mc, mnc = mvsk2m(dmvsk)
    print "central moments"
    print mc
    print "non-central moments"
    print mnc

    pdffn = pdf_moments(mc)
    print "\npdf approximation from moments"
    print "pdf at", mc[0] - 1, mc[0] + 1
    print pdffn([mc[0] - 1, mc[0] + 1])
    print normexpan.pdf([mc[0] - 1, mc[0] + 1])
コード例 #2
0
    def __init__(self, args, **kwds):
        # todo: replace with super call
        distributions.rv_continuous.__init__(
            self,
            name="Normal Expansion distribution",
            shapes="alpha",
            extradoc="""
        The distribution is defined as the Gram-Charlier expansion of
        the normal distribution using the first four moments. The pdf
        is given by

        pdf(x) = (1+ skew/6.0 * H(xc,3) + kurt/24.0 * H(xc,4))*normpdf(xc)

        where xc = (x-mu)/sig is the standardized value of the random variable
        and H(xc,3) and H(xc,4) are Hermite polynomials

        Note: This distribution has to be parameterized during
        initialization and instantiation, and does not have a shape
        parameter after instantiation (similar to frozen distribution
        except for location and scale.) Location and scale can be used
        as with other distributions, however note, that they are relative
        to the initialized distribution.
        """,
        )
        # print args, kwds
        mode = kwds.get("mode", "sample")

        if mode == "sample":
            mu, sig, sk, kur = stats.describe(args)[2:]
            self.mvsk = (mu, sig, sk, kur)
            cnt = mvsk2mc((mu, sig, sk, kur))
        elif mode == "mvsk":
            cnt = mvsk2mc(args)
            self.mvsk = args
        elif mode == "centmom":
            cnt = args
            self.mvsk = mc2mvsk(cnt)
        else:
            raise ValueError, "mode must be 'mvsk' or centmom"

        self.cnt = cnt
        # self.mvsk = (mu,sig,sk,kur)
        # self._pdf = pdf_moments(cnt)
        self._pdf = pdf_mvsk(self.mvsk)