@@ -27,18 +27,7 @@ gaussian_instance = function(n, p, s, sigma=1, rho=0, signal=6, X=NA,
27
27
return (result )
28
28
}
29
29
30
-
31
- run_instance = function (n , p , s ){
32
- rho = 0.3
33
- lam = 1.3
34
- sigma = 1
35
- data = gaussian_instance(n = n ,p = p ,s = s , rho = rho , sigma = sigma )
36
- X = data $ X
37
- print(dim(X ))
38
- y = data $ y
39
- ridge_term = sd(y )/ sqrt(n )
40
- noise_scale = sd(y )/ 2
41
- lasso_soln = selectiveInference ::: randomizedLASSO(X , y , lam , noise_scale , ridge_term )
30
+ conditional_density = function (noise_scale , lasso_soln ){
42
31
43
32
active_set = lasso_soln $ active_set
44
33
inactive_set = lasso_soln $ inactive_set
@@ -48,38 +37,68 @@ run_instance = function(n, p, s){
48
37
observed_opt_state = lasso_soln $ observed_opt_state
49
38
50
39
nactive = length(active_set )
51
- print(paste(" nactive" ,nactive ))
52
40
B = opt_linear [,1 : nactive ]
53
41
beta_offset = observed_raw + opt_offset
42
+ p = length(observed_opt_state )
54
43
if (nactive < p ){
55
44
U = opt_linear [,(nactive + 1 ): p ]
56
45
beta_offset = + U %*% observed_opt_state [(nactive + 1 ): p ]
57
46
}
58
47
opt_transform = list (linear_term = B , offset_term = beta_offset )
59
48
reduced_B = chol(t(B ) %*% B )
60
49
reduced_beta_offset = solve(t(reduced_B )) %*% (t(B ) %*% beta_offset )
61
-
50
+
62
51
log_condl_optimization_density = function (opt_state ) {
63
-
64
- if (sum(opt_state < 0 ) > 0 ) {
65
- return (- Inf )
66
- }
67
- D = selectiveInference ::: log_density_gaussian_conditional_(noise_scale ,
68
- reduced_B ,
69
- as.matrix(observed_opt_state [1 : nactive ]),
70
- reduced_beta_offset )
71
- return (D )
52
+
53
+ if (sum(opt_state < 0 ) > 0 ) {
54
+ return (- Inf )
72
55
}
56
+ D = selectiveInference ::: log_density_gaussian_conditional_(noise_scale ,
57
+ reduced_B ,
58
+ as.matrix(observed_opt_state [1 : nactive ]),
59
+ reduced_beta_offset )
60
+ return (D )
61
+ }
73
62
lasso_soln $ log_optimization_density = log_condl_optimization_density
74
63
lasso_soln $ observed_opt_state = observed_opt_state [1 : nactive ]
64
+ lasso_soln $ optimization_transform = opt_transform
65
+ return (lasso_soln )
66
+ }
67
+
68
+
69
+
70
+ run_instance = function (n , p , s ){
71
+ rho = 0.3
72
+ lam = 1 .
73
+ sigma = 1
74
+ data = gaussian_instance(n = n ,p = p ,s = s , rho = rho , sigma = sigma )
75
+ X = data $ X
76
+ print(dim(X ))
77
+ y = data $ y
78
+ ridge_term = sd(y )/ sqrt(n )
79
+ noise_scale = sd(y )/ 2
80
+ lasso_soln = selectiveInference ::: randomizedLASSO(X , y , lam , noise_scale , ridge_term )
81
+ active_set = lasso_soln $ active_set
82
+ inactive_set = lasso_soln $ inactive_set
83
+ nactive = length(active_set )
84
+ print(paste(" nactive" , nactive ))
85
+
86
+ lasso_soln = conditional_density(noise_scale , lasso_soln )
87
+
75
88
S = selectiveInference ::: sample_opt_variables(lasso_soln , jump_scale = rep(1 / sqrt(n ), nactive ), nsample = 10000 )
76
- beta_samples = S $ samples [2001 : 10000 ,]
77
- print(paste(" dim beta samples" , dim(beta_samples )))
89
+ opt_samples = S $ samples [2001 : 10000 ,]
90
+ print(paste(" dim opt samples" , toString(dim(opt_samples ))))
91
+
92
+ observed_raw = lasso_soln $ observed_raw
93
+ opt_linear = lasso_soln $ optimization_transform $ linear_term
94
+ opt_offset = lasso_soln $ optimization_transform $ offset_term
95
+ observed_opt_state = lasso_soln $ observed_opt_state
96
+ opt_transform = lasso_soln $ optimization_transform
78
97
79
98
X_E = X [, active_set ]
80
99
X_minusE = X [, inactive_set ]
81
100
target_cov = solve(t(X_E )%*% X_E )* sigma ^ 2
82
- cov_target_internal = rbind(target_cov , matrix (0 , nrow = p - nactive , ncol = nactive )) * sigma ^ 2
101
+ cov_target_internal = rbind(target_cov , matrix (0 , nrow = p - nactive , ncol = nactive ))
83
102
observed_target = solve(t(X_E ) %*% X_E ) %*% t(X_E ) %*% y
84
103
observed_internal = c(observed_target , t(X_minusE ) %*% (y - X_E %*% observed_target ))
85
104
internal_transform = lasso_soln $ internal_transform
@@ -91,27 +110,36 @@ run_instance = function(n, p, s){
91
110
target_cov [i ,i ],
92
111
cov_target_internal [,i ],
93
112
internal_transform )
94
- target_sample = rnorm(nrow(beta_samples )) * sqrt(target_cov [i ,i ])
95
113
96
- weights = selectiveInference ::: importance_weight(noise_scale ,
97
- t(as.matrix(target_sample )),
98
- t(beta_samples ),
114
+ target_sample = rnorm(nrow(opt_samples )) * sqrt(target_cov [i ,i ])
115
+
116
+ pivot = function (candidate ){
117
+ weights = selectiveInference ::: importance_weight(noise_scale ,
118
+ t(as.matrix(target_sample ))+ candidate ,
119
+ t(opt_samples ),
99
120
opt_transform ,
100
121
target_transform ,
101
122
observed_raw )
102
-
103
- pivots [i ] = mean((target_sample < observed_target [i ])* weights )/ mean(weights )
123
+ return (mean((target_sample < observed_target [i ])* weights )/ mean(weights ))
124
+ }
125
+
126
+ pivots [i ] = pivot(0 )
104
127
print(pivots [i ])
105
128
}
106
129
107
130
return (pivots )
108
131
}
109
132
110
133
collect_instances = function (n ,p ,s , nsim = 1 ){
111
-
134
+ sample_pivots = NULL
112
135
for (i in 1 : nsim ){
113
136
result = run_instance(n ,p ,s )
137
+ sample_pivots = c(sample_pivots , result )
114
138
}
139
+ jpeg(' pivots.jpg' )
140
+ plot(ecdf(sample_pivots ), xlim = c(0 ,1 ), main = " Empirical CDF of null p-values" , xlab = " p-values" , ylab = " ecdf" )
141
+ abline(0 , 1 , lty = 2 )
142
+ dev.off()
115
143
}
116
144
117
145
0 commit comments