def scan(bfile, Y, cov, null, wnds, minSnps, i0, i1, perm_i, resfile, F, colCovarType_r='lowrank', rank_r=1, factr=1e7): if perm_i is not None: print(('Generating permutation (permutation %d)' % perm_i)) np.random.seed(perm_i) perm = np.random.permutation(Y.shape[0]) mtSet = limix.MTSet(Y=Y, S_R=cov['eval'], U_R=cov['evec'], F=F, rank=rank_r) mtSet.setNull(null) bim = plink_reader.readBIM(bfile, usecols=(0, 1, 2, 3)) fam = plink_reader.readFAM(bfile, usecols=(0, 1)) print('fitting model') wnd_file = csv.writer(open(resfile, 'w'), delimiter='\t') for wnd_i in range(i0, i1): print( ('.. window %d - (%d, %d-%d) - %d snps' % (wnd_i, int(wnds[wnd_i, 1]), int( wnds[wnd_i, 2]), int(wnds[wnd_i, 3]), int(wnds[wnd_i, -1])))) if int(wnds[wnd_i, -1]) < minSnps: print('SKIPPED: number of snps lower than minSnps') continue #RV = bed.read(PositionRange(int(wnds[wnd_i,-2]),int(wnds[wnd_i,-1]))) RV = plink_reader.readBED(bfile, useMAFencoding=True, blocksize=1, start=int(wnds[wnd_i, 4]), nSNPs=int(wnds[wnd_i, 5]), order='F', standardizeSNPs=False, ipos=2, bim=bim, fam=fam) Xr = RV['snps'] if perm_i is not None: Xr = Xr[perm, :] Xr = np.ascontiguousarray(Xr) rv = mtSet.optimize(Xr, factr=factr) line = np.concatenate([wnds[wnd_i, :], rv['LLR']]) wnd_file.writerow(line) pass
def test_mtSetPC_fixed(self): fbasename = 'mtSetPC_fixed' setTest = limix.MTSet(Y=self.Y, F=self.Xr[:, :2]) optInfo = setTest.optimize(self.Xr) ext = {'Cr': optInfo['Cr'], 'Cn': optInfo['Cn']} if self.write: self.saveStuff(fbasename, ext) RV = self.assess(fbasename, ext) self.assertTrue(RV)
def test_mtSetPCnull_fixed(self): fbasename = 'mtSetPCnull_fixed' setTest = limix.MTSet(Y=self.Y, F=self.Xr) nullMTInfo = setTest.fitNull(cache=False) ext = {'Cg': nullMTInfo['Cg'], 'Cn': nullMTInfo['Cn']} if self.write: self.saveStuff(fbasename, ext) RV = self.assess(fbasename, ext) self.assertTrue(RV)
def test_mtSet_eigenCache(self): fbasename = 'mtSet_base' S, U = LA.eigh(self.XX) setTest = limix.MTSet(Y=self.Y, S_R=S, U_R=U) optInfo = setTest.optimize(self.Xr) ext = {'Cr': optInfo['Cr'], 'Cg': optInfo['Cg'], 'Cn': optInfo['Cn']} RV = self.assess(fbasename, ext) self.assertTrue(RV)
def test_mtSet_base(self): fbasename = 'mtSet_base' setTest = limix.MTSet(self.Y, R=self.XX) optInfo = setTest.optimize(self.Xr) ext = {'Cr': optInfo['Cr'], 'Cg': optInfo['Cg'], 'Cn': optInfo['Cn']} if self.write: self.saveStuff(fbasename, ext) RV = self.assess(fbasename, ext) self.assertTrue(RV)
def test_mtSetNull_eigenCache(self): fbasename = 'mtSetNull' S, U = LA.eigh(self.XX) setTest = limix.MTSet(Y=self.Y, S_R=S, U_R=U) nullMTInfo = setTest.fitNull(cache=False) ext = {'Cg': nullMTInfo['Cg'], 'Cn': nullMTInfo['Cn']} if self.write: self.saveStuff(fbasename, ext) RV = self.assess(fbasename, ext) self.assertTrue(RV)
def fit_null(Y, S_XX, U_XX, nfile, F): """ fit null model Y NxP phenotype matrix S_XX eigenvalues of the relatedness matrix U_XX eigen vectors of the relatedness matrix """ mtSet = limix.MTSet(Y, S_R=S_XX, U_R=U_XX, F=F) RV = mtSet.fitNull(cache=False) params = np.array([RV['params0_g'], RV['params0_n']]) np.savetxt(nfile + '.p0', params) np.savetxt(nfile + '.nll0', RV['NLL0']) np.savetxt(nfile + '.cg0', RV['Cg']) np.savetxt(nfile + '.cn0', RV['Cn'])
if __name__ == '__main__': # generate data N = 5000 f = 10 P = 4 K = 3 Y = sp.randn(N, P) G = 1. * (sp.rand(N, f) < 0.2) X = 1. * (sp.rand(N, f) < 0.2) R = covar_rescale(sp.dot(X, X.T)) R += 1e-4 * sp.eye(N) S_R, U_R = la.eigh(R) F = sp.rand(N, K) # ipdb.set_trace() # mtSet not PC if 1: # mtSetPC setTest = limix.MTSet(Y=Y, F=F) else: # mtSet setTest = limix.MTSet(Y=Y, S_R=S_R, U_R=U_R) nullMTInfo = setTest.fitNull(cache=False) nullSTInfo = setTest.fitNullTraitByTrait(cache=False) optInfo = setTest.optimize(G) optInfo = setTest.optimizeTraitByTrait(G)
def scan(bfile, Y, cov, null, sets, i0, i1, perm_i, resfile, F, colCovarType_r='lowrank', rank_r=1, factr=1e7, unique_variants=False, standardize=False): if perm_i is not None: print(('Generating permutation (permutation %d)' % perm_i)) np.random.seed(perm_i) perm = np.random.permutation(Y.shape[0]) mtSet = limix.MTSet(Y=Y, S_R=cov['eval'], U_R=cov['evec'], F=F, rank=rank_r) mtSet.setNull(null) reader = BedReader(bfile) wnd_ids = sp.arange(i0, i1) LLR = sp.zeros(sets.shape[0]) for wnd_i in wnd_ids: _set = sets.ix[wnd_i] print('.. set %d: %s' % (wnd_i, _set['setid'])) Xr = reader.getGenotypes(pos_start=_set['start'], pos_end=_set['end'], chrom=_set['chrom'], impute=True) if unique_variants: Xr = f_uni_variants(Xr) if standardize: Xr -= Xr.mean(0) Xr /= Xr.std(0) else: # encoding minor as 0 p = 0.5 * Xr.mean(0) Xr[:, p > 0.5] = 2 - Xr[:, p > 0.5] if perm_i is not None: Xr = Xr[perm, :] # multi trait set test fit RV = mtSet.optimize(Xr, factr=factr) LLR[wnd_i] = RV['LLR'][0] # export results sets['LLR'] = LLR sets.to_csv(resfile, sep='\t', index=False)