Les posteurs les plus actifs de la semaine
Aucun utilisateur |
Sujets les plus vus
Classification avec R
Page 1 sur 1
Classification avec R
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)
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
Re: Classification avec R
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 :
De même pour faire une acm avec ade4 tu peux faire directement
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 :
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 :
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
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)
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é
Re: Classification avec R
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 :
J'ai laissé le début tel quel car je voulais aussi changer les noms des variables.
Le code est alors le suivant :
Je ne comprend pas le dendogramme affiché qui ne contient pas les modalités des variables...
Encore merci pour cette précieuse aide.
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
Re: Classification avec R
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
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: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
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:J'ai laissé le début tel quel car je voulais aussi changer les noms des variables.
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é
Re: Classification avec R
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 !!!
Merci encore !!!
miss diva- Nombre de messages : 8
Date d'inscription : 19/06/2009
Re: Classification avec R
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
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é
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|