@@ -93,14 +93,14 @@ fixedLassoInf <- function(x, y, beta, lambda, family=c("gaussian","binomial","co
93
93
" 'thresh' parameter, for a more accurate convergence." ))
94
94
95
95
# Get lasso polyhedral region, of form Gy >= u
96
- if (type == ' full' & p > n ) out = fixedLasso.poly (x ,y ,beta , lambda ,vars ,inactive = TRUE )
97
- else out = fixedLasso.poly (x ,y ,beta , lambda ,vars )
98
- G = out $ G
99
- u = out $ u
96
+ if (type == ' full' & p > n ) out = fixedLassoPoly (x ,y ,lambda , beta ,vars ,inactive = TRUE )
97
+ else out = fixedLassoPoly (x ,y ,lambda , beta ,vars )
98
+ A = out $ A
99
+ b = out $ b
100
100
101
101
# Check polyhedral region
102
102
tol.poly = 0.01
103
- if (min( G %*% y - u ) < - tol.poly * sqrt(sum(y ^ 2 )))
103
+ if (max( A %*% y - b ) > tol.poly * sqrt(sum(y ^ 2 )))
104
104
stop(paste(" Polyhedral constraints not satisfied; you must recompute beta" ,
105
105
" more accurately. With glmnet, make sure to use exact=TRUE in coef()," ,
106
106
" and check whether the specified value of lambda is too small" ,
@@ -191,7 +191,7 @@ fixedLassoInf <- function(x, y, beta, lambda, family=c("gaussian","binomial","co
191
191
sign [j ] = sign(sum(vj * y ))
192
192
vj = sign [j ] * vj
193
193
194
- limits.info = TG.limits(y , - G , - u , vj , Sigma = diag(rep(sigma ^ 2 , n )))
194
+ limits.info = TG.limits(y , A , b , vj , Sigma = diag(rep(sigma ^ 2 , n )))
195
195
a = TG.pvalue.base(limits.info , null_value = null_value [j ], bits = bits )
196
196
pv [j ] = a $ pv
197
197
vlo [j ] = a $ vlo * mj # Unstandardize (mult by norm of vj)
@@ -221,45 +221,39 @@ fixedLassoInf <- function(x, y, beta, lambda, family=c("gaussian","binomial","co
221
221
# ############################
222
222
223
223
224
- fixedLasso.poly =
225
- function (x , y , beta , lambda , a , inactive = FALSE ) {
226
- xa = x [,a ,drop = F ]
227
- xac = x [,! a ,drop = F ]
228
- xai = pinv(crossprod(xa ))
229
- xap = xai %*% t(xa )
230
- za = sign(beta [a ])
224
+ fixedLassoPoly =
225
+ function (X , y , lambda , beta , active , inactive = FALSE ) {
226
+ Xa = X [,active ,drop = F ]
227
+ Xac = X [,! active ,drop = F ]
228
+ Xai = pinv(crossprod(Xa ))
229
+ Xap = Xai %*% t(Xa )
230
+
231
+ za = sign(beta [active ])
231
232
if (length(za )> 1 ) dz = diag(za )
232
233
if (length(za )== 1 ) dz = matrix (za ,1 ,1 )
233
234
234
- if (inactive ) {
235
- P = diag(1 ,nrow(xa )) - xa %*% xap
235
+ if (inactive ) { # should we include the inactive constraints?
236
+ R = diag(1 ,nrow(Xa )) - Xa %*% Xap # R is residual forming matrix of selected model
236
237
237
- G = - rbind(
238
- 1 / lambda * t(xac ) %*% P ,
239
- - 1 / lambda * t(xac ) %*% P ,
240
- - dz %*% xap
238
+ A = rbind(
239
+ 1 / lambda * t(Xac ) %*% R ,
240
+ - 1 / lambda * t(Xac ) %*% R ,
241
+ - dz %*% Xap
241
242
)
242
243
lambda2 = lambda
243
- if (length(lambda )> 1 ) lambda2 = lambda [a ]
244
- u = - c(
245
- 1 - t(xac ) %*% t(xap ) %*% za ,
246
- 1 + t(xac ) %*% t(xap ) %*% za ,
247
- - lambda2 * dz %*% xai %*% za )
244
+ if (length(lambda )> 1 ) lambda2 = lambda [active ]
245
+ b = c(
246
+ 1 - t(Xac ) %*% t(Xap ) %*% za ,
247
+ 1 + t(Xac ) %*% t(Xap ) %*% za ,
248
+ - lambda2 * dz %*% Xai %*% za )
248
249
} else {
249
- G = - rbind(
250
- # 1/lambda * t(xac) %*% P,
251
- # -1/lambda * t(xac) %*% P,
252
- - dz %*% xap
253
- )
250
+ A = - dz %*% Xap
254
251
lambda2 = lambda
255
- if (length(lambda )> 1 ) lambda2 = lambda [a ]
256
- u = - c(
257
- # 1 - t(xac) %*% t(xap) %*% za,
258
- # 1 + t(xac) %*% t(xap) %*% za,
259
- - lambda2 * dz %*% xai %*% za )
252
+ if (length(lambda )> 1 ) lambda2 = lambda [active ]
253
+ b = - lambda2 * dz %*% Xai %*% za
260
254
}
261
255
262
- return (list (G = G , u = u ))
256
+ return (list (A = A , b = b ))
263
257
}
264
258
265
259
# #############################
0 commit comments