Re: RE : Discriminante: individus supplémentaires & matrice de confusion

From: Daniel Chessel (chessel@biomserv.univ-lyon1.fr)
Date: Thu Oct 06 2005 - 15:07:20 MEST


Nicolas Poulet a écrit :

> Aucun problème pour obtenir les coordonnées des individus
> supplémentaires grâce à « predict.lda » ($x). Maintenant, l'intérêt
> (pour moi du moins) est de les superposer graphiquement aux individus
> du tableau de départ. J’ai trouvé la fonction « plot » laquelle,
> associée à une lda, permet d’obtenir un graphe des individus.
>
> Mais je préfère les graphes Ade (étoiles et/ou ellipses) que je trouve
> plus parlant. C’est pourquoi j’ai besoin des coordonnées des individus
> du tableau de départ lesquelles n’apparaissent pas dans les sorties «
> lda ».
>
> En bref, comment récupérer les coordonnées des individus d’une analyse
> discriminante obtenue avec la fonction « lda » ?
>
Bonne question. Vous avez la réponse dans la fiche
http://pbil.univ-lyon1.fr/R/fichestd/tdr63.pdf
Désolé, mais dans le message précédent, j'ai tapé tdr64 qui n'a rien à
voir avec le chemilshlimblick!

En fait les coordonnées ne sont pas le terme approprié. Il vaut mieux
dire les scores :
w1 <- as.vector(as.matrix(iris[,1:4])%*%lda1$scaling[,1])

L'objet lda1 créé par lda contient une composante scaling qui contient
les coefficients des variables qui fournissent les fonctions discriminantes.

Pour avoir toute les coordonnées faire
w <- as.data.frame(x%*%lda1$scaling)
x est la matrice des données d'origine.

exemple : utiliser la fiche
http://pbil.univ-lyon1.fr/R/pps/pps001.pdf

/download.file("http://pbil.univ-lyon1.fr/R/pps/pps001.txt","pps001.txt",mode="wb")
x<-read.table("pps001.txt",h=T)
cla <- x[,1]
//w <- log(as.matrix(x[,-1]+0.001))
//library(MASS)
ana <- lda(w,cla)
coo <- as.data.frame(w%*%ana$scaling)
library(ade4)
s.class(coo,cla)
/
à comparer avec

/wdf <- as.data.frame(w)
pca1 <- dudi.pca(wdf,scann=F,scal=T)
ad1 <- discrimin(pca1,cla,scann=F)
s.class(ad1$li,cla)

/Vérifier qu'à une transformation linéaire près, c'est la même chose :/
plot(ad1$li[,1],coo[,1])
plot(ad1$li[,2],coo[,2])
/
Mais ce n'est pas tout à fait la même chose. La première donne le score
de variance totale unité maximisant la variance inter.
L'autre donne le score de variance intra unité qui maximise la variance
inter.
Le premier donne des scores non centrés, le second oui.
Mais le premier est dans le *Main Package of Venables and Ripley's
MASS*. *Recommended*.
Alors on va rester poli.

Mais l'essentiel de la réponse est dans le produit de matrices
données*coefficients
/w%*%ana$scaling
/Remplacer les données par des observations supllémentaires et vous avez
les scores des individus supplémentaires.

A noter. *ana *est une liste dont on ne voit que ce que veut en montrer
*print.lda(ana)*
print.lda est une fonction cachée : on voit qu'elle existe par
*methods(print)*.
Pour avoir le nom des composantes et tout le contenu, faire
*unclass(ana)*.

ça suffit pour aujourd'hui !

/
/



This archive was generated by hypermail 2b30 : Tue Oct 18 2005 - 10:35:40 MEST