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
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
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
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
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
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