def test_statistical_inefficiency_fft_gaussian(): # Run multiple times to get things with and without negative "spikes" at C(1) for i in range(5): x = np.random.normal(size=100000) g0 = timeseries.statisticalInefficiency(x, fast=False) g1 = timeseries.statisticalInefficiency(x, x, fast=False) g2 = timeseries.statisticalInefficiency_fft(x) g3 = timeseries.statisticalInefficiency(x, fft=True) eq(g0, g1, decimal=5) eq(g0, g2, decimal=5) eq(g0, g3, decimal=5) eq(np.log(g0), np.log(1.0), decimal=1) for i in range(5): x = np.random.normal(size=100000) x = np.repeat( x, 3 ) # e.g. Construct correlated gaussian e.g. [a, b, c] -> [a, a, a, b, b, b, c, c, c] g0 = timeseries.statisticalInefficiency(x, fast=False) g1 = timeseries.statisticalInefficiency(x, x, fast=False) g2 = timeseries.statisticalInefficiency_fft(x) g3 = timeseries.statisticalInefficiency(x, fft=True) eq(g0, g1, decimal=5) eq(g0, g2, decimal=5) eq(g0, g3, decimal=5) eq(np.log(g0), np.log(3.0), decimal=1)
def test_statistical_inefficiency_fft_gaussian(): # Run multiple times to get things with and without negative "spikes" at C(1) for i in range(5): x = np.random.normal(size=100000) g0 = timeseries.statisticalInefficiency(x, fast=False) g1 = timeseries.statisticalInefficiency(x, x, fast=False) g2 = timeseries.statisticalInefficiency_fft(x) g3 = timeseries.statisticalInefficiency(x, fft=True) eq(g0, g1, decimal=5) eq(g0, g2, decimal=5) eq(g0, g3, decimal=5) eq(np.log(g0), np.log(1.0), decimal=1) for i in range(5): x = np.random.normal(size=100000) x = np.repeat(x, 3) # e.g. Construct correlated gaussian e.g. [a, b, c] -> [a, a, a, b, b, b, c, c, c] g0 = timeseries.statisticalInefficiency(x, fast=False) g1 = timeseries.statisticalInefficiency(x, x, fast=False) g2 = timeseries.statisticalInefficiency_fft(x) g3 = timeseries.statisticalInefficiency(x, fft=True) eq(g0, g1, decimal=5) eq(g0, g2, decimal=5) eq(g0, g3, decimal=5) eq(np.log(g0), np.log(3.0), decimal=1)
def pymbarDetectEquilibration_fft(self, fast=True, nskip=1): """ More documentation can be found in pymbar timeseries detectEquilibration function """ #results = np.zeros((self.ncols, 3)) results = self.ncols * [4 * [None]] for coli in range(self.ncols): T = (self.cols[coli]).size # Special case if timeseries is constant. if (self.cols[coli]).std() == 0.0: results[coli] = ( 0, 1, 1, np.ones([T - 1], np.float32) ) # Changed from Neff=N to Neff=1 after issue #122 g_t = np.ones([T - 1], np.float32) Neff_t = np.ones([T - 1], np.float32) for t in range(0, T - 1, nskip): try: g_t[t] = ts.statisticalInefficiency_fft( self.cols[coli][t:T]) except ParameterError: # Fix for issue https://github.com/choderalab/pymbar/issues/122 g_t[t] = (T - t + 1) Neff_t[t] = (T - t + 1) / g_t[t] Neff_max = Neff_t.max() t = Neff_t.argmax() g = g_t[t] results[coli] = (t, g, Neff_max, Neff_t) return results
def test_statistical_inefficiency_fft(): X, Y, energy = generate_data() timeseries.statisticalInefficiency_fft(X[0]) timeseries.statisticalInefficiency_fft(X[0]**2) timeseries.statisticalInefficiency_fft(energy[0]) g0 = timeseries.statisticalInefficiency_fft(X[0]) g1 = timeseries.statisticalInefficiency(X[0]) g2 = timeseries.statisticalInefficiency(X[0], X[0]) g3 = timeseries.statisticalInefficiency(X[0], fft=True) eq(g0, g1) eq(g0, g2) eq(g0, g3)
def test_statistical_inefficiency_fft(): X, Y, energy = generate_data() timeseries.statisticalInefficiency_fft(X[0]) timeseries.statisticalInefficiency_fft(X[0] ** 2) timeseries.statisticalInefficiency_fft(energy[0]) g0 = timeseries.statisticalInefficiency_fft(X[0]) g1 = timeseries.statisticalInefficiency(X[0]) g2 = timeseries.statisticalInefficiency(X[0], X[0]) g3 = timeseries.statisticalInefficiency(X[0], fft=True) eq(g0, g1) eq(g0, g2) eq(g0, g3)