IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Problème d'ACM (R)


Sujet :

R

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 32
    Points : 14
    Points
    14
    Par défaut Problème d'ACM (R)
    Bonjour,

    Actuellement en stage, je dois proposer différentes solutions pour identifier des clients afin de leur proposer une promotion adéquate. J'ai donc pensé faire une ACM. J'ai essayé d'utiliser le script que l'on utilise en cours avec le package ade4 mais j'obtiens le message d'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Error in matrix(0, n, length(levels(cl))) : too many elements specified
    Après quelques recherches il semblerait que c'est parce que j'ai un fichier trop volumineux, en effet j'ai 3 millions d'observations...

    J'ai donc essayé de prendre une petite partie de mes données en faisant X=X[1:1000,].

    J'obtiens désormais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Error in dudi.acm(X) : One category with null weight
    Je ne sais plus quoi essayer pour obtenir mon ACM, quelqu'un aurait une idée ?

    Merci.

  2. #2
    Membre averti
    Homme Profil pro
    Data Scientist
    Inscrit en
    Août 2013
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data Scientist
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2013
    Messages : 139
    Points : 316
    Points
    316
    Par défaut
    Bonjour,

    Peux tu nous donner un extrait de quelques lignes des données que tu utilises, les noms des variables, le script que tu utilises avec le/les package(s) correspondant(s) ?

    Nous pourrons plus facilement t'aider.

    Sinon je connais mieux la fonction MCA() du package FactoMineR (réputé pour les nombreuses méthodes de classification/exploration).

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 32
    Points : 14
    Points
    14
    Par défaut
    Bonjour, les noms de mes variables sont :

    Code, client, date de naissance, Code postal, ville, produit, code produit, sous type de produit, code sous type de produit, article, code article, date début validité, date fin validite.

    Je viens de réussir en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    X <- droplevels(X[1:1000,])
    Je n'ai plus de message d'erreur, cependant le tableau des contributions que j'obtiens n'est pas très clair. Pensez-vous que j'utilise trop de variables ? Devrais-je faire plusieurs ACM ?

    Merci.

  4. #4
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonjour,

    Au delà du nom des variables, ce qui serait plus intéressant c'est le "contenu" de ses variables, à savoir : leur type, les éventuelles modalités, etc...
    Cela peut être obtenu avec par exemple la commande "str" sous R.
    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    str(mydata1)
     
    # 'data.frame':   10 obs. of  7 variables:
    #  $ ID              : int  1 2 3 4 5 6 7 8 9 10
    #  $ NAME            : Factor w/ 10 levels "Brian","Carl",..: 6 8 7 1 3 10 9 2 5 4
    #  $ GENDER          : Factor w/ 3 levels "DK","FEMALE",..: 3 2 1 3 2 2 2 1 3 3
    #  $ AGE             : Factor w/ 6 levels "18","20","25",..: 1 2 NA 3 2 6 6 4 5 2
    #  $ LEISURE_EXPENSES: int  20 60 40 10 15 25 45 10 20 10
    #  $ TOTAL_EXPENSES  : num  140 120 250 200 200 ...
    #  $ RATIO           : num  20 12 1.52 25.3 10 ...

    Cordialement,


    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 32
    Points : 14
    Points
    14
    Par défaut
    Voici mes variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    'data.frame':  3321582 obs. of  13 variables:
    $ Code.client                : Factor w/ 493472 levels "005D8F33497DBDED9E7244FCF4A481CB2149F3C12B259A5B",..: 1 1 1 1 2 2 2 2 2 2 ...
    $ Date.naissance.client      : Factor w/ 1152 levels "01/01/1515 00:00:00",..: 945 945 945 945 541 541 541 541 541 541 ...
    $ Code.Postal.client         : Factor w/ 2675 levels "01000","01090",..: 1662 1662 1662 1662 1704 1704 1704 1704 1704 1704 ...
    $ Ville.client               : Factor w/ 4619 levels ".","3","7 EME ARRONDISSEMENT",..: 1263 1263 1263 1263 616 616 616 616 616 616 ...
    $ Produit                    : Factor w/ 152 levels "ABT SUBV LOIRE",..: 5 5 5 5 126 126 126 126 126 126 ...
    $ Code.Produit               : Factor w/ 152 levels "A1001","A1012",..: 5 5 5 5 1 1 1 1 1 1 ...
    $ Sous.type.de.produit       : Factor w/ 21 levels "Abt Age d'Or",..: 3 3 3 3 12 12 12 12 12 12 ...
    $ Code.Sous.type.de.produit  : Factor w/ 21 levels "AGOR","AOPA",..: 3 3 3 3 14 14 14 14 14 14 ...
    $ Article                    : Factor w/ 2472 levels "ABT SUBV LOIRE",..: 117 110 112 113 333 334 335 336 337 380 ...
    $ Code.Article               : Factor w/ 2529 levels "A1001-2014/01",..: 92 93 91 90 8 4 12 2 1 5 ...
    $ Date.début.validité.article: Factor w/ 68 levels "01/01/2014 00:00:00",..: 4 5 3 1 9 5 17 3 1 6 ...
    $ Date.fin.validité.article  : Factor w/ 76 levels "01/06/2014 00:00:00",..: 64 54 47 62 70 54 75 47 62 66 ...
    $ Quantité.d.articles.vendus : num  1 1 1 1 1 1 1 1 1 1 ...

  6. #6
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Merci pour ces infos complémentaires.

    Pourrais-tu également poster le code utilisé et les éventuels résultats (pourquoi pas en version "résumée") et les problèmes que tu rencontres ?



    Cordialement,


    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 32
    Points : 14
    Points
    14
    Par défaut
    Voila mon code pour le moment, désolé c'est un peu en désordre, mais je vous épargne la fin où il y a tout les tests qui ne marchent pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    library(ade4)
    X<- read.delim("C:/Users/lreglain/Desktop/Projet/clientsventes/Export ventes & clients 2014.txt")
     
    str(X)
     
    X= X[19:3321600,]
    #les 18 premiers ne sont pas des clients
    summary(X)
    # 52 fois le meme client ?? 
     
    X=X[,3:10]
    attach(test)
    source("ACM_RStudio.R")
    #trop de données
     
    X=X[,c(3,5,11)]
    # test avec juste cp produit date début
     
     
    X=X[1:1000,]
    #test avec juste 1000 données
     
    X <- droplevels(X[1:1000,])
    #réessaye source après

  8. #8
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Re-bonjour,

    Le code posté est incomplet, la partie avec le code de l'ACM n'apparait pas il me semble (dans le fichier "ACM_RStudio.R" ?), or c'est celle-ci qui nous intéresse ici...
    De plus, peux-tu nous préciser quelles sont les variables utilisées dans l'ACM ?
    Enfin, quel(s) résultat(s) / problème(s) obtiens-tu en sortie ?


    Cordialement,


    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 32
    Points : 14
    Points
    14
    Par défaut
    Voici le script "ACM_Rstudio", j'utilise les variables date de naissance, ville, produit, date début, j'obtiens un graphique dont les axes ne résument que 1% des informations. Et les COS2 sont soit égals à 0 soit 1.




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    #############################################################################
    #	-- Analyse (factorielle) des correspondances MULTIPLES
    #				A(F)CM
    #
    #		multiple correspondance analysis (mca)
    #############################################################################
     
    library(ade4)
    for (j in 1:ncol(X)) X[,j]=as.factor(X[,j])	# facteurs necessaires pour dudi.acm
     
     
    ############################################################################
    #	-- L'instruction dudi.acm			?dudi.acm
    ############################################################################
     
    acm=dudi.acm(X, scann = TRUE)
     
    ############################################################################
    #	-- VUE
    ############################################################################
     
    # par defaut :
    #s.arrow(acm$co,cpoint=1.5,boxes=F,edge=F)
    #s.arrow(acm$li,cpoint=1.5,boxes=F,edge=F)
    contrib=round(100*acm$eig/sum(acm$eig))
     
    plot ( acm$co[,1:2] ,
    xlab=paste("Axe 1   -   ",contrib[1]," %",sep=""),
    ylab=paste("Axe 2   -   ",contrib[2]," %",sep=""),
    cex=acm$cw*length(acm$cw)*3)
     
    text ( acm$co[,1:2] ,  labels=rownames(acm$co) , cex=0.75 , pos=3,xpd=NA )
    abline(h=0,v=0)
     
     
    ############################################################################
    #	-- TABLEAUX D'INTERPRETATION
    ############################################################################
     
    inerties = inertia.dudi(acm, col=T, row=T )
     
    ############################################################################
    #	-- details de inertia.dudi
    ############################################################################
    #	inerties$TOT		repartition of the total inertia between axes 
    #	inerties$row.abs	absolute contributions of the decomposition of inertia for the rows 
    #	inerties$row.rel	relative contributions of the decomposition of inertia for the rows 
    #	inerties$row.cum	cumulative relative contributions of the decomposition of inertia for the rows 
    #	inerties$col.abs	absolute contributions of the decomposition of inertia for the columns 
    #	inerties$col.rel	relative contributions of the decomposition of inertia for the columns 
    #	inerties$col.cum	cumulative relative contributions of the decomposition of inertia for the columns 
    #
    ############################################################################
     
     
    ######################################################################
    #
    #	-- exportation des donnees
    #
    ######################################################################
     
    nomfic="tab_contributions_et_cosinus_carres.txt"
     
    contribution=round(100*inerties$col.abs/apply(inerties$col.abs,2,sum),1)
    v=abs(inerties$col.rel[,1:acm$nf])
    cosinus_carre=round(v/apply(v,1,sum),2)
     
    M = matrix(0 , length(acm$cw) , 2+4*acm$nf )
     
    for (i in 1:nrow(acm$co)) {
    	M[i,1] = round(100*acm$cw[i],2)
    	M[i,2] = round(sum(acm$l1[i,]^2),2)
    	for (j in 1:acm$nf) {
    	M[i,3+(j-1)*4] = round(acm$c1[i,j],2)
    	M[i,4+(j-1)*4] = contribution[i,j]
    	M[i,5+(j-1)*4] = cosinus_carre[i,j]
    	M[i,6+(j-1)*4] = sum(cosinus_carre[i,1:j])
    	}
    }
     
    D=data.frame(M)
    rownames(D)=rownames(acm$co)  ;  colnames(D)[1:2]=c("poids rel.","CTR inertie")
    for (j in 1:acm$nf) {
    	colnames(D)[3+(j-1)*4] = paste("axe ",j,sep="")  ;  colnames(D)[4+(j-1)*4] = "CTR"
    	colnames(D)[5+(j-1)*4] = "COS2"  ;  colnames(D)[6+(j-1)*4] = "QLT"
    }
     
     
    entete=matrix(c(" ",colnames(D)),1,ncol(D)+1)
    write.table(entete,nomfic,sep="\t",quote=F,row.names=F,col.names=F)
    write.table(D,nomfic,sep="\t",quote=F,row.names=T,col.names=F,append=T)
     
    #

  10. #10
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonjour,

    A mon avis, un des problèmes majeurs de l'analyse que tu réalises est le fait que les variables prises en compte comportent un très grand nombre de modalités (d'où le faible pourcentage d'infos apporté par ton axe principal...).
    Peut-être une première piste serait-elle de faire des regroupements en sous-classes dans les variables de ton analyse ayant beaucoup de modalités différentes ?

    Egalement, je n'ai jamais été confrontée à un tel cas mais je serais curieuse de connaître la pertinence de l'intégration de dates comme variables dans une telle analyse ?

    Bonne continuation


    Cordialement,


    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 32
    Points : 14
    Points
    14
    Par défaut
    je viens de me concentrer sur 2 types de produit en ne gardant que les variables Code postal, Article et Date de naissance, j'ai séparer les code postaux en 3 catégories et je vais faire des classes d'ages, je vous tiens au courant.

    Je n'utilise pas la date lors de mon ACM, j'ai juste gardé la variable pour plus tard, je travaille sur des, ils peuvent être achetés a partir du 18 du mois précédent, je pensais travailler sur cela plus tard, pour pouvoir proposer une promotion a quelqu'un qui a l'habitude d'acheter entre le 18 et le 25 mais qui n'a toujours rien acheté le 31

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 32
    Points : 14
    Points
    14
    Par défaut
    Bon, du coup je crois que j'ai quelque chose de correct



    Qu'en pensez vous ?

Discussions similaires

  1. Problème outil ACME Studio ARMANI
    Par alfa007 dans le forum Eclipse Modeling
    Réponses: 0
    Dernier message: 25/02/2014, 19h50
  2. Problème sur une ACM
    Par Fnouch dans le forum R
    Réponses: 2
    Dernier message: 26/06/2013, 10h12
  3. Problème outil Acme Studio
    Par AbirGuédria dans le forum Eclipse Modeling
    Réponses: 0
    Dernier message: 18/05/2012, 15h57
  4. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 15h18
  5. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 17h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo