def __init__(self, z1, z2, x, w, N1, N2, M, intercept_hsq1=None, intercept_hsq2=None, intercept_gencov=None, n_blocks=200, slow=False, twostep=None): self.intercept_gencov = intercept_gencov self._negative_hsq = None n_snp, n_annot = x.shape hsq1 = Hsq(np.square(z1), x, w, N1, M, n_blocks=n_blocks, intercept=intercept_hsq1, slow=slow, twostep=twostep) hsq2 = Hsq(np.square(z2), x, w, N2, M, n_blocks=n_blocks, intercept=intercept_hsq2, slow=slow, twostep=twostep) gencov = Gencov(z1, z2, x, w, N1, N2, M, hsq1.tot, hsq2.tot, hsq1.intercept, hsq2.intercept, n_blocks, intercept_gencov=intercept_gencov, slow=slow, twostep=twostep) gencov.N1 = None # save memory gencov.N2 = None self.hsq1, self.hsq2, self.gencov = hsq1, hsq2, gencov if (hsq1.tot <= 0 or hsq2.tot <= 0): self._negative_hsq = True self.rg_ratio = self.rg = self.rg_se = 'NA' self.p = self.z = 'NA' else: rg_ratio = np.array( gencov.tot / np.sqrt(hsq1.tot * hsq2.tot)).reshape((1, 1)) denom_delete_values = np.sqrt( np.multiply(hsq1.tot_delete_values, hsq2.tot_delete_values)) rg = jk.RatioJackknife( rg_ratio, gencov.tot_delete_values, denom_delete_values) self.rg_jknife = float(rg.jknife_est) self.rg_se = float(rg.jknife_se) self.rg_ratio = float(rg_ratio) self.p, self.z = p_z_norm(self.rg_ratio, self.rg_se)
def setUp(self): self.numer_delete_vals = np.matrix(np.arange(1, 11)).T self.denom_delete_vals = -np.matrix(np.arange(1, 11)).T self.denom_delete_vals[9, 0] += 1 self.est = np.matrix(-1) self.num_blocks = self.numer_delete_vals.shape[0] self.jknife = jk.RatioJackknife(self.est, self.numer_delete_vals, self.denom_delete_vals)
def setUp(self): self.numer_delete_vals = np.matrix( np.vstack((np.arange(1, 11), 2 * np.arange(1, 11)))).T x = -np.arange(1, 11) x[9] += 1 self.denom_delete_vals = np.vstack((x, 4 * x)).T self.est = np.matrix((-1, -0.5)) self.num_blocks = self.numer_delete_vals.shape[0] self.jknife = jk.RatioJackknife(self.est, self.numer_delete_vals, self.denom_delete_vals)
def _prop(self, jknife, M, Nbar, cat, tot): '''Convert total h2 and per-category h2 to per-category proportion h2 or gencov.''' n_annot = self.n_annot n_blocks = jknife.delete_values.shape[0] numer_delete_vals = np.multiply( M, jknife.delete_values[:, 0:n_annot]) / Nbar # (n_blocks, n_annot) denom_delete_vals = np.sum( numer_delete_vals, axis=1).reshape((n_blocks, 1)) denom_delete_vals = np.dot(denom_delete_vals, np.ones((1, n_annot))) prop = jk.RatioJackknife( cat / tot, numer_delete_vals, denom_delete_vals) return prop.est, prop.jknife_cov, prop.jknife_se
def test_1d(self): self.numer_delete_values = np.matrix(np.arange(1, 11)).T self.denom_delete_values = -np.matrix(np.arange(1, 11)).T self.denom_delete_values[9, 0] += 1 self.est = np.matrix(-1) self.n_blocks = self.numer_delete_values.shape[0] self.jknife = jk.RatioJackknife(self.est, self.numer_delete_values, self.denom_delete_values) self.assertEqual(self.jknife.est, self.est) assert_array_almost_equal(self.jknife.pseudovalues[0:9, :], -1) self.assertEqual(self.jknife.pseudovalues[9, :], 0) assert_array_almost_equal(self.jknife.jknife_est[0, 0], -0.9) assert_array_almost_equal(self.jknife.jknife_se, 0.1) assert_array_almost_equal(self.jknife.jknife_var, 0.01) assert_array_almost_equal(self.jknife.jknife_cov, 0.01)
def test_2d(self): self.numer_delete_values = np.matrix( np.vstack((np.arange(1, 11), 2 * np.arange(1, 11)))).T x = -np.arange(1, 11) x[9] += 1 self.denom_delete_values = np.vstack((x, 4 * x)).T self.est = np.matrix((-1, -0.5)) self.n_blocks = self.numer_delete_values.shape[0] self.jknife = jk.RatioJackknife(self.est, self.numer_delete_values, self.denom_delete_values) assert_array_almost_equal(self.jknife.est, self.est) self.assertEqual(self.jknife.est.shape, (1, 2)) assert_array_almost_equal(self.jknife.pseudovalues[0:9, 0], -1) self.assertEqual(self.jknife.pseudovalues[9, 0], 0) assert_array_almost_equal(self.jknife.pseudovalues[0:9, 1], -0.5) self.assertEqual(self.jknife.pseudovalues[9, 1], 0) assert_array_almost_equal(self.jknife.jknife_est, [[-0.9, -0.45]]) assert_array_almost_equal(self.jknife.jknife_se, [[0.1, 0.05]]) assert_array_almost_equal(self.jknife.jknife_var, [[0.01, 0.0025]]) assert_array_almost_equal(self.jknife.jknife_cov, np.matrix(((0.01, 0.005), (0.005, 0.0025))))