コード例 #1
0
ファイル: stats.py プロジェクト: rv404674/TUID
def Stats2ZeroMoment(stats):
    # MODIFIED FROM http://statsmodels.sourceforge.net/devel/_modules/statsmodels/stats/moment_helpers.html
    # ADDED count
    mc0, mc1, mc2, skew, kurt = stats.count, coalesce(stats.mean, 0), coalesce(stats.variance, 0), coalesce(stats.skew, 0), coalesce(stats.kurtosis, 0)

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

    m = ZeroMoment(mz0, mz1, mz2, mz3, mz4)
    if DEBUG:
        from mo_testing.fuzzytestcase import assertAlmostEqualValue

        globals()["DEBUG"] = False
        try:
            v = ZeroMoment2Stats(m)
            assertAlmostEqualValue(v.count, stats.count, places=10)
            assertAlmostEqualValue(v.mean, stats.mean, places=10)
            assertAlmostEqualValue(v.variance, stats.variance, places=10)
            assertAlmostEqualValue(v.skew, stats.skew, places=10)
            assertAlmostEqualValue(v.kurtosis, stats.kurtosis, places=10)
        except Exception as e:
            v = ZeroMoment2Stats(m)
            Log.error("programmer error")
        globals()["DEBUG"] = True
    return m
コード例 #2
0
def Stats2ZeroMoment(stats):
    # MODIFIED FROM http://statsmodels.sourceforge.net/devel/_modules/statsmodels/stats/moment_helpers.html
    # ADDED count
    mc0, mc1, mc2, skew, kurt = stats.count, coalesce(stats.mean, 0), coalesce(
        stats.variance, 0), coalesce(stats.skew,
                                     0), coalesce(stats.kurtosis, 0)

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

    m = ZeroMoment(mz0, mz1, mz2, mz3, mz4)
    if DEBUG:
        from mo_testing.fuzzytestcase import assertAlmostEqualValue

        globals()["DEBUG"] = False
        try:
            v = ZeroMoment2Stats(m)
            assertAlmostEqualValue(v.count, stats.count, places=10)
            assertAlmostEqualValue(v.mean, stats.mean, places=10)
            assertAlmostEqualValue(v.variance, stats.variance, places=10)
            assertAlmostEqualValue(v.skew, stats.skew, places=10)
            assertAlmostEqualValue(v.kurtosis, stats.kurtosis, places=10)
        except Exception as e:
            v = ZeroMoment2Stats(m)
            Log.error("programmer error")
        globals()["DEBUG"] = True
    return m
コード例 #3
0
def ZeroMoment2Stats(z_moment):
    Z = z_moment.S
    if not Z:
        return Stats()
    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:
        if almost_equal(Z2, mean * mean, digits=9):
            variance = 0
            skew = None
            kurtosis = None
        else:
            variance = Z2 - mean * mean
            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)

    if DEBUG:
        from mo_testing.fuzzytestcase import assertAlmostEqualValue

        globals()["DEBUG"] = False
        v = Null
        try:
            v = Stats2ZeroMoment(stats)
            for i in range(5):
                assertAlmostEqualValue(v.S[i], Z[i], places=7)
        except Exception as e:
            Log.error(
                "Conversion failed.  Programmer error:\nfrom={{from|indent}},\nresult stats={{stats|indent}},\nexpected param={{expected|indent}}",
                {"from": Z},
                stats=stats,
                expected=v.S,
                cause=e,
            )
        globals()["DEBUG"] = True

    return stats
コード例 #4
0
ファイル: stats.py プロジェクト: rv404674/TUID
def ZeroMoment2Stats(z_moment):
    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:
        if almost_equal(Z2, mean * mean, digits=9):
            variance = 0
            skew = None
            kurtosis = None
        else:
            variance = (Z2 - mean * mean)
            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
    )

    if DEBUG:
        from mo_testing.fuzzytestcase import assertAlmostEqualValue

        globals()["DEBUG"] = False
        v = Null
        try:
            v = Stats2ZeroMoment(stats)
            for i in range(5):
                assertAlmostEqualValue(v.S[i], Z[i], places=7)
        except Exception as e:
            Log.error("Conversion failed.  Programmer error:\nfrom={{from|indent}},\nresult stats={{stats|indent}},\nexpected param={{expected|indent}}",
                {"from": Z},
                stats=stats,
                expected=v.S,
                cause=e
            )
        globals()["DEBUG"] = True

    return stats
コード例 #5
0
def chisquare(f_obs, f_exp):
    try:
        py_result = strangman.stats.chisquare(f_obs, f_exp)
    except Exception as e:
        Log.error("problem with call", e)

    if DEBUG_STRANGMAN:
        from mo_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],
                                      digits=9) and assertAlmostEqualValue(
                                          sp_result[1],
                                          py_result[1],
                                          delta=1e-8):
            Log.error("problem with stats lib")

    return py_result
コード例 #6
0
ファイル: stats.py プロジェクト: rv404674/TUID
def chisquare(f_obs, f_exp):
    try:
        py_result = strangman.stats.chisquare(
            f_obs,
            f_exp
        )
    except Exception as e:
        Log.error("problem with call", e)

    if DEBUG_STRANGMAN:
        from mo_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], digits=9) and assertAlmostEqualValue(sp_result[1], py_result[1], delta=1e-8):
            Log.error("problem with stats lib")

    return py_result