Forum de Statistiques
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Les posteurs les plus actifs de la semaine
Aucun utilisateur

-20%
Le deal à ne pas rater :
(Adhérents Fnac) Enceinte Bluetooth Marshall Stanmore II Noir
199.99 € 249.99 €
Voir le deal

Classification avec R

Aller en bas

Classification avec R Empty Classification avec R

Message par miss diva Ven 19 Juin 2009 - 8:58

Bonjour,
Pourriez-vous m'aider sur le problème suivant :

Je dispose de données qualitatives et quantitatives.
J'ai
fait une ACM sur les données qualitatives.
Maintenant,
ce que je souhaiterai faire, c'est utiliser les variables synthétiques
quantitatives créées par l'ACM avec les autres "vraies" variables quantitatives (âge,
critères biologiques, les scores...) pour réaliser une ACP. Ainsi, de
nouvelles variables synthétiques pourraient être créées. Enfin, je
voudrai faire une classification hiérarchique ascendante pour définir
des groupes de patients les plus homogènes possibles. Cependant, je ne
sais pas comment faire l'ACP en reprenant les variables formées par
l'ACM...

Mon idée est-elle réalisable ? En fait, mon objectif est de faire une typologie des patients, c'est à dire définir des groupes les plus homogènes possibles.
Savez-vous comment faire ?


Le
fichier cla.csv contient les variables qualitatives et quantatives et
le fichier acp.csv ne contient que les variables quantitatives.


J'ai écrit le script suivant :


alcool=read.csv('cla.csv',header=TRUE,sep=';')
attach(alcool)
alcool2=na.exclude(alcool)


sex=as.factor(sexe)
fam=as.factor(m0_sit_fam )
per=as.factor(m0_sit_per)
pro=as.factor(m0_sit_pro
)
log=as.factor(m0_logemen)
fi=as.factor(m0_diff_fi)
ant=as.factor(m0_ant_pro)
mes=as.factor(m0_mes)
tab=as.factor(m0_tabac)
conso=as.factor(m0_conso_p)
mouv=as.factor(m0_mouv)
trou=as.factor(m0_trouble)
trai=as.factor(m0_trait)
sui=as.factor(m0_suivi)
pa=as.factor(m0_decl_pa)
en=as.factor( m0_decl_en)
inj=as.factor(m0_decl_in)
me=as.factor(m0_decl_me)
orig=as.factor(m0_origine)
boi=as.factor(m0_envie_b)
cap=as.factor(m0_capa)
moti=as.factor(m0_motiv)
ben=as.factor(m0_benef)
contex=as.factor(m0_context)
envm=as.factor(m0_envie_m)
prono=as.factor(m0_prono)
consc=as.factor(m0_consc)
psyc=as.factor(m0_psychot)
main=as.factor(m0_maintie )
magn=as.factor(m0_magn)
orien=as.factor(m0_orien)
ad=as.factor(m0_ad )

tab=data.frame(sex,fam,per,pro,log,fi,ant,mes,tab,conso,mouv,trou,trai,sui,pa,en,inj,me,orig,boi,
cap, moti, ben, contex, envm, prono, consc, psyc, main, magn, orien, ad)
library(ade4)

tabburt=acm.burt(tab,tab)
head(tabburt)

tab.coa=dudi.coa(tabburt)
pve<-100*tab.coa$eig/sum(tab.coa$eig)
pve
cumsum(pve)

scatter(tab.coa,xax=1,yax=2,met=1)
scatter(tab.coa,xax=1,yax=3,met=1)



iner<-inertia.dudi(tab.coa,col.inertia=T, row.inertia=T)
iner$row.rel
iner$col.rel

tab.coa$li


# ACP

quanti=read.csv('acp.csv',header=TRUE,sep=';')
attach(quanti)
quanti2=na.exclude(quanti)

acpquanti=dudi.pca(quanti2)
# Comment faire aussi l'ACP sur les variables formées par l'ACM ?



# Classification hiérarchique
library(cluster)
d<-dist(tab.coa$li,method="euclidean") # la classification n'est faite
que sur les variables initialement qualitatives,

# je
souhaiterai y ajouter les variables quantitatives de l'ACP...
h<-hclust(d,"ward")
plclust(h,hang=-1)

miss diva

Nombre de messages : 8
Date d'inscription : 19/06/2009

Revenir en haut Aller en bas

Classification avec R Empty Re: Classification avec R

Message par Invité Ven 19 Juin 2009 - 9:21

re,

tu te prends bien la tête pour pas grand chose au niveau te ton code (pas au niveau de ce que tu veux faire j'entends).

Pour passer un tableau en facteur :
Code:
# soit tu le fais directement en l'important :
alcool <- read.csv2('cla.csv',header=TRUE,colClasses="factor")# soit tu le fais une fois ton tableau dans R:
alcool <- as.data.frame(sapply(alcool,as.character))

De même pour faire une acm avec ade4 tu peux faire directement
Code:
dudi.acm(alcool)
.

Une façon de mélanger les deux informations et de les traiter simultanément est d'utiliser une analyse de Hill&Smith qui gère les données catégorielles et quantitatives :
Code:
tab <- cbind(alcool,quanti)
hill1 <- dudi.hillsmith(tab)
Cette analyse se comporte comme une ACP centrée réduite si tu n'as que des variables quantitatives et comme une acm si tu n'as que des données catégorielles.

Après tu peux faire une classification sur les coordonnées de tes patients (hill1$li). Il est aussi possible de calculer une classification directement à partir du triplet statistique :
Code:
dist.dudi(hill1)

Sinon pour ton problème il te suffit de réunir les deux tableaux de coordonnées li de ton acp et de ton acm avec un cbind(tab.coa$li,acpquanti$li). Si tu fais ça il te faut savoir que ce sont les variables avec la plus grande variabilité (variance) qui vont compter dans ton analyse hierarchique. Donc si une des deux analyses fournit des scores avec une plus grande variance, alors c'est cette analyse la qui va compter le plus dans ta CAH.

Perso, je partirai sur la Hill & Smith.

Bien sur il te faut aussi regarder les structures de tes jeux de données pour voir si tout ça a bien un sens.

micros

P.S: sert toi des balises [ code] et [ /code] autour de ton code R parce que ton post n'est pas facile à lire

Invité
Invité


Revenir en haut Aller en bas

Classification avec R Empty Re: Classification avec R

Message par miss diva Ven 19 Juin 2009 - 10:10

Merci beaucoup pour cette réponse très complète. J'ai fait l'analyse de
Hill et Smith mais je ne sais pas comment afficher le cercle des
correspondances (si c'est possible) et faire ensuite la classification.
Par ailleurs, je ne comprends pas bien les résultats donnés par le
logiciel :
Code:

> dist.dudi(hill1)
          71        75
75 11.169587         
80  9.687603 11.506115
> hill1$li
      Axis1      Axis2 Axis3
71  2.850830  5.0737110    -1
75 -6.814853 -0.5239895    -1
80  3.964023 -4.5497216    -1


J'ai laissé le début tel quel car je voulais aussi changer les noms des variables.

Le code est alors le suivant :
Code:

alcool=read.csv('cla.csv',header=TRUE,sep=';')
attach(alcool)
alcool2=na.exclude(alcool)


sex=as.factor(sexe)                                             
fam=as.factor(m0_sit_fam )
per=as.factor(m0_sit_per)
pro=as.factor(m0_sit_pro )
log=as.factor(m0_logemen)
fi=as.factor(m0_diff_fi)
ant=as.factor(m0_ant_pro)
mes=as.factor(m0_mes)
tab=as.factor(m0_tabac)
conso=as.factor(m0_conso_p)
mouv=as.factor(m0_mouv)
trou=as.factor(m0_trouble)
trai=as.factor(m0_trait)
sui=as.factor(m0_suivi)
pa=as.factor(m0_decl_pa)
en=as.factor( m0_decl_en)
inj=as.factor(m0_decl_in)
me=as.factor(m0_decl_me)
orig=as.factor(m0_origine)
boi=as.factor(m0_envie_b)
cap=as.factor(m0_capa)
moti=as.factor(m0_motiv)
ben=as.factor(m0_benef)
contex=as.factor(m0_context)
envm=as.factor(m0_envie_m)
prono=as.factor(m0_prono)
consc=as.factor(m0_consc)
psyc=as.factor(m0_psychot)
main=as.factor(m0_maintie )
magn=as.factor(m0_magn)
orien=as.factor(m0_orien)
ad=as.factor(m0_ad )

Code:

tab=data.frame(sex,fam,per,pro,log,fi,ant,mes,tab,conso,mouv,trou,trai,sui,pa,en,inj,me,orig,boi,
cap, moti, ben, contex, envm, prono, consc, psyc, main, magn, orien, ad)
library(ade4)

dudi.acm(tab)
quanti=read.csv('acp.csv',header=TRUE,sep=';')
attach(quanti)
quanti2=na.exclude(quanti)

Code:

patient <- cbind(tab,quanti)
patient2=na.exclude(patient)
hill1 <- dudi.hillsmith(patient2)

dist.dudi(hill1)
hill1$li

# classification
library(cluster)
d<-dist(hill1$li,method="euclidean")
h<-hclust(d,"ward")
plclust(h,hang=-1)   


Je ne comprend pas le dendogramme affiché qui ne contient pas les modalités des variables...

Encore merci pour cette précieuse aide.

miss diva

Nombre de messages : 8
Date d'inscription : 19/06/2009

Revenir en haut Aller en bas

Classification avec R Empty Re: Classification avec R

Message par Invité Ven 19 Juin 2009 - 11:12

miss diva a écrit:Merci beaucoup pour cette réponse très complète. J'ai fait l'analyse de
Hill et Smith mais je ne sais pas comment afficher le cercle des
correspondances (si c'est possible) et faire ensuite la classification.

# le cercle des correspondances n'a de sens que dans le cas d'une ACP centré réduite
par contre s.arrow(hill1$co) te permettra de voir le lien entre tes variables

miss diva a écrit:Par ailleurs, je ne comprends pas bien les résultats donnés par le
logiciel :
Code:

> dist.dudi(hill1)
          71        75
75 11.169587         
80  9.687603 11.506115
> hill1$li
      Axis1      Axis2 Axis3
71  2.850830  5.0737110    -1
75 -6.814853 -0.5239895    -1
80  3.964023 -4.5497216    -1
Il s'agit de la distance entre tes lignes, mais tu n'en as que trois ? et hill1$li ce sont les coordonnées de tes lignes sur les différents axes factoriels. Cette analyse, s'analyse de la même façon que les autres analyses multivariées.

miss diva a écrit:J'ai laissé le début tel quel car je voulais aussi changer les noms des variables.
Tu fais comme tu veux, mais sache que la fonction colnames existe et te permet de spécifier le nom de tes colonnes, ce qui allège le code.

miss diva a écrit:
Code:

patient <- cbind(tab,quanti)
patient2=na.exclude(patient)
hill1 <- dudi.hillsmith(patient2)

dist.dudi(hill1)
hill1$li

# classification
library(cluster)
d<-dist(hill1$li,method="euclidean")
h<-hclust(d,"ward")
plclust(h,hang=-1)   

Je ne comprend pas le dendogramme affiché qui ne contient pas les modalités des variables...

Encore merci pour cette précieuse aide.

Le dendrogramme contient le nom des items dont tu as calculé la distance, en l'occurrence ici tu as calculé la distance entre les lignes de ton tableau donc entre tes patients si j'ai bien compris. Je ne vois pas ce que tu entends par modalité des variables.

micros

Invité
Invité


Revenir en haut Aller en bas

Classification avec R Empty Re: Classification avec R

Message par miss diva Ven 19 Juin 2009 - 14:08

Merci, je pense avoir réussi... Mais, juste une dernière information : Comment utilise-t-on la fonction colnames ? Car ton idée de départ était bien meilleure (la mienne ne marchant pas avec l'analyse hill smith....).
Merci encore !!!

miss diva

Nombre de messages : 8
Date d'inscription : 19/06/2009

Revenir en haut Aller en bas

Classification avec R Empty Re: Classification avec R

Message par Invité Ven 19 Juin 2009 - 14:13

le colnames :
colnames(nom de ton tableau) <- c("nom de la colonne 1","nom de la colonne 2",...,"nom de la colonne p")

sur le net tu peux trouver tout un tas de document pour te familiariser avec le fonctionnement de R.

micros

Invité
Invité


Revenir en haut Aller en bas

Classification avec R Empty Re: Classification avec R

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum