Skip to content

Commit 7f8b8fd

Browse files
For gaussian randomization, remove all p-dimensional matrices
Merge branch 'jelena-markovic-randomized_jelena_highdim'
2 parents 3ca4431 + d838b07 commit 7f8b8fd

File tree

2 files changed

+57
-20
lines changed

2 files changed

+57
-20
lines changed

selectiveInference/R/funs.randomized.R

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ randomizedLasso = function(X,
109109
L_E = t(X) %*% X[,E]
110110

111111
coef_term = L_E
112+
112113
signs_ = c(rep(1, sum(unpenalized)), sign_soln[active])
113114
if (length(signs_) == 1) {
114115
coef_term = coef_term * signs_
@@ -344,6 +345,9 @@ randomizedLassoInf = function(X,
344345
parameter_stop=parameter_stop)
345346

346347
active_set = lasso_soln$active_set
348+
if (length(active_set)==0){
349+
return (list(active_set=active_set, pvalues=c(), ci=c()))
350+
}
347351
inactive_set = lasso_soln$inactive_set
348352
nactive = length(active_set)
349353

@@ -378,32 +382,61 @@ randomizedLassoInf = function(X,
378382

379383
pvalues = rep(0, nactive)
380384
ci = matrix(0, nactive, 2)
385+
381386
for (i in 1:nactive){
387+
382388
target_transform = linear_decomposition(observed_target[i],
383389
observed_internal,
384390
target_cov[i,i],
385391
cov_target_internal[,i],
386392
internal_transform)
387-
target_sample = rnorm(nrow(opt_samples)) * sqrt(target_cov[i,i])
388393

394+
395+
# changing dimension of density evalutaion
396+
397+
if ((condition_subgrad == TRUE) & (nactive < p)) {
398+
target_opt_linear = cbind(target_transform$linear_term, opt_transform$linear_term)
399+
reduced_target_opt_linear = chol(t(target_opt_linear) %*% target_opt_linear)
400+
target_linear = reduced_target_opt_linear[,1]
401+
temp = solve(t(reduced_target_opt_linear)) %*% t(target_opt_linear)
402+
target_offset = temp %*% target_transform$offset_term
403+
target_transform = list(linear_term = as.matrix(target_linear), offset_term = target_offset)
404+
cur_linear = reduced_target_opt_linear[,2:ncol(reduced_target_opt_linear)]
405+
cur_offset = temp %*% opt_transform$offset_term
406+
cur_transform = list(linear_term = as.matrix(cur_linear), offset_term = cur_offset)
407+
408+
raw = target_transform$linear_term * observed_target[i] + target_transform$offset_term
409+
} else {
410+
cur_transform = opt_transform
411+
raw = observed_raw
412+
}
413+
414+
target_sample = rnorm(nrow(as.matrix(opt_samples))) * sqrt(target_cov[i,i])
415+
389416
pivot = function(candidate){
417+
390418
weights = importance_weight(noise_scale,
391419
t(as.matrix(target_sample) + candidate),
392420
t(opt_samples),
393-
opt_transform,
421+
cur_transform,
394422
target_transform,
395-
observed_raw)
423+
raw)
396424
return(mean((target_sample + candidate < observed_target[i]) * weights)/mean(weights))
425+
397426
}
427+
398428
rootU = function(candidate){
399429
return (pivot(observed_target[i]+candidate)-(1-level)/2)
400430
}
431+
401432
rootL = function(candidate){
402-
return (pivot(observed_target[i]+candidate)-(1+level)/2)
433+
return(pivot(observed_target[i]+candidate)-(1+level)/2)
403434
}
435+
404436
pvalues[i] = pivot(0)
405-
line_min = -20*sd(target_sample)
406-
line_max = 20*sd(target_sample)
437+
line_min = -10*sd(target_sample)
438+
line_max = 10*sd(target_sample)
439+
407440
if (rootU(line_min)*rootU(line_max)<0){
408441
ci[i,2] = uniroot(rootU, c(line_min, line_max))$root+observed_target[i]
409442
} else{

tests/randomized/test_instances.R

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ gaussian_instance = function(n, p, s, sigma=1, rho=0, signal=6, X=NA,
2525
}
2626

2727

28-
collect_results = function(n,p,s, nsim=100, level=0.9, condition_subgrad=TRUE){
28+
collect_results = function(n,p,s, nsim=100, level=0.9, condition_subgrad=TRUE, lam=1.2){
29+
2930
rho=0.3
30-
lam=1.2
3131
sigma=1
3232
sample_pvalues = c()
3333
sample_coverage = c()
@@ -39,25 +39,29 @@ collect_results = function(n,p,s, nsim=100, level=0.9, condition_subgrad=TRUE){
3939
result = selectiveInference:::randomizedLassoInf(X, y, lam, level=level, burnin=2000, nsample=4000, condition_subgrad=condition_subgrad)
4040
true_beta = beta[result$active_set]
4141
coverage = rep(0, nrow(result$ci))
42-
for (i in 1:nrow(result$ci)){
43-
if (result$ci[i,1]<true_beta[i] & result$ci[i,2]>true_beta[i]){
44-
coverage[i]=1
42+
if (length(result$active_set)>0){
43+
for (i in 1:nrow(result$ci)){
44+
if (result$ci[i,1]<true_beta[i] & result$ci[i,2]>true_beta[i]){
45+
coverage[i]=1
46+
}
47+
print(paste("ci", toString(result$ci[i,])))
4548
}
46-
print(paste("ci", toString(result$ci[i,])))
49+
sample_pvalues = c(sample_pvalues, result$pvalues)
50+
sample_coverage = c(sample_coverage, coverage)
51+
print(paste("coverage", mean(sample_coverage)))
4752
}
48-
sample_pvalues = c(sample_pvalues, result$pvalues)
49-
sample_coverage = c(sample_coverage, coverage)
53+
}
54+
if (length(sample_coverage)>0){
5055
print(paste("coverage", mean(sample_coverage)))
56+
jpeg('pivots.jpg')
57+
plot(ecdf(sample_pvalues), xlim=c(0,1), main="Empirical CDF of null p-values", xlab="p-values", ylab="ecdf")
58+
abline(0, 1, lty=2)
59+
dev.off()
5160
}
52-
print(paste("coverage", mean(sample_coverage)))
53-
jpeg('pivots.jpg')
54-
plot(ecdf(sample_pvalues), xlim=c(0,1), main="Empirical CDF of null p-values", xlab="p-values", ylab="ecdf")
55-
abline(0, 1, lty=2)
56-
dev.off()
5761
}
5862

5963
set.seed(1)
60-
collect_results(n=100, p=20, s=0)
64+
collect_results(n=200, p=100, s=0, lam=2)
6165

6266

6367

0 commit comments

Comments
 (0)