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))
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))