我有一个非常大的矩阵,所以我使用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)
感谢您的帮助。
答案 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))