@@ -83,8 +83,7 @@ def test_full_targets(n=200,
83
83
return pval [beta [nonzero ] == 0 ], pval [beta [nonzero ] != 0 ], coverage , intervals
84
84
85
85
86
- def test_selected_targets (seedn ,
87
- n = 2000 ,
86
+ def test_selected_targets (n = 2000 ,
88
87
p = 200 ,
89
88
signal_fac = 1.2 ,
90
89
s = 5 ,
@@ -100,7 +99,6 @@ def test_selected_targets(seedn,
100
99
signal = np .sqrt (signal_fac * 2 * np .log (p ))
101
100
102
101
while True :
103
- np .random .seed (seed = seedn )
104
102
X , Y , beta = inst (n = n ,
105
103
p = p ,
106
104
signal = signal ,
@@ -142,21 +140,19 @@ def test_selected_targets(seedn,
142
140
nonzero ,
143
141
dispersion = dispersion )
144
142
145
- result , _ , _ , X1 , X2 , X3 , X4 = conv .selective_MLE (observed_target ,
143
+ result = conv .selective_MLE (observed_target ,
146
144
cov_target ,
147
- cov_target_score )
148
- estimate = result [ 'MLE' ]
145
+ cov_target_score )[ 0 ]
146
+
149
147
pval = result ['pvalue' ]
150
148
intervals = np .asarray (result [['lower_confidence' , 'upper_confidence' ]])
151
149
152
150
beta_target = np .linalg .pinv (X [:, nonzero ]).dot (X .dot (beta ))
153
151
154
152
coverage = (beta_target > intervals [:, 0 ]) * (beta_target < intervals [:, 1 ])
155
153
156
- # print("check ", np.asarray(result['MLE']), np.asarray(result['unbiased']))
154
+ return pval [ beta [ nonzero ] == 0 ], pval [ beta [ nonzero ] != 0 ], coverage , intervals
157
155
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
160
156
161
157
162
158
def test_instance ():
@@ -310,34 +306,94 @@ def test_selected_targets_disperse(n=500,
310
306
# print("coverage and lengths ", np.mean(cover), np.mean(avg_length))
311
307
312
308
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
+
313
374
def main (nsim = 50 ):
314
375
315
376
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" ]
317
378
master_DF = pd .DataFrame (columns = column_names )
318
379
DF = pd .DataFrame (columns = column_names )
319
380
320
381
n , p , s = 500 , 100 , 5
321
382
for i in range (nsim ):
322
383
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 )
325
385
DF ["MLE" ] = pd .Series (mle )
326
386
DF ["Lower Conf" ] = pd .Series (lower_conf )
327
387
DF ["Upper Conf" ] = pd .Series (upper_conf )
328
388
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 )
333
389
334
390
master_DF = DF .append (master_DF , ignore_index = True )
335
391
336
392
import os
337
393
outpath = os .path .dirname (__file__ )
338
394
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" )
341
397
342
398
master_DF .to_html (outfile_mse_html , index = False )
343
399
master_DF .to_csv (outfile_mse_csv , index = False )
0 commit comments