Como señala justmarkham, puede construir la matriz de diseño xutilizando model.matrix. Tenga en cuenta que querrá excluir la intercepción, ya que glmnet incluye una por defecto. También es posible que desee cambiar la función de contraste predeterminada, que por omisión omite un nivel de cada factor (codificación de tratamiento). Pero debido a la penalización del lazo, esto ya no es necesario para la identificabilidad, y de hecho hace que la interpretación de las variables seleccionadas sea más complicada. Para hacer esto, establezca
contr.Dummy <- function(contrasts, ...){
conT <- contr.treatment(contrasts=FALSE, ...)
conT
}
options(contrasts=c(ordered='contr.Dummy', unordered='contr.Dummy'))
Ahora, cualquiera que sea el nivel de un factor seleccionado, puede pensar que sugiere que estos niveles específicos son importantes, en comparación con todos los niveles omitidos. En el aprendizaje automático, he visto que esta codificación se conoce como codificación de uno en caliente.
Suponiendo que g4tiene Kniveles, la type.multinomial="grouped"opción especifica que todas las características de xentrarán en el modelo simultáneamente para cada uno de los Kpredictores lineales, en lugar de tener el predictor lineal para cada clase (en general) que tenga sus propias características. glmnetno es compatible (¿actualmente?) con penalizaciones de predictores (la xmatriz) de tipo agrupado . El paquete grplassosí, pero está escrito en R puro, por lo que es más lento que glmnet, pero podría intentarlo.