Skip to content

Commit 3989729

Browse files
author
Snigdha Panigrahi
committed
cleaned up test for comparisons of mle
1 parent e224b46 commit 3989729

File tree

2 files changed

+75
-20
lines changed

2 files changed

+75
-20
lines changed

selectinf/randomized/query.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -1479,8 +1479,7 @@ def selective_MLE(observed_target,
14791479
'lower_confidence': intervals[:, 0],
14801480
'upper_confidence': intervals[:, 1],
14811481
'unbiased': unbiased_estimator})
1482-
return result, observed_info_mean, log_ref, \
1483-
T11[:,0], cond_mean - soln, target_cov.dot(_prec).dot(observed_target), C
1482+
return result, observed_info_mean, log_ref
14841483

14851484

14861485
def normalizing_constant(target_parameter,

selectinf/randomized/tests/test_selective_MLE_high.py

+74-18
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,7 @@ def test_full_targets(n=200,
8383
return pval[beta[nonzero] == 0], pval[beta[nonzero] != 0], coverage, intervals
8484

8585

86-
def test_selected_targets(seedn,
87-
n=2000,
86+
def test_selected_targets(n=2000,
8887
p=200,
8988
signal_fac=1.2,
9089
s=5,
@@ -100,7 +99,6 @@ def test_selected_targets(seedn,
10099
signal = np.sqrt(signal_fac * 2 * np.log(p))
101100

102101
while True:
103-
np.random.seed(seed=seedn)
104102
X, Y, beta = inst(n=n,
105103
p=p,
106104
signal=signal,
@@ -142,21 +140,19 @@ def test_selected_targets(seedn,
142140
nonzero,
143141
dispersion=dispersion)
144142

145-
result, _, _, X1, X2, X3, X4 = conv.selective_MLE(observed_target,
143+
result = conv.selective_MLE(observed_target,
146144
cov_target,
147-
cov_target_score)
148-
estimate = result['MLE']
145+
cov_target_score)[0]
146+
149147
pval = result['pvalue']
150148
intervals = np.asarray(result[['lower_confidence', 'upper_confidence']])
151149

152150
beta_target = np.linalg.pinv(X[:, nonzero]).dot(X.dot(beta))
153151

154152
coverage = (beta_target > intervals[:, 0]) * (beta_target < intervals[:, 1])
155153

156-
# print("check ", np.asarray(result['MLE']), np.asarray(result['unbiased']))
154+
return pval[beta[nonzero] == 0], pval[beta[nonzero] != 0], coverage, intervals
157155

158-
#return pval[beta[nonzero] == 0], pval[beta[nonzero] != 0], coverage, intervals
159-
return result['MLE'], result['lower_confidence'], result['upper_confidence'], X1, X2, X3, X4
160156

161157

162158
def test_instance():
@@ -310,34 +306,94 @@ def test_selected_targets_disperse(n=500,
310306
# print("coverage and lengths ", np.mean(cover), np.mean(avg_length))
311307

312308

309+
def test_selected_instance(seedn,
310+
n=2000,
311+
p=200,
312+
signal_fac=1.2,
313+
s=5,
314+
sigma=2,
315+
rho=0.7,
316+
randomizer_scale=1.,
317+
full_dispersion=True):
318+
"""
319+
Compare to R randomized lasso
320+
"""
321+
322+
inst, const = gaussian_instance, lasso.gaussian
323+
signal = np.sqrt(signal_fac * 2 * np.log(p))
324+
325+
while True:
326+
np.random.seed(seed=seedn)
327+
X, Y, beta = inst(n=n,
328+
p=p,
329+
signal=signal,
330+
s=s,
331+
equicorrelated=True,
332+
rho=rho,
333+
sigma=sigma,
334+
random_signs=True)[:3]
335+
336+
idx = np.arange(p)
337+
sigmaX = rho ** np.abs(np.subtract.outer(idx, idx))
338+
print("snr", beta.T.dot(sigmaX).dot(beta) / ((sigma ** 2.) * n))
339+
340+
n, p = X.shape
341+
342+
sigma_ = np.std(Y)
343+
W = 0.8 * np.ones(X.shape[1]) * np.sqrt(2 * np.log(p)) * sigma_
344+
345+
conv = const(X,
346+
Y,
347+
W,
348+
ridge_term=0.,
349+
randomizer_scale=randomizer_scale * sigma_)
350+
351+
signs = conv.fit()
352+
nonzero = signs != 0
353+
print("dimensions", n, p, nonzero.sum())
354+
355+
if nonzero.sum() > 0:
356+
dispersion = None
357+
if full_dispersion:
358+
dispersion = np.linalg.norm(Y - X.dot(np.linalg.pinv(X).dot(Y))) ** 2 / (n - p)
359+
360+
(observed_target,
361+
cov_target,
362+
cov_target_score,
363+
alternatives) = selected_targets(conv.loglike,
364+
conv._W,
365+
nonzero,
366+
dispersion=dispersion)
367+
368+
result = conv.selective_MLE(observed_target,
369+
cov_target,
370+
cov_target_score)[0]
371+
372+
return result['MLE'], result['lower_confidence'], result['upper_confidence']
373+
313374
def main(nsim =50):
314375

315376
import pandas as pd
316-
column_names = ["Experiment Replicate", "MLE", "Lower Conf", "Upper Conf", "X1", "X2", "X3", "X4"]
377+
column_names = ["Experiment Replicate", "MLE", "Lower Conf", "Upper Conf"]
317378
master_DF = pd.DataFrame(columns=column_names)
318379
DF = pd.DataFrame(columns=column_names)
319380

320381
n, p, s = 500, 100, 5
321382
for i in range(nsim):
322383
full_dispersion = True
323-
mle, lower_conf, upper_conf, X1, X2, X3, X4 = test_selected_targets(seedn=i, n=n, p=p, s=s, signal_fac=1.2, full_dispersion=full_dispersion)
324-
#print("check ", mle, lower_conf, upper_conf)
384+
mle, lower_conf, upper_conf = test_selected_instance(seedn=i, n=n, p=p, s=s, signal_fac=1.2, full_dispersion=full_dispersion)
325385
DF["MLE"] = pd.Series(mle)
326386
DF["Lower Conf"] = pd.Series(lower_conf)
327387
DF["Upper Conf"] = pd.Series(upper_conf)
328388
DF["Experiment Replicate"] = pd.Series((i*np.ones(len(mle),int)).tolist())
329-
DF["X1"] = pd.Series(X1)
330-
DF["X2"] = pd.Series(X2)
331-
DF["X3"] = pd.Series(X3)
332-
DF["X4"] = pd.Series(X4)
333389

334390
master_DF = DF.append(master_DF, ignore_index=True)
335391

336392
import os
337393
outpath = os.path.dirname(__file__)
338394

339-
outfile_mse_html = os.path.join(outpath, "simple_example.html")
340-
outfile_mse_csv = os.path.join(outpath, "simple_example.csv")
395+
outfile_mse_html = os.path.join(outpath, "compare_mle_old.html")
396+
outfile_mse_csv = os.path.join(outpath, "compare_mle_old.csv")
341397

342398
master_DF.to_html(outfile_mse_html, index=False)
343399
master_DF.to_csv(outfile_mse_csv, index=False)

0 commit comments

Comments
 (0)