@@ -65,7 +65,6 @@ randomizedLasso = function(X,
65
65
ever_active = rep(0 , p )
66
66
nactive = as.integer(0 )
67
67
68
- print(' here' )
69
68
result = solve_QP_wide(X , # design matrix
70
69
lam / n , # vector of Lagrange multipliers
71
70
ridge_term / n , # ridge_term
@@ -86,7 +85,6 @@ randomizedLasso = function(X,
86
85
87
86
sign_soln = sign(result $ soln )
88
87
89
- print(' now' )
90
88
unpenalized = lam == 0
91
89
active = (! unpenalized ) & (sign_soln != 0 )
92
90
inactive = (! unpenalized ) & (sign_soln == 0 )
@@ -156,16 +154,17 @@ randomizedLasso = function(X,
156
154
157
155
log_optimization_density = function (opt_state
158
156
) {
159
-
160
-
161
157
if ((sum(abs(opt_state [(inactive_start + 1 ): p ]) > inactive_lam ) > 0 ) ||
162
158
(sum(opt_state [(active_start + 1 ): inactive_start ] < 0 ) > 0 )) {
163
159
return (- Inf )
164
160
}
165
- D = log_density_gaussian_conditional_(noise_scale ,
166
- opt_transform $ linear_term ,
167
- as.matrix(opt_state ),
168
- observed_raw + opt_transform $ offset_term )
161
+
162
+ A = opt_transform $ linear_term %*% opt_state + observed_raw + opt_transform $ offset_term
163
+ D = - apply(A ^ 2 , 2 , sum ) / noise_scale ^ 2
164
+ # D = log_density_gaussian_conditional_(noise_scale,
165
+ # opt_transform$linear_term,
166
+ # as.matrix(opt_state),
167
+ # observed_raw + opt_transform$offset_term)
169
168
return (D )
170
169
}
171
170
@@ -177,7 +176,8 @@ randomizedLasso = function(X,
177
176
internal_transform = internal_transform ,
178
177
log_optimization_density = log_optimization_density ,
179
178
observed_opt_state = observed_opt_state ,
180
- observed_raw = observed_raw
179
+ observed_raw = observed_raw ,
180
+ noise_scale = noise_scale
181
181
))
182
182
183
183
}
@@ -222,17 +222,31 @@ importance_weight = function(noise_scale,
222
222
target_transform ,
223
223
observed_raw ) {
224
224
225
- log_num = log_density_gaussian_(noise_scale ,
226
- target_transform $ linear_term ,
227
- as.matrix(target_sample ),
228
- opt_transform $ linear_term ,
229
- as.matrix(opt_sample ),
230
- target_transform $ offset_term + opt_transform $ offset_term )
231
-
232
- log_den = log_density_gaussian_conditional_(noise_scale ,
233
- opt_transform $ linear_term ,
234
- as.matrix(opt_sample ),
235
- observed_raw + opt_transform $ offset_term )
225
+ use_C_code = FALSE
226
+ if (! use_C_code ) {
227
+ A = (opt_transform $ linear_term %*% opt_sample +
228
+ target_transform $ linear_term %*% target_sample )
229
+ A = apply(A , 2 , function (x ) {return (x + target_transform $ offset_term + opt_transform $ offset_term )})
230
+ log_num = - apply(A ^ 2 , 2 , sum ) / noise_scale ^ 2
231
+ } else {
232
+ log_num = log_density_gaussian_(noise_scale ,
233
+ target_transform $ linear_term ,
234
+ as.matrix(target_sample ),
235
+ opt_transform $ linear_term ,
236
+ as.matrix(opt_sample ),
237
+ target_transform $ offset_term + opt_transform $ offset_term )
238
+ }
239
+
240
+ if (! use_C_code ) {
241
+ A = opt_transform $ linear_term %*% opt_sample
242
+ A = apply(A , 2 , function (x ) {return (x + observed_raw + opt_transform $ offset_term )})
243
+ log_den = - apply(A ^ 2 , 2 , sum ) / noise_scale ^ 2
244
+ } else {
245
+ log_den = log_density_gaussian_conditional_(noise_scale ,
246
+ opt_transform $ linear_term ,
247
+ as.matrix(opt_sample ),
248
+ observed_raw + opt_transform $ offset_term )
249
+ }
236
250
W = log_num - log_den
237
251
W = W - max(W )
238
252
return (exp(W ))
@@ -263,11 +277,19 @@ conditional_density = function(noise_scale, lasso_soln) {
263
277
if (sum(opt_state < 0 ) > 0 ) {
264
278
return (- Inf )
265
279
}
266
- D = log_density_gaussian_conditional_(noise_scale ,
267
- reduced_B ,
268
- as.matrix(opt_state ),
269
- reduced_beta_offset )
270
- return (D )
280
+
281
+ use_C_code = FALSE
282
+ if (! use_C_code ) {
283
+ A = reduced_B %*% as.matrix(opt_state ) + reduced_beta_offset
284
+ A = apply(A , 2 , function (x ) {x + reduced_beta_offset })
285
+ log_den = - apply(A ^ 2 , 2 , sum ) / noise_scale ^ 2
286
+ } else {
287
+ log_den = log_density_gaussian_conditional_(noise_scale ,
288
+ reduced_B ,
289
+ as.matrix(opt_state ),
290
+ reduced_beta_offset )
291
+ }
292
+ return (log_den )
271
293
}
272
294
lasso_soln $ log_optimization_density = log_condl_optimization_density
273
295
lasso_soln $ observed_opt_state = observed_opt_state [1 : nactive ]
@@ -282,7 +304,9 @@ randomizedLassoInf = function(X,
282
304
noise_scale = NULL ,
283
305
ridge_term = NULL ,
284
306
condition_subgrad = TRUE ,
285
- level = 0.9 ) {
307
+ level = 0.9 ,
308
+ nsample = 10000 ,
309
+ burnin = 2000 ) {
286
310
287
311
n = nrow(X )
288
312
p = ncol(X )
@@ -291,14 +315,20 @@ randomizedLassoInf = function(X,
291
315
inactive_set = lasso_soln $ inactive_set
292
316
nactive = length(active_set )
293
317
294
- if (condition_subgrad == TRUE ){
295
- lasso_soln = conditional_density(noise_scale ,lasso_soln )
296
- }
318
+ noise_scale = lasso_soln $ noise_scale # set to default value in randomizedLasso
319
+
320
+ if (condition_subgrad == TRUE ){
321
+ lasso_soln = conditional_density(noise_scale , lasso_soln )
322
+ }
297
323
298
324
dim = length(lasso_soln $ observed_opt_state )
299
325
print(paste(" chain dim" , dim ))
300
- S = sample_opt_variables(lasso_soln , jump_scale = rep(1 / sqrt(n ), dim ), nsample = 10000 )
301
- opt_samples = S $ samples [2001 : 10000 ,]
326
+
327
+ # print(lasso_soln)
328
+
329
+
330
+ S = sample_opt_variables(lasso_soln , jump_scale = rep(1 / sqrt(n ), dim ), nsample = nsample )
331
+ opt_samples = S $ samples [(burnin + 1 ): nsample ,]
302
332
print(paste(" dim opt samples" , toString(dim(opt_samples ))))
303
333
304
334
X_E = X [, active_set ]
@@ -331,12 +361,12 @@ randomizedLassoInf = function(X,
331
361
332
362
pivot = function (candidate ){
333
363
weights = importance_weight(noise_scale ,
334
- t(as.matrix(target_sample )) + candidate ,
364
+ t(as.matrix(target_sample ) + candidate ) ,
335
365
t(opt_samples ),
336
366
opt_transform ,
337
367
target_transform ,
338
368
observed_raw )
339
- return (mean((target_sample + candidate < observed_target [i ])* weights )/ mean(weights ))
369
+ return (mean((target_sample + candidate < observed_target [i ]) * weights )/ mean(weights ))
340
370
}
341
371
rootU = function (candidate ){
342
372
return (pivot(observed_target [i ]+ candidate )- (1 - level )/ 2 )
0 commit comments