Skip to content

Commit 555f38c

Browse files
author
Jelena Markovic
committed
reorg
1 parent 3ce4ea2 commit 555f38c

File tree

1 file changed

+61
-33
lines changed

1 file changed

+61
-33
lines changed

tests/randomized/test_instances.R

Lines changed: 61 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,7 @@ gaussian_instance = function(n, p, s, sigma=1, rho=0, signal=6, X=NA,
2727
return(result)
2828
}
2929

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){
4231

4332
active_set = lasso_soln$active_set
4433
inactive_set = lasso_soln$inactive_set
@@ -48,38 +37,68 @@ run_instance = function(n, p, s){
4837
observed_opt_state = lasso_soln$observed_opt_state
4938

5039
nactive = length(active_set)
51-
print(paste("nactive",nactive))
5240
B = opt_linear[,1:nactive]
5341
beta_offset = observed_raw+opt_offset
42+
p=length(observed_opt_state)
5443
if (nactive<p){
5544
U=opt_linear[,(nactive+1):p]
5645
beta_offset =+U %*% observed_opt_state[(nactive+1):p]
5746
}
5847
opt_transform = list(linear_term=B, offset_term = beta_offset)
5948
reduced_B = chol(t(B) %*% B)
6049
reduced_beta_offset = solve(t(reduced_B)) %*% (t(B) %*% beta_offset)
61-
50+
6251
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)
7255
}
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+
}
7362
lasso_soln$log_optimization_density = log_condl_optimization_density
7463
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+
7588
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
7897

7998
X_E=X[, active_set]
8099
X_minusE=X[, inactive_set]
81100
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))
83102
observed_target = solve(t(X_E) %*% X_E) %*% t(X_E) %*% y
84103
observed_internal = c(observed_target, t(X_minusE) %*% (y-X_E%*% observed_target))
85104
internal_transform = lasso_soln$internal_transform
@@ -91,27 +110,36 @@ run_instance = function(n, p, s){
91110
target_cov[i,i],
92111
cov_target_internal[,i],
93112
internal_transform)
94-
target_sample = rnorm(nrow(beta_samples)) * sqrt(target_cov[i,i])
95113

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),
99120
opt_transform,
100121
target_transform,
101122
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)
104127
print(pivots[i])
105128
}
106129

107130
return(pivots)
108131
}
109132

110133
collect_instances = function(n,p,s, nsim=1){
111-
134+
sample_pivots = NULL
112135
for (i in 1:nsim){
113136
result = run_instance(n,p,s)
137+
sample_pivots = c(sample_pivots, result)
114138
}
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()
115143
}
116144

117145

0 commit comments

Comments
 (0)