Como justmarkham aponta, você pode construir a matriz de design x
usando model.matrix
. Observe que você deseja excluir a interceptação, pois o glmnet inclui uma por padrão. Você também pode alterar a função de contraste padrão, que, por padrão, deixa de fora um nível de cada fator (codificação do tratamento). Porém, devido à penalidade no laço, isso não é mais necessário para a identificabilidade e, de fato, torna a interpretação das variáveis selecionadas mais complicada. Para fazer isso, defina
contr.Dummy <- function(contrasts, ...){
conT <- contr.treatment(contrasts=FALSE, ...)
conT
}
options(contrasts=c(ordered='contr.Dummy', unordered='contr.Dummy'))
Agora, quaisquer que sejam os níveis de um fator selecionados, você pode pensar nisso como sugerindo que esses níveis específicos são importantes, versus todos os níveis omitidos. No aprendizado de máquina, eu vi essa codificação conhecida como codificação one-hot.
Assumindo que g4
tem K
níveis, os type.multinomial="grouped"
especifica de opção que as características de x
vai todos, insira o modelo simultaneamente para cada um dos K
preditores lineares, em oposição a ter o preditor linear para cada classe (em geral) que têm as suas próprias características. glmnet
(atualmente?) não suporta penalidades de tipo agrupado de preditores (a x
matriz). O pacote grplasso
sim, mas está escrito em R puro, então é mais lento que glmnet
, mas você pode tentar.