Skip to content

Commit 42cd878

Browse files
WIP: adding logistic option, need to solve logistic problem
1 parent 4fc539d commit 42cd878

File tree

2 files changed

+17
-14
lines changed

2 files changed

+17
-14
lines changed

selectiveInference/R/funs.randomized.R

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
randomizedLasso = function(X,
77
y,
88
lam,
9-
family="gaussian",
9+
family=c("gaussian","binomial"),
1010
noise_scale=NULL,
1111
ridge_term=NULL,
1212
noise_type=c('gaussian', 'laplace'),
@@ -18,6 +18,8 @@ randomizedLasso = function(X,
1818
kkt_stop=TRUE,
1919
parameter_stop=TRUE)
2020
{
21+
family = match.arg(family)
22+
2123
n = nrow(X); p = ncol(X)
2224

2325
mean_diag = mean(apply(X^2, 2, sum))
@@ -65,8 +67,8 @@ randomizedLasso = function(X,
6567
nactive = as.integer(0)
6668

6769
result = solve_QP_wide(X, # design matrix
68-
lam / n, # vector of Lagrange multipliers
69-
ridge_term / n, # ridge_term
70+
lam / n, # vector of Lagrange multipliers
71+
ridge_term / n, # ridge_term
7072
max_iter,
7173
soln,
7274
linear_func,
@@ -177,7 +179,7 @@ randomizedLasso = function(X,
177179
observed_raw = -t(X) %*% y
178180
if (family=="binomial"){
179181
beta_E = result$soln[active_set]
180-
observed_raw = observed_raw+t(X)%*%pi_fn(beta_E)-L_E %*% beta_E
182+
observed_raw = observed_raw + t(X)%*%pi_fn(beta_E) - L_E %*% beta_E
181183
}
182184
inactive_lam = lam[inactive_set]
183185
inactive_start = sum(unpenalized) + sum(active)
@@ -213,11 +215,11 @@ randomizedLasso = function(X,
213215
optimization_transform = opt_transform,
214216
internal_transform = internal_transform,
215217
log_optimization_density = log_optimization_density,
216-
observed_opt_state = observed_opt_state,
218+
observed_opt_state = observed_opt_state,
217219
observed_raw = observed_raw,
218-
noise_scale = noise_scale,
219-
soln = result$soln,
220-
perturb = perturb_
220+
noise_scale = noise_scale,
221+
soln = result$soln,
222+
perturb = perturb_
221223
))
222224

223225
}
@@ -352,8 +354,7 @@ conditional_density = function(noise_scale, lasso_soln) {
352354
randomizedLassoInf = function(X,
353355
y,
354356
lam,
355-
family=c("gaussian", "logistic"),
356-
sampler=c("norejection", "adaptMCMC"),
357+
family=c("gaussian", "binomial"),
357358
sigma=NULL,
358359
noise_scale=NULL,
359360
ridge_term=NULL,
@@ -436,15 +437,13 @@ randomizedLassoInf = function(X,
436437
X_E = X[, active_set]
437438
X_minusE = X[, inactive_set]
438439

439-
440-
441-
if (family=="gaussian"){
440+
if (family == "gaussian") {
442441
lm_y = lm(y ~ X_E - 1)
443442
sigma_resid = sqrt(sum(resid(lm_y)^2) / lm_y$df.resid)
444443
observed_target = lm_y$coefficients
445444
W_E = diag(rep(1,n))
446445
observed_internal = c(observed_target, t(X_minusE) %*% (y-X_E%*% observed_target))
447-
} else if (family=="binomial"){
446+
} else if (family == "binomial") {
448447
glm_y = glm(y~X_E-1)
449448
sigma_resid = sqrt(sum(resid(glm_y)^2) / glm_y$df.resid)
450449
observed_target = as.matrix(glm_y$coefficients)

selectiveInference/man/randomizedLassoInf.Rd

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ randomization.
1414
randomizedLassoInf(X,
1515
y,
1616
lam,
17+
family=c("gaussian", "binomial"),
1718
sigma=NULL,
1819
noise_scale=NULL,
1920
ridge_term=NULL,
@@ -49,6 +50,9 @@ Value of lambda used to compute beta. See the above warning
4950
where obj is the object returned by glmnet (and [-1] removes the intercept,
5051
which glmnet always puts in the first component)
5152
}
53+
\item{family}{
54+
Response type: "gaussian" (default), "binomial".
55+
}
5256
\item{sigma}{
5357
Estimate of error standard deviation. If NULL (default), this is estimated
5458
using the mean squared residual of the full least squares based on

0 commit comments

Comments
 (0)