RE: ADE list

From: Daniel Chessel (chessel@biomserv.univ-lyon1.fr)
Date: Sat May 03 2003 - 09:04:28 MEST


Une conversation avec un étudiant qui peut servir à d'autres.

VP > Bonjour

VP > Je me trouve maintenant en stage aux Etats-Unis, dans une entreprise de biotech qui
VP > s'appelle Althea Technologies, et qui fait notamment dans la quantification de genes.
VP > J'ai choisi d'utiliser R dans le cadre de mon travail (tests stats, data mining...),
VP > et j'aurais besoin, pour pouvoir appliquer une methode de selection de genes,
VP > d'effectuer l'orthogonalisation d'un tableau sur la base d'un vecteur propre donne
VP > (en fait la premiere composante principale resultante d'une l'ACP sur ce tableau).
VP > J'aimerais savoir s'il existe a votre connaissance une fonction sur R qui permet
VP > d'effectuer l'orthogonalisation d'une matrice sur un vecteur donne.
VP > Merci d'avance pour l'info
VP > Bien cordialement
VP > Vivian PRECLIN
VP > INSA, 5 BIM

votre question est intéressante et peux instruire d'autres personnes
merci de la renvoyer telle quelle sur le forum adelist
je réponds dans la journée

VP > J'ai envoye ma question au forum ADElist
VP >( a l'adresse indiquee, a savoir : adelist@biomserv.univ-lyon1.fr),
VP > et elle n'est toujours pas repertoriee...
VP > aurais-je fait une fausse manip ?

je crois qu'il faut être inscrit pour que le message soit accepté.
Je me demande si je comprend bien votre question. Pour être précis
qu'entendez vous par "une fonction sur R qui permet d'effectuer l'orthogonalisation d'une matrice sur un vecteur donne" et dans quel but vous vous posez cette question ?
Si vous ne voulez pas vous inscrire je vous répondrai directement et ferai une copie question-réponse au forum

VP > Je souhaiterais utiliser sur des profils d'expression de genes
VP > la methode du "gene shaving" decrite par des gens de Stanford,
VP > et qui aboutit a des clusters de genes hautement correles au sein d'un cluster.

VP > On prend le tableau original (contenant les niveaux d'expression de plusieurs
VP > genes -lignes - pour , on calcule sa premiere composante principale et on range
VP > les genes du tableau selon leur correlation avec cette composante principale.
VP > On enleve alors les moins correles, et on recalcule la composante principale
VP > sur le jeu ainsi reduit, et ainsi de suite jusqu'a atteindre la taille de cluster
VP > desiree, par exemple. Pour obtenir un deuxieme cluster non correle,
VP > l'article dit qu'il faut ensuite orthogonaliser les donnees.
VP > Je vous donne le lien...ils l'expliqueront mieux que moi.
VP > http://genomebiology.com/2000/1/2/research/0003
VP > Donc, ma question est de savoir si R possede une telle fonction,
VP > capable d'effectuer une orthogonalisation de ce genre.
VP > OK pour la copie de la question-reponse directement sur le forum.

La question est effectivement intéressante à plusieurs titres.

En mathématiques on dit orthogonaliser pour désigner l'opération qui remplace la base d'un sous-espace vectoriel par une base orthogonale du même sous-espace. La procédure de Gram-Schmidt est bien connue pour faire cela et fonctionne par itération avec un projecteur.

En statistiques le mot désigne une opération voisine dans la même logique.
Orthogonaliser un tableau X sur une variable Y c'est remplacer chaque colonne de X par les résidus de sa prédiction sur y. C'est ce qui se passe à chaque tour dans Gram-Schmidt et c'est pourquoi on a conservé le terme.

Une expérience simple illustre la procédure de l'article cité. Dans une ACP ordinaire les composantes principales successives sont non corrélées directement. On peut observer qu'on obtient le même résultat en faisant successivement des ACP à une composante avec une orthogonalisation à chaque tour :

library(ade4)
data(meaudret) # jeu de données de la librairie ade4
pca1=dudi.pca(meaudret$mil,scan=F,nf=1) # acp normée en ne gardant qu'un facteur
pca1$eig # les valeurs propres de cette acp
[1] 5.174737 1.320419 1.093376 0.732113 0.490214 0.109835 0.052960 0.020031 0.006316
dim(pca1$tab)# le tableau centré et normé par variables
[1] 20 9
length(pca1$l1[,1]) # la première composante principale
[1] 20
# l'orthogonalisation de tab1 sur la première composante
tab2=apply(pca1$tab,2, function(x) residuals(lm(x~pca1$l1[,1])))
pca2 <- dudi.pca(tab2,scan=F,scale=F) # acp sans nouvelle normalisation du nouveau tableau
pca2$eig # l'acp pca2 est la suite de pca1
[1] 1.320419 1.093376 0.732113 0.490214 0.109835 0.052960 0.020031 0.006316
# l'orthogonalisation de tab2 sur la première composante de tab1
tab3=apply(pca2$tab,2, function(x) residuals(lm(x~pca2$l1[,1])))
pca3 <- dudi.pca(tab3,scan=F,scale=F) # acp sans nouvelle normalisation du nouveau tableau
pca3$eig # l'acp pca3 est la suite de pca2
[1] 1.093376 0.732113 0.490214 0.109835 0.052960 0.020031 0.006316
tab4<-apply(pca3$tab,2, function(x) residuals(lm(x~pca3$l1[,1])))
pca4 <- dudi.pca(tab4,scan=F,scale=F)
pca4$eig
[1] 0.732113 0.490214 0.109835 0.052960 0.020031 0.006316

etc ...

Dans le contexte orthogonaliser les données veut dire prendre pour nouvelles données les résidus de la régression de chaque colonne sur la composante principale précédente. Quand on fait cela, le nouveau tableau ne contient que des variables orthogonales (non corrélées) à la composante principale précédente donc la nouvelle composante principale comme combinaison linéaire gardera cette propriété. Les vieux programmes d'ACP qui ne calculaient que la première valeur propre et le premier vecteur propre fonctionnaient comme cela. On utilise cette technique en ACPVI et en co-inertie multiple par exemple.

Comme quoi l'algèbre linéaire est utile en biologie moléculaire comme en écologie
tralala ...

cordialement



This archive was generated by hypermail 2b30 : Tue Sep 07 2004 - 13:45:21 MEST