R: glmnet:如何强制系数达到特定符号

5

我有一个非常大的矩阵,因此我正在使用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个回答

8

来自?glmnet:

参数:

...

lower.limits: 每个系数的下限向量;默认为‘-Inf’。每个值必须为非正数。可以表示为单个值(然后将被复制),否则为长度为‘nvars’的向量

upper.limits: 每个系数的上限向量;默认为‘Inf’。参见‘lower.limits’

要约束您的参数,您需要调用:

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

有没有一种方法可以忽略接近于零的系数,即fit1 = glmnet(x,y,lower.limits = c(0,0,0,-Inf,-Inf),upper.limits = c(Inf,Inf,Inf,0,0))? - itthrill
1
fit.lasso <- glmnet(x.train, y.train, family="gaussian", alpha=1) 适合.套索 <- glmnet(x.train,y.train,family =“高斯”,alpha = 1) - adam.888

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接