Lors de l'utilisation de formules comportant des facteurs, les modèles ajustés appellent les coefficients XY, X étant le nom du facteur et Y un niveau particulier. Je veux être capable de créer une formule à partir des noms de ces coefficients. La raison: Si j'ajuste un lasso à une matrice de conception clairsemée (comme je le fais ci-dessous), je voudrais créer un nouvel objet de formule qui ne contienne que des termes pour les coefficients non nuls.Conversion de noms de coefficients en une formule dans R
require("MatrixModels")
require("glmnet")
set.seed(1)
n <- 200
Z <- data.frame(letter=factor(sample(letters,n,replace=T),letters),
x=sample(1:20,200,replace=T))
f <- ~ letter + x:letter + I(x>5):letter
X <- sparse.model.matrix(f, Z)
beta <- matrix(rnorm(dim(X)[2],0,5),dim(X)[2],1)
y <- X %*% beta + rnorm(n)
myfit <- glmnet(X,as.vector(y),lambda=.05)
fnew <- rownames(myfit$beta)[which(myfit$beta != 0)]
[1] "letterb" "letterc" "lettere"
[4] "letterf" "letterg" "letterh"
[7] "letterj" "letterm" "lettern"
[10] "lettero" "letterp" "letterr"
[13] "letters" "lettert" "letteru"
[16] "letterw" "lettery" "letterz"
[19] "lettera:x" "letterb:x" "letterc:x"
[22] "letterd:x" "lettere:x" "letterf:x"
[25] "letterg:x" "letterh:x" "letteri:x"
[28] "letterj:x" "letterk:x" "letterl:x"
[31] "letterm:x" "lettern:x" "lettero:x"
[34] "letterp:x" "letterq:x" "letterr:x"
[37] "letters:x" "lettert:x" "letteru:x"
[40] "letterv:x" "letterw:x" "letterx:x"
[43] "lettery:x" "letterz:x" "letterb:I(x > 5)TRUE"
[46] "letterc:I(x > 5)TRUE" "letterd:I(x > 5)TRUE" "lettere:I(x > 5)TRUE"
[49] "letteri:I(x > 5)TRUE" "letterj:I(x > 5)TRUE" "letterl:I(x > 5)TRUE"
[52] "letterm:I(x > 5)TRUE" "letterp:I(x > 5)TRUE" "letterq:I(x > 5)TRUE"
[55] "letterr:I(x > 5)TRUE" "letteru:I(x > 5)TRUE" "letterv:I(x > 5)TRUE"
[58] "letterx:I(x > 5)TRUE" "lettery:I(x > 5)TRUE" "letterz:I(x > 5)TRUE"
De cela, je voudrais avoir une formule
~ I(letter=="d") + I(letter=="e") + ...(etc)
J'ai vérifié la formule() et all.vars() en vain. En outre, écrire une fonction pour analyser cela est un peu pénible à cause des différents types de termes qui peuvent apparaître. Par exemple, pour x: lettre quand x est une valeur numérique et lettre est un facteur, ou I (x> 5): lettre comme un autre cas ennuyeux. Donc, je ne suis pas au courant de certaines fonctions pour convertir entre la formule et la représentation de son caractère et vice versa?
Ce n'est pas une formule que je reconnais dans R –
Peut-être que je me méprends, mais vous semblez ne pas grep complètement les formules du modèle de R. Vous n'incluez pas dans la formule les bits XY, vous incluez le X et 'model.matrix()' et 'model.frame()' font leur truc pour étendre les niveaux du X aux colonnes pertinentes de la matrice du modèle, le XY. –
Pourriez-vous expliquer pourquoi vous voulez la formule? Quelle est l'utilisation finale? –