示例#1
0
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
示例#2
0
 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)
示例#3
0
 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)
示例#4
0
 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)
示例#5
0
 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)
示例#6
0
 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)
示例#7
0
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'])
示例#8
0
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)
示例#9
0
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)