def cor_expected(self, ts_key, standardize=False): x, y, sol = self.ts[ts_key][0:3] decimal = self.ts[ts_key][3] if len(self.ts[ts_key]) == 4 else 7 corr = corsubs(x, y, standardized=standardize) assert_almost_equal(corr, sol, decimal=decimal)
def lagcor_is_shiftcor(self, h): a = self.a b = self.b outlen = a.shape[-1] - h assert_almost_equal(lagcor(a, b, h), corsubs(shift(a, h), shift(b, 0, outlen)))
def lagcor_is_trimcor(self, h): a = self.a b = self.b assert_almost_equal(lagcor(a, b, h), corsubs(trim(a, h=h), trim(b, h=-h)))
def test_axis_arg(self): assert_almost_equal(corsubs(self.a_3dim.T, self.b_3dim.T, axis=0), self.corrs_3dim.T, decimal=3)
def test_shape_mismatch(self): try: corsubs(np.arange(10), np.arange(11)) raise BaseException('returned correlation for mismatched dims') except ValueError: pass
def lagcor_equal_subcor(self, key, standardized=False): x, y = self.ts[key][0:2] assert_almost_equal(lagcor(x, y, 0), corsubs(x, y))
def test_cor_3d(self): #test against all data in giant 3d mat assert_almost_equal(corsubs(self.a_3dim, self.b_3dim), self.corrs_3dim, decimal=3)
def lagcor_is_trimcor(self, h): a = self.a b = self.b assert_almost_equal(lagcor(a,b,h), corsubs(trim(a, h=h), trim(b, h=-h)))
def cor_expected(self, ts_key, standardize=False): x,y,sol = self.ts[ts_key][0:3] decimal = self.ts[ts_key][3] if len(self.ts[ts_key]) == 4 else 7 corr = corsubs(x,y, standardized=standardize) assert_almost_equal(corr, sol, decimal=decimal)
def lagcor_is_shiftcor(self, h): a = self.a b = self.b outlen = a.shape[-1]-h assert_almost_equal(lagcor(a, b, h), corsubs(shift(a, h), shift(b, 0, outlen)))
def lagcor_equal_subcor(self, key, standardized=False): x, y = self.ts[key][0:2] assert_almost_equal(lagcor(x,y,0), corsubs(x,y))
np.random.seed(10) dims = (2,2, 10) nsubs = 3 subs = [np.random.random(dims) for ii in range(nsubs)] for M in subs: M[0,0] = range(dims[-1]) #0,0 is 1:N for M in subs: standardize(M, inplace=True) subs[0][1,1] = np.NAN #1,1 sub 0 has a NaN timecourse C_all = crosscor(subs, standardized=True) C_all[1,1,0] = np.NAN isc1 = intersubcorr(C_all) M_ttl = np.nansum(subs, axis=0) isc2 = np.array([corsubs(M, M_ttl-M) for M in subs]).transpose([1,2,0]) isc3_list = [] for M in subs: r_all = corsubs(M, M_ttl) s_all = np.std(M_ttl, axis=-1, ddof=1) s_i = np.std(M, axis=-1, ddof=1) M_cors = (r_all*s_all - s_i) / \ np.sqrt(s_i**2 + s_all**2 - 2*s_i*s_all*r_all) #wherry formula isc3_list.append(M_cors) isc3 = np.array(isc3_list).transpose([1,2,0]) def test_intersubcorrXmeantc(): assert_almost_equal(isc1, isc2) def test_intersubcorrXwherry():
dims = (2, 2, 10) nsubs = 3 subs = [np.random.random(dims) for ii in range(nsubs)] for M in subs: M[0, 0] = range(dims[-1]) #0,0 is 1:N for M in subs: standardize(M, inplace=True) subs[0][1, 1] = np.NAN #1,1 sub 0 has a NaN timecourse C_all = crosscor(subs, standardized=True) C_all[1, 1, 0] = np.NAN isc1 = intersubcorr(C_all) M_ttl = np.nansum(subs, axis=0) isc2 = np.array([corsubs(M, M_ttl - M) for M in subs]).transpose([1, 2, 0]) isc3_list = [] for M in subs: r_all = corsubs(M, M_ttl) s_all = np.std(M_ttl, axis=-1, ddof=1) s_i = np.std(M, axis=-1, ddof=1) M_cors = (r_all*s_all - s_i) / \ np.sqrt(s_i**2 + s_all**2 - 2*s_i*s_all*r_all) #wherry formula isc3_list.append(M_cors) isc3 = np.array(isc3_list).transpose([1, 2, 0]) def test_intersubcorrXmeantc(): assert_almost_equal(isc1, isc2)