Example #1
0
def stats2z_moment(stats):
    # MODIFIED FROM http://statsmodels.sourceforge.net/devel/_modules/statsmodels/stats/moment_helpers.html
    # ADDED count
    mc0, mc1, mc2, skew, kurt = stats.count, nvl(stats.mean, 0), nvl(
        stats.variance, 0), nvl(stats.skew, 0), nvl(stats.kurtosis, 0)

    mz0 = mc0
    mz1 = mc1 * mc0
    mz2 = (mc2 + mc1 * mc1) * mc0
    mc3 = nvl(skew, 0) * (mc2**1.5)  # 3rd central moment
    mz3 = (mc3 + 3 * mc1 * mc2 + mc1**3) * mc0  # 3rd non-central moment
    mc4 = (nvl(kurt, 0) + 3.0) * (mc2**2.0)  # 4th central moment
    mz4 = (mc4 + 4 * mc1 * mc3 + 6 * mc1 * mc1 * mc2 + mc1**4) * mc0

    m = Z_moment(mz0, mz1, mz2, mz3, mz4)
    if DEBUG:
        from util.testing.fuzzytestcase import assertAlmostEqualValue

        globals()["DEBUG"] = False
        try:
            v = z_moment2stats(m, unbiased=False)
            assertAlmostEqualValue(v.count, stats.count)
            assertAlmostEqualValue(v.mean, stats.mean)
            assertAlmostEqualValue(v.variance, stats.variance)
            assertAlmostEqualValue(v.skew, stats.skew)
            assertAlmostEqualValue(v.kurtosis, stats.vkurtosis)
        except Exception, e:
            v = z_moment2stats(m, unbiased=False)
            Log.error("programmer error")
        globals()["DEBUG"] = True
Example #2
0
def z_moment2stats(z_moment, unbiased=True):
    Z = z_moment.S
    N = Z[0]
    if N == 0:
        return Stats()

    mean = Z[1] / N
    Z2 = Z[2] / N
    Z3 = Z[3] / N
    Z4 = Z[4] / N

    if N == 1:
        variance = None
        skew = None
        kurtosis = None
    else:
        variance = (Z2 - mean * mean)
        error = -EPSILON * (abs(Z2) + 1)  # EXPECTED FLOAT ERROR

        if error < variance <= 0:  # TODO: MAKE THIS A TEST ON SIGNIFICANT DIGITS
            variance = 0
            skew = None
            kurtosis = None
        elif variance < error:
            Log.error("variance can not be negative ({{var}})",
                      {"var": variance})
        else:
            mc3 = (Z3 - (3 * mean * variance + mean**3))  # 3rd central moment
            mc4 = (Z4 -
                   (4 * mean * mc3 + 6 * mean * mean * variance + mean**4))
            skew = mc3 / (variance**1.5)
            kurtosis = (mc4 / (variance**2.0)) - 3.0

    stats = Stats(count=N,
                  mean=mean,
                  variance=variance,
                  skew=skew,
                  kurtosis=kurtosis,
                  unbiased=unbiased)

    if DEBUG:
        from util.testing.fuzzytestcase import assertAlmostEqualValue

        globals()["DEBUG"] = False
        v = Null
        try:
            v = stats2z_moment(stats)
            for i in range(5):
                assertAlmostEqualValue(v.S[i], Z[i])
        except Exception, e:
            Log.error(
                "Convertion failed.  Programmer error:\nfrom={{from|indent}},\nresult stats={{stats|indent}},\nexpected param={{expected|indent}}",
                {
                    "from": Z,
                    "stats": stats,
                    "expected": v.S
                }, e)
        globals()["DEBUG"] = True
Example #3
0
    except Exception, e:
        DEBUG_STRANGMAN = False


def chisquare(f_obs, f_exp):
    try:
        py_result = strangman.stats.chisquare(f_obs, f_exp)
    except Exception, e:
        Log.error("problem with call", e)

    if DEBUG_STRANGMAN:
        from util.testing.fuzzytestcase import assertAlmostEqualValue

        sp_result = scipy.stats.chisquare(np.array(f_obs),
                                          f_exp=np.array(f_exp))
        if not assertAlmostEqualValue(sp_result[0],
                                      py_result[0]) and assertAlmostEqualValue(
                                          sp_result[1], py_result[1]):
            Log.error("problem with stats lib")

    return py_result


def stats2z_moment(stats):
    # MODIFIED FROM http://statsmodels.sourceforge.net/devel/_modules/statsmodels/stats/moment_helpers.html
    # ADDED count
    mc0, mc1, mc2, skew, kurt = stats.count, nvl(stats.mean, 0), nvl(
        stats.variance, 0), nvl(stats.skew, 0), nvl(stats.kurtosis, 0)

    mz0 = mc0
    mz1 = mc1 * mc0
    mz2 = (mc2 + mc1 * mc1) * mc0