|
2 | 2 | # for the solution of
|
3 | 3 | # min 1/2 || y - \beta_0 - X \beta ||_2^2 + \lambda || \beta ||_1
|
4 | 4 |
|
5 |
| -fixedLassoInf <- function(x, y, beta, lambda, family=c("gaussian","binomial","cox"),intercept=TRUE, status=NULL, |
| 5 | +fixedLassoInf <- function(x, y, beta, lambda, family=c("gaussian","binomial","cox"),intercept=TRUE, add.targets=NULL, status=NULL, |
6 | 6 | sigma=NULL, alpha=0.1,
|
7 | 7 | type=c("partial","full"), tol.beta=1e-5, tol.kkt=0.1,
|
8 | 8 | gridrange=c(-100,100), bits=NULL, verbose=FALSE) {
|
@@ -60,6 +60,12 @@ sigma=NULL, alpha=0.1,
|
60 | 60 | bits = NULL
|
61 | 61 | }
|
62 | 62 |
|
| 63 | + if (!is.null(add.targets) && (!is.vector(add.targets) |
| 64 | + || !all(is.numeric(add.targets)) || !all(add.targets==floor(add.targets)) |
| 65 | + || !all(add.targets >= 1 && add.targets <= p))) { |
| 66 | + stop("'add.targets' must be a vector of integers between 1 and p") |
| 67 | + } |
| 68 | + |
63 | 69 | # If glmnet was run with an intercept term, center x and y
|
64 | 70 | if (intercept==TRUE) {
|
65 | 71 | obj = standardize(x,y,TRUE,FALSE)
|
@@ -117,12 +123,15 @@ sigma=NULL, alpha=0.1,
|
117 | 123 | }
|
118 | 124 | }
|
119 | 125 |
|
| 126 | + # add additional targets for inference if provided |
| 127 | + if (!is.null(add.targets)) vars = sort(unique(c(vars,add.targets,recursive=T))) |
| 128 | + |
120 | 129 | k = length(vars)
|
121 | 130 | pv = vlo = vup = numeric(k)
|
122 | 131 | vmat = matrix(0,k,n)
|
123 | 132 | ci = tailarea = matrix(0,k,2)
|
124 | 133 | sign = numeric(k)
|
125 |
| - |
| 134 | + |
126 | 135 | if (type=="full" & p > n) {
|
127 | 136 | if (intercept == T) {
|
128 | 137 | pp=p+1
|
|
0 commit comments