Sélection des fonctionnalités et modèle avec glmnet sur les données de méthylation (p >> N)

29

Je voudrais utiliser GLM et Elastic Net pour sélectionner ces fonctionnalités pertinentes + construire un modèle de régression linéaire (c'est-à-dire à la fois la prédiction et la compréhension, il serait donc préférable de se retrouver avec relativement peu de paramètres). La sortie est continue. C'est gènes pour 50 cas. J'ai lu sur le paquet, mais je ne suis pas sûr à 100% des étapes à suivre:2000050glmnet

  1. Effectuez CV pour choisir lambda:
    cv <- cv.glmnet(x,y,alpha=0.5)
    (Q1) étant donné les données d'entrée, choisiriez-vous une valeur alpha différente?
    (Q2) Dois -je faire autre chose avant de construire le modèle?

  2. Ajuster le modèle:
    model=glmnet(x,y,type.gaussian="covariance",lambda=cv$lambda.min)
    (Q3) quelque chose de mieux que la "covariance"?
    (Q4) Si lambda a été choisi par CV, pourquoi cette étape est-elle nécessaire nlambda=?
    (Q5) est-il préférable d'utiliser lambda.minou lambda.1se?

  3. Obtenez les coefficients, pour voir quels paramètres sont tombés ("."):
    predict(model, type="coefficients")

    Dans la page d'aide il y a beaucoup de predictméthodes (par exemple, predict.fishnet, predict.glmnet, predict.lognet, etc.). Mais tout "simple" prédire comme je l'ai vu sur un exemple.
    (Q6) Dois-je utiliser predictou predict.glmnetou autre?

Malgré ce que j'ai lu sur les méthodes de régularisation, je suis assez nouveau dans R et dans ces packages statistiques, il est donc difficile d'être sûr d'adapter mon problème au code. Toute suggestion sera la bienvenue.

MISE
À JOUR Basé sur "Comme indiqué précédemment, un objet de train de classe contient un élément appelé finalModel, qui est le modèle ajusté avec les valeurs des paramètres de réglage sélectionnés par rééchantillonnage. Cet objet peut être utilisé de manière traditionnelle pour générer des prédictions pour de nouveaux échantillons, en utilisant celui fonction de prédiction du modèle. "

Utilisation caretpour régler à la fois alpha et lambda:

  trc = trainControl(method=cv, number=10)  
  fitM = train(x, y, trControl = trC, method="glmnet")  

Ne fitMremplacer étape précédente 2? Si oui, comment spécifier maintenant les options glmnet ( type.gaussian="naive",lambda=cv$lambda.min/1se)?
Et ce qui suit predictpas, puis - je remplacer modelà fitM?

Si je fais

  trc = trainControl(method=cv, number=10)  
  fitM = train(x, y, trControl = trC, method="glmnet")  
  predict(fitM$finalModel, type="coefficients")

est-ce que cela a du sens ou est-ce que je mélange de manière incorrecte le vocabulaire des deux packages?

PGreen
la source

Réponses:

42

Partie 1

Dans le filet élastique, deux types de contraintes sur les paramètres sont utilisés

  1. βj
  2. βj

α

αλλcv.glmnet

αλ

Partie 2

Q3

mn?glmnet

type.gaussian = "naive"

mn"naive"n

glmnet"naive"m>500

Q4

nlambdaα=0,5λλnlambda

Q5

lambda.minλλklambda.1seλlambda.minlambda.1seλkpli estimation CV de l'erreur du meilleur modèle.

Le choix t'appartient:

  1. Le meilleur modèle qui peut être trop complexe ou légèrement sur-équipé: lambda.min
  2. Le modèle le plus simple qui présente une erreur comparable au meilleur modèle étant donné l'incertitude: lambda.1se

3e partie

C'est simple et c'est quelque chose que vous rencontrerez beaucoup avec R. Vous utilisez la predict()fonction 99,9% du temps. R organisera l'utilisation de la fonction correcte pour l'objet fourni comme premier argument.

Plus techniquement, predictest une fonction générique, qui a des méthodes (versions de la fonction) pour des objets de différents types (techniquement appelés classes ). L'objet créé par glmnetpossède une classe (ou des classes) particulière selon le type de modèle réellement ajusté. glmnet (le package) fournit des méthodes pour la predictfonction de ces différents types d'objets. R connaît ces méthodes et choisira la méthode appropriée en fonction de la classe de l'objet fourni.

Réintégrer Monica - G. Simpson
la source
2
GRANDE réponse! J'ai lu maintenant sur le curseur. Je ne suis pas sûr à 100% de la relation entre le curseur et le paquet glmnet, j'ai donc fait une mise à jour de ma question pour clarifier la `` fusion '' de ces derniers avec les paquets ou le passage de glmnet au caret.
PGreen
1
@PGreen: caretest un package de wrapper R qui enveloppe les interfaces de fonction de plus de 100 packages ML pour être plus cohérent et ajoute CV, gridsearch, modifie les paramètres par défaut insensés, etc. Ce n'est pas sans ses bizarreries mais c'est assez bon et largement utilisé.
smci
Je veux juste ajouter que pour le réglage alpha, vous pouvez utiliser cva.glmnet(..)au lieu de juste cv.glmnet(...)et régler alpha et lambda en même temps. Ensuite, vous pouvez exécuter minlossplot(cva.fit)pour voir quel alpha donne le meilleur résultat. Cela fait tous deux partie de glmnetUtils
Espen Riskedal