虚拟系数回到因子

Dummy coefficients back to factor

假设我在一个稀疏矩阵上有一个经过训练的 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")

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

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

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

编辑示例:

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

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

改编 mailing list

中的巧妙示例
n <- length(levels(df$catVar))
factor(A%*%1:n, labels = levels(df$catVar))

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

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

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