R:glmnet:强制系数达到某个符号

时间:2016-03-10 21:20:14

标签: r glmnet

我有一个非常大的矩阵,所以我使用glmnet进行回归。 我有一个条件,p的名称必须具有正系数,而n的名称必须具有负系数。

如何在glmnet中强制执行此条件? 以下是一个小例子:

library(glmnet)

y <- cumsum(sample(c(-1, 1),100, TRUE))
p1 <- cumsum(sample(c(-1, 1),100, TRUE))
p2 <- cumsum(sample(c(-1, 1),100, TRUE))
p3 <- cumsum(sample(c(-1, 1),100, TRUE))
n1 <- cumsum(sample(c(-1, 1),100, TRUE))
n2 <- cumsum(sample(c(-1, 1),100, TRUE))

df1  <- data.frame(y,p1,p2,p3,n1,n2)
df1




y <-  as.matrix(df1[,1])
x <-  as.matrix(df1[,-1])

fit1=glmnet(x,y)

coefall <- coef(fit1,s=0.005) 

感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

来自?glmnet

  

参数:

     

...

     

lower.limits:每个系数的下限矢量;默认             “-Inf”。每个都必须是非正面的。可以呈现             作为单个值(然后将被复制),否则a             矢量长度'nvars'

     

upper.limits:每个系数的上限矢量;默认             “天道酬勤”。见'lower.limits'

要限制参数,您必须致电:

fit1=glmnet(x, y, lower.limits=c(0,   0,   0,   -Inf, -Inf), 
                  upper.limits=c(Inf, Inf, Inf, 0,    0))