コード例 #1
0
ファイル: simBonf.py プロジェクト: brookluers/pyknockoff
def get_Sigma(corstr, p, k, rho):
    if corstr == 'exch':
        print("Exchangeable covariance matrix")
        Sigma = gen.get_exch(p, rho)
    elif corstr == '2block':
        print("Using '2block' covariance matrix")
        Sigma = gen.get_2block(p, k, rho)
    elif corstr == 'ar1':
        print("Using AR covariance")
        Sigma = gen.get_ar(p, rho)
    else:
        print("Unknown corstr, using exchangeable")
        Sigma = gen.get_exch(p, rho)
    return Sigma
コード例 #2
0
ファイル: wrank-nsel.py プロジェクト: brookluers/pyknockoff
def sim_wrank(N,
              p,
              k,
              rho,
              corstr,
              FDR,
              offset,
              nW,
              nsim_x,
              nsim_yx,
              nsim_uyx,
              wtype,
              toCSV=True,
              tag=''):
    if corstr == 'ar1':
        Sigma = gen.get_ar(p, rho)
    else:
        Sigma = gen.get_exch(p, rho)
    SigmaChol = np.linalg.cholesky(Sigma)
    beta = gen.rand_beta_flat(p, k, es)
    fdp = gen.get_fdpfunc(beta)
    tpr = gen.get_tprfunc(beta)
    fname = "wrank-" + tag + "-nx" + str(nsim_x) + "-nyx" + str(nsim_yx)
    fname += "-nuyx" + str(nsim_uyx)
    fname += '-N' + str(N) + '-p' + str(p)
    fname += '-w' + wtype + '-nW' + str(nW) + '-ar1-rho' + str(
        rho) + '-off' + str(offset)
    fname += '.csv'
    rslt = []
    vheader = [
        'k', 'N', 'p', 'rho', 'offset', 'nW', 'jx', 'jyx', 'juyx', 'FDR',
        'fdp', 'tpr'
    ]
    vheader.extend(["sel{:d}".format(i) for i in range(p)])
    vfmt = [
        '%d', '%d', '%d', '%.3f', '%d', '%d', '%d', '%d', '%d', '%.3f',
        '%.18e', '%.18e'
    ]
    vfmt.extend(['%d' for i in range(p)])
    vheader = ','.join(vheader)
    gparm = [k, N, p, rho, offset]
    for jx in range(nsim_x):
        X = gen.gen_X(N, p, SigmaChol)  # scaled and centere
        Qx, Rx = np.linalg.qr(X, mode='reduced')
        G = np.matmul(Rx.T, Rx)
        svec = ko.get_svec_ldet(G)
        Ginv = np.linalg.inv(G)
        Cmat = ko.get_cmat(X, svec, Ginv=Ginv)
        for jyx in range(nsim_yx):
            Y = gen.gen_Y(X, N, beta, sigma=1)
            for juyx in range(nsim_uyx):
                sel_consensus = ko.doKnockoff(X,
                                              Y,
                                              FDR,
                                              offset,
                                              svec=svec,
                                              wstat=wtype,
                                              scale=False,
                                              center=False,
                                              Utilde=None,
                                              nrep=nW,
                                              Qx=Qx,
                                              Rx=Rx,
                                              Ginv=Ginv,
                                              G=G,
                                              Cmat=Cmat)
                sel_one = ko.doKnockoff(X,
                                        Y,
                                        FDR,
                                        offset,
                                        svec=svec,
                                        wstat=wtype,
                                        scale=False,
                                        center=False,
                                        Utilde=None,
                                        nrep=1,
                                        Qx=Qx,
                                        Rx=Rx,
                                        Ginv=Ginv,
                                        G=G,
                                        Cmat=Cmat)
                r1 = gparm + [
                    1, jx, jyx, juyx, FDR,
                    fdp(sel_one),
                    tpr(sel_one)
                ]
                r1.extend((1 * sel_one).tolist())
                rc = gparm + [
                    nW, jx, jyx, juyx, FDR,
                    fdp(sel_consensus),
                    tpr(sel_consensus)
                ]
                rc.extend((1 * sel_consensus).tolist())
                rslt.append(r1)
                rslt.append(rc)
    rslt = np.array(rslt)
    if toCSV:
        np.savetxt(fname,
                   rslt,
                   fmt=vfmt,
                   delimiter=',',
                   header=vheader,
                   comments='')
        return rslt
    else:
        return rslt, vheader, vfmt, fname
コード例 #3
0
def power_method(A, p, niter=10):
    ek = np.random.normal(size=(p, ))
    ek = ek / np.linalg.norm(ek)
    for _ in range(niter):
        ek1 = np.dot(A, ek)
        ek1_norm = np.linalg.norm(ek1)
        ek = ek1 / ek1_norm
    return np.dot(np.dot(ek.T, A), ek)


if __name__ == "__main__":
    p = 200
    rho = 0.9
    print("p={:d}".format(p))
    print("correlation = {:.2f}".format(rho))
    Sigma = gen.get_exch(p, rho)
    n = 5000
    print("n={:d}".format(n))
    SigmaChol = np.linalg.cholesky(Sigma)
    np.random.seed(1)
    X = gen.gen_X(n, p, SigmaChol)  # scaled and centered
    G = np.dot(X.T, X)
    meig_exact = scipy.linalg.eigvalsh(G, eigvals=(0, 0))[0]
    print("meig_exact = " + str(meig_exact))
    Ginv = scipy.linalg.inv(G)
    power_rslt = []
    test_iter = np.arange(50) + 1
    print("power iterations: ")
    for niter in test_iter:
        cv = 1 / power_method(Ginv, p, niter)
        power_rslt.append(cv)