虚拟系数回到因子

时间:2015-09-10 02:44:31

标签: r glmnet coefficients dummy-variable

假设我在稀疏矩阵上有一个经过训练的glmnet模型,其中多个预测变量包含不同级别的因子(以及因此不同数量的虚拟预测变量)。

df <- data.frame(y=runif(10), catVar=as.factor(sample(0:5,10,TRUE)))
A <- model.matrix(y ~ catVar,df) 
train <- cv.glmnet(A[,c('catVar3', 'catVar4')], df$y)
coef(train, s="lambda.min")

转换虚拟系数/值或整体公式的最佳(最有效)方法是什么,好像虚拟列不是稀疏格式(只有一列不同因素)?

编辑:我需要将虚拟系数及其斜率/值转换回每个级别具有不同斜率的各个系数。

3 个答案:

答案 0 :(得分:0)

使用max.col获取索引向量,然后转换回因子,将级别设置为列名。

编辑示例:

X <- model.matrix(~group-1, sleep)                                               

factor(max.col(X), labels=colnames(X))                                           

答案 1 :(得分:0)

根据mailing list

调整一个灵活的示例
n <- length(levels(df$catVar))
factor(A%*%1:n, labels = levels(df$catVar))

答案 2 :(得分:0)

稀疏矩阵的单独答案。您可以转换为三元组并直接读取索引:

require(Matrix)                                                                  
X <- Diagonal(10)[sample(10,20,T), ]                                             
factor(as(X, "TsparseMatrix")@j, labels=LETTERS[1:10])                                    

如果您的矩阵是转置存储的,那么您应该可以使用@i