J'ai fréquemment utilisé pour diagnostiquer mes données multivariées à l'aide de l'ACP (données omiques avec des centaines de milliers de variables et des dizaines ou des centaines d'échantillons). Les données proviennent souvent d'expériences avec plusieurs variables indépendantes catégorielles définissant certains groupes, et je dois souvent passer par quelques composants avant de pouvoir trouver ceux qui montrent une séparation entre les groupes d'intérêt. J'ai trouvé une façon plutôt primitive de trouver de tels composants discriminants, et je me demande
- dans quelle mesure cela est raisonnable / justifiable, et
- s'il existe de meilleures façons d'y parvenir.
Notez que ceci est exploratoire. Avant de convaincre quelqu'un d'autre, je veux me convaincre. Si je vois qu'il y a des composants qui distinguent clairement les groupes d'intérêt (par exemple, contrôle vs traitement), même s'ils sont responsables d'une petite partie de la variance des réponses, je lui fais plus confiance que le résultat, disons, d'une machine supervisée apprentissage.
Voici mon approche. Je vais utiliser l'exemple de jeu de données "metabo" de pca3d dans R.
L'idée est d'évaluer dans quelle mesure la variance de chacun des composants peut être expliquée par la variable indépendante. Pour cela, je calcule un modèle simple pour chaque composant et utilise comme métrique pour classer les composants de "plus intéressant" à "moins intéressant".
require( pca3d )
# data on metabolic profiles of TB patients and controls
data( metabo )
# first column is the independent variable
pca <- prcomp( metabo[,-1], scale.= T )
# create a model for each component
lm.m <- lm( pca$x ~ metabo[,1] )
lm.s <- summary( lm.m )
lm.r2 <- sapply( lm.s, function( x ) x$r.squared )
plot( lm.r2, type= "l" )
text( 1:length( lm.r2 ), lm.r2, 1:length( lm.r2 ), pos= 3 )
Voici le résultat. Le graphique montre le pourcentage de variance de chaque composant expliqué par la variable indépendante dans metabo[,1]
.
Nous pouvons trier les composants par pour trouver ceux avec lesquels afficher ; les trois premiers composants sont 2, 1 et 7.order( lm.r2, decreasing= TRUE )
pca3d( pca, components= c( 1, 2, 7 ), group= metabo[,1] )
Voici l'intrigue:
(Les catégories rouge et verte sont deux groupes de sujets qui ne sont pas des patients, et il faut s'attendre à ce qu'ils ne puissent pas être distingués.)
Pour reformuler mes questions,
- Cette approche a-t-elle un sens pour vous? Mon problème est qu'il ressemble trop au dragage de données. Aussi, intuitivement, je pense que je devrais peut-être tourner la table et demander quelle partie de la variance dans la variable indépendante est expliquée par chaque variable? Enfin, je suis (presque) sûr que je réinvente mal la roue, donc ma deuxième question est
- Y a-t-il quelque chose de mieux?
Notez que je ne veux pas passer aux moindres carrés partiels ou à quelque chose de similaire à ce stade; Je veux juste diagnostiquer l'APC dans le contexte de ma classification.
to find out what share of the overall variance in the data matrix is explained by a given classification
Si vous voulez savoir cela, vous n'avez pas besoin de PCA. Calculez simplement la proportion de la somme des carrés entre les groupes par rapport à la somme des carrés totale:(SStotal-SSwithin)/SStotal
où SSwithin est la somme des carrés regroupés au sein du groupe.Is there anything better?
.Réponses:
La réponse à votre question n ° 1 est oui, votre solution revient à draguer des données. La réponse à votre question n ° 2 est oui, il existe des méthodes supérieures dans la littérature.
Vous exécutez une analyse qui ressemble à la régression des composants principaux, sauf que vous avez échangé vos variables indépendantes et dépendantes, ce qui entraîne une grande analyse de régression multivariée (par opposition à multiple ). La régression multivariée nécessite que la taille de votre échantillon soit supérieure au nombre de variables dépendantes, une exigence que vous violez complètement dans votre exemple.
Si vous êtes vraiment déterminé à exécuter PCA sur vos données, puis à utiliser la régression multivariée, vous devez utiliser une méthode appropriée. Par exemple, examinez MRCE et les méthodes connexes [1].
Cependant, malgré quelques commentaires déroutants que vous avez faits, tout dans votre analyse telle que présentée actuellement suggère que votre objectif ultime est d'identifier les relations entre un grand ensemble de variables continues (metabo [, - 1]) et une seule variable catégorielle (metabo [ ,1]). L'ACP est une mauvaise façon d'y parvenir. Il existe deux classes générales de solutions à ce problème dans le cas des dimensions élevées: premièrement, les solutions qui supposent une rareté et les solutions qui supposent une structure factorielle.
Les solutions basées sur la rareté supposent généralement que seule une très faible proportion de variables est en fait liée à la variable catégorielle d'intérêt, et tentent de trouver ce petit sous-ensemble; voir par exemple DALASS [2]. Les méthodes basées sur la structure factorielle supposent que vos variables discriminantes sont des manifestations de variables latentes sous-jacentes ayant une véritable relation avec la variable catégorielle. Un exemple de cette classe de méthodes est DLDA [3].
Notez que je ne recommande pas nécessairement les méthodes que j'ai mentionnées pour vos données; vous devez soigneusement considérer vos objectifs et une connaissance a priori du problème lors du choix d'une méthode appropriée.
[1] Rothman, Levina, Zhu (2010). Régression multivariée clairsemée avec estimation de covariance. Journal of Computational and Graphical Statistics, Volume 19, Numéro 4, Pages 947–962.
[2] Nickolay T. Trendafilov, Ian T. Jolliffe, DALASS: Variable selection in discriminant analysis via the LASSO, Computational Statistics & Data Analysis, Volume 51, Numéro 8, 1er mai 2007, Pages 3718-3736.
[3] Yu, Yang (2001). Un algorithme LDA direct pour les données de grande dimension avec application à la reconnaissance faciale. Reconnaissance de formes 34, 2067-2070.
la source
@ahfoss vous a déjà indiqué LDA comme analogon de classification de PCA. En fait, ces deux méthodes sont liées l'une à l'autre et également au PLS:
Le PLS peut être considéré comme une régularisation comme le LASSO, et un PLS clairsemé est également disponible (même si je ne l'ai pas utilisé: mes données sont plus adaptées au PLS normal, qui ne suppose pas la rareté). Pour une discussion intéressante sur les différentes méthodes de régularisation, voir par exemple les éléments de l'apprentissage statistique .
Note pratique: si vous travaillez en R, j'ai un package en cours de développement qui fournit des modèles PLS-LDA et PCA-LDA. Faites-moi savoir si vous souhaitez essayer.
Afin d'éviter le dragage de données, vous devez valider votre modèle final (= mesurer ses performances) avec des données indépendantes.
Indépendant signifie ici que ce cas (patient?) N'a en aucune façon contribué à l'ajustement du modèle . En particulier,
Comme vous n'avez que peu de cas, une stratégie de rééchantillonnage serait appropriée. Dans cette situation, il est probablement préférable de corriger tout hyperparamètre (comme le nombre de variables latentes PC ou PLS, ou lié à LASSO) par des connaissances externes afin d'éviter une deuxième division interne de vos données d'entraînement pour l'optimisation de l'hyperparamètre.
la source
pls::plsr
pour les pls (ce qui permet de choisir parmi différents algorithmes). Et j'ai un tas de fonctions de post-traitement, par exemple pour retourner et faire pivoter le modèle, ce qui est parfois utile pour l'interprétation.