def simulation(n, p, sigma, nnz=0, nsim=1000,
               reduced=True,
               reduced_full=True): # nnz = number nonzero

    beta = np.zeros(p)
    if nnz > 0:
        beta[:nnz] = np.linspace(4,4.5,nnz)
    beta = beta * sigma

    splitP = []
    covtestP = []
    spacings = []
    reduced_known = []
    reduced_unknown = []
    reduced_known_full = []
    reduced_unknown_full = []
    hypotheses = []
    hypotheses_full = []

    for i in range(nsim):
        X = (np.random.standard_normal((n,p)) + 
             0.7 * np.random.standard_normal(n)[:,None])
        X -= X.mean(0)[None,:]
        X /= (X.std(0)[None,:] * np.sqrt(n))
        Y = np.random.standard_normal(n) * sigma + np.dot(X, beta)
        Y -= Y.mean()

        split = sample_split(X.copy(),
                             Y.copy(),
                             sigma=sigma,
                             burnin=2000,
                             ndraw=5000,
                             nstep=10,
                             reduced=reduced)
        splitP.append(split[0])
        reduced_known.append(split[1])
        reduced_unknown.append(split[2])
        spacings.append(split[3])
        covtestP.append(split[4])
        hypotheses.append([var in range(nnz) for var in split[5]])

        if reduced_full:
            fs = forward_step(X, Y,
                              sigma=sigma,
                              burnin=2000,
                              ndraw=5000,
                              nstep=10)
            reduced_known_full.append(fs[1])
            reduced_unknown_full.append(fs[2])
            hypotheses_full.append([var in range(nnz) for var in fs[4]])


        for D, name in zip([splitP, spacings, covtestP], ['split', 'spacings', 'covtest']):
            means = map(lambda x: x[~np.isnan(x)].mean(), np.array(D).T)[:(nnz+3)]
            SDs = map(lambda x: x[~np.isnan(x)].std(), np.array(D).T)[:(nnz+3)]
            print means, SDs, name

        if reduced:
            print (np.mean(np.array(reduced_known)[:,:(nnz+3)],0), 
                   np.std(np.array(reduced_known)[:,:(nnz+3)],0), 'reduced known split')
            print (np.mean(np.array(reduced_unknown)[:,:(nnz+3)],0), 
                   np.std(np.array(reduced_unknown)[:,:(nnz+3)],0), 'reduced unknown split'), i

        if reduced_full:
            print (np.mean(np.array(reduced_unknown_full)[:,:(nnz+3)],0), 
                   np.std(np.array(reduced_unknown_full)[:,:(nnz+3)],0), 'reduced unknown full'), i
            print (np.mean(np.array(reduced_known_full)[:,:(nnz+3)],0), 
                   np.std(np.array(reduced_known_full)[:,:(nnz+3)],0), 'reduced known full'), i

        value = np.mean(beta)
        if reduced:
            np.save('reduced_split_known%d.npy' % (nnz,), np.array(reduced_known))
            np.save('reduced_split_unknown%d.npy' % (nnz,), np.array(reduced_unknown))

        np.save('split%d.npy' % (nnz,), np.array(splitP))
        np.save('spacings_split%d.npy' % (nnz,), np.array(spacings))
        np.save('covtest_split%d.npy' % (nnz,), np.array(covtestP))
        np.save('hypotheses_split_%d.npy' % (nnz,), np.array(hypotheses))

        if reduced_full:
            np.save('hypotheses_splitfull_%d.npy' % (nnz,), np.array(hypotheses_full))
            np.save('reduced_splitfull_known%d.npy' % (nnz,), np.array(reduced_known_full))
            np.save('reduced_splitfull_unknown%d.npy' % (nnz,), np.array(reduced_unknown_full))
Beispiel #2
0
def simulation(n,
               p,
               sigma,
               nsim=500,
               label=0,
               reduced=True,
               reduced_full=True):  # nnz = number nonzero

    splitP = []
    covtestP = []
    spacings = []
    reduced_known = []
    reduced_unknown = []
    reduced_known_full = []
    reduced_unknown_full = []
    hypotheses = []
    hypotheses_full = []

    for i in range(nsim):
        X, Y, nnz = instance()
        Y -= Y.mean()

        split = sample_split(X.copy(),
                             Y.copy(),
                             sigma=sigma,
                             burnin=1000,
                             ndraw=2000,
                             nstep=10,
                             reduced=reduced)
        splitP.append(split[0])
        reduced_known.append(split[1])
        reduced_unknown.append(split[2])
        spacings.append(split[3])
        covtestP.append(split[4])
        hypotheses.append([var in range(nnz) for var in split[5]])

        if reduced_full:
            fs = forward_step(X,
                              Y,
                              sigma=sigma,
                              burnin=1000,
                              ndraw=2000,
                              nstep=10)
            reduced_known_full.append(fs[1])
            reduced_unknown_full.append(fs[2])
            hypotheses_full.append([var in range(nnz) for var in fs[4]])

        for D, name in zip([splitP, spacings, covtestP],
                           ['split', 'spacings', 'covtest']):
            means = map(lambda x: x[~np.isnan(x)].mean(),
                        np.array(D).T)[:(nnz + 3)]
            SDs = map(lambda x: x[~np.isnan(x)].std(),
                      np.array(D).T)[:(nnz + 3)]
            print means, SDs, name

        if reduced:
            print(np.mean(np.array(reduced_known)[:, :(nnz + 3)], 0),
                  np.std(np.array(reduced_known)[:, :(nnz + 3)],
                         0), 'reduced known split')
            print(np.mean(np.array(reduced_unknown)[:, :(nnz + 3)], 0),
                  np.std(np.array(reduced_unknown)[:, :(nnz + 3)],
                         0), 'reduced unknown split'), i

        if reduced_full:
            print(np.mean(np.array(reduced_unknown_full)[:, :(nnz + 3)], 0),
                  np.std(np.array(reduced_unknown_full)[:, :(nnz + 3)],
                         0), 'reduced unknown full'), i
            print(np.mean(np.array(reduced_known_full)[:, :(nnz + 3)], 0),
                  np.std(np.array(reduced_known_full)[:, :(nnz + 3)],
                         0), 'reduced known full'), i

        if reduced:
            np.save('reduced_split_known_alex%d.npy' % (label, ),
                    np.array(reduced_known))
            np.save('reduced_split_unknown_alex%d.npy' % (label, ),
                    np.array(reduced_unknown))

        np.save('split_alex%d.npy' % (label, ), np.array(splitP))
        np.save('spacings_split_alex%d.npy' % (label, ), np.array(spacings))
        np.save('covtest_split_alex%d.npy' % (label, ), np.array(covtestP))
        np.save('hypotheses_split__alex%d.npy' % (label, ),
                np.array(hypotheses))

        if reduced_full:
            np.save('hypotheses_splitfull__alex%d.npy' % (label, ),
                    np.array(hypotheses_full))
            np.save('reduced_splitfull_known_alex%d.npy' % (label, ),
                    np.array(reduced_known_full))
            np.save('reduced_splitfull_unknown_alex%d.npy' % (label, ),
                    np.array(reduced_unknown_full))
def simulation(n, p, sigma, nsim=500,
               label=0,
               reduced=True,
               reduced_full=True): # nnz = number nonzero

    splitP = []
    covtestP = []
    spacings = []
    reduced_known = []
    reduced_unknown = []
    reduced_known_full = []
    reduced_unknown_full = []
    hypotheses = []
    hypotheses_full = []

    for i in range(nsim):
        X, Y, nnz = instance()
        nnz = 0
        Y -= Y.mean()
        Y *= sigma

        split = sample_split(X.copy(),
                             Y.copy(),
                             sigma=sigma,
                             burnin=1000,
                             ndraw=2000,
                             nstep=10,
                             reduced=reduced)
        splitP.append(split[0])
        reduced_known.append(split[1])
        reduced_unknown.append(split[2])
        spacings.append(split[3])
        covtestP.append(split[4])
        hypotheses.append([var in range(nnz) for var in split[5]])

        if reduced_full:
            fs = forward_step(X, Y,
                              sigma=sigma,
                              burnin=1000,
                              ndraw=2000,
                              nstep=10)
            reduced_known_full.append(fs[1])
            reduced_unknown_full.append(fs[2])
            hypotheses_full.append([var in range(nnz) for var in fs[4]])


        for D, name in zip([splitP, spacings, covtestP], ['split', 'spacings', 'covtest']):
            means = map(lambda x: x[~np.isnan(x)].mean(), np.array(D).T)[:(nnz+3)]
            SDs = map(lambda x: x[~np.isnan(x)].std(), np.array(D).T)[:(nnz+3)]
            print means, SDs, name

        if reduced:
            print (np.mean(np.array(reduced_known)[:,:(nnz+3)],0), 
                   np.std(np.array(reduced_known)[:,:(nnz+3)],0), 'reduced known split')
            print (np.mean(np.array(reduced_unknown)[:,:(nnz+3)],0), 
                   np.std(np.array(reduced_unknown)[:,:(nnz+3)],0), 'reduced unknown split'), i

        if reduced_full:
            print (np.mean(np.array(reduced_unknown_full)[:,:(nnz+3)],0), 
                   np.std(np.array(reduced_unknown_full)[:,:(nnz+3)],0), 'reduced unknown full'), i
            print (np.mean(np.array(reduced_known_full)[:,:(nnz+3)],0), 
                   np.std(np.array(reduced_known_full)[:,:(nnz+3)],0), 'reduced known full'), i

        if reduced:
            np.save('reduced_split_known_alexnull%d.npy' % (label,), np.array(reduced_known))
            np.save('reduced_split_unknown_alexnull%d.npy' % (label,), np.array(reduced_unknown))

        np.save('split_alexnull%d.npy' % (label,), np.array(splitP))
        np.save('spacings_split_alexnull%d.npy' % (label,), np.array(spacings))
        np.save('covtest_split_alexnull%d.npy' % (label,), np.array(covtestP))
        np.save('hypotheses_split__alexnull%d.npy' % (label,), np.array(hypotheses))

        if reduced_full:
            np.save('hypotheses_splitfull__alexnull%d.npy' % (label,), np.array(hypotheses_full))
            np.save('reduced_splitfull_known_alexnull%d.npy' % (label,), np.array(reduced_known_full))
            np.save('reduced_splitfull_unknown_alexnull%d.npy' % (label,), np.array(reduced_unknown_full))