Como señala justmarkham, puede construir la matriz de diseño x
utilizando 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 g4
tiene K
niveles, la type.multinomial="grouped"
opción especifica que todas las características de x
entrarán en el modelo simultáneamente para cada uno de los K
predictores lineales, en lugar de tener el predictor lineal para cada clase (en general) que tenga sus propias características. glmnet
no es compatible (¿actualmente?) con penalizaciones de predictores (la x
matriz) de tipo agrupado . El paquete grplasso
sí, pero está escrito en R puro, por lo que es más lento que glmnet
, pero podría intentarlo.