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 :

The following variables are not quantitative


Sujet :

R

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 604
    Points : 206
    Points
    206
    Par défaut The following variables are not quantitative
    Bonjour,

    J'ai récupèré les donnée d'un fichier .csv, mis ces données dans une matrice puis j'ai voulu faire un PCA sur cette matrice mais j'ai ce message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Error in PCA(a) : 
    The following variables are not quantitative:  V1
    The following variables are not quantitative:  V2
    The following variables are not quantitative:  V3
    The following variables are not quantitative:  V4
    The following variables are not quantitative:  V5
    voici les commandes que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    library(pixmap)
    library(FactoMineR)
    a = read.csv("cheminAbsolu/a.csv")
    a = as.matrix(Iris)
    b = PCA(a)
    valeur a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
           [,1]  [,2]  [,3]  [,4] 
      [1,] "5.1" "3.5" "1.4" "0.2"
      [2,] "4.9" "3.0" "1.4" "0.2"
      [3,] "4.7" "3.2" "1.3" "0.2"
                 ...

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Décembre 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2015
    Messages : 72
    Points : 180
    Points
    180
    Par défaut
    Bonjour,

    j'ai l'impression qu'il y a juste un petit problème de format. Les données semblent de type chaîne de caractères à cause de la présence des "" autour des valeurs (si on ne tient pas compte que la variable Iris n'est pas définie avant dans le code présenté)

    Il faut juste transformer le jeu de données avec la fonction as.numeric()

    petit exemple rapide pour le faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(i in 1:dim(a)[2]{
    a[i]<-as.numeric(a[i])
    }
     
    summary(a)
    La dernière ligne permet de vérifier le format des données selon le type de sortie obtenue

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 604
    Points : 206
    Points
    206
    Par défaut
    Bonjour,

    J'ai une matrix avec 150 lignes et 4 colonnes

    quand je fais ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for(i in 1:dim(a)[2]){ print(a[i])) }
    ça m'affiche seulement les 4 premiers éléments des 4 premières lignes.

    J'ai essayé de faire ca mais ça ne marche pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for(i in 1:dim(a)[1]){ 
    	for (j in 1:dim(a)[2]){
    		a[i][j]<-as.numeric(a[i][j])
    	}
    }

  4. #4
    Membre actif
    Homme Profil pro
    Bioinformaticien
    Inscrit en
    Octobre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Bioinformaticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 126
    Points : 296
    Points
    296
    Par défaut
    Citation Envoyé par pitchu Voir le message
    [...] quand je fais ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for(i in 1:dim(a)[2]){ print(a[i])) }
    ça m'affiche seulement les 4 premiers éléments des 4 premières lignes [...]
    R « voie » les éléments d'une matrice en colonnes, on parle de column-major order. Une matrice ayant deux dimensions, on accède « normalement » à ses éléments à l'aide de deux indices. Mais si on n'utilise qu'un seul indice, la matrice sera vue comme un vecteur créé en concaténant les colonnes. L'itération que vous avez faite affiche donc les quatre premiers éléments du vecteur tiré de la matrice a, en y allant colonne par colonne, quatre étant le nombre de colonnes en a.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    xxx <- matrix(c(98, 26, 10, -14, 358, 74), nrow = 3L)
    print(xxx)
    print(identical(xxx[3L, 1L], xxx[3L]))
    print(identical(xxx[2L, 2L], xxx[5L]))
         [,1] [,2]
    [1,]   98  -14
    [2,]   26  358
    [3,]   10   74
    [1] TRUE
    [1] TRUE
    Pour en revenir à votre question, j'ai les mêmes impressions que VonVelten ; que donne en sortie la ligne ci-dessous ?

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 604
    Points : 206
    Points
    206
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    > str(a)
     chr [1:150, 1:4] "5.1" "4.9" "4.7" "4.6" "5.0" "5.4" ...
     - attr(*, "dimnames")=List of 2
      ..$ : NULL
      ..$ : NULL

    j'ai essayé de faire ca mais j'ai toujours le même problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for(i in 1:dim(a)[1]){ 
    	for (j in 1:dim(a)[2]){
    		a[i,c(j)] <- as.numeric(a[i,c(j)])
    	}
    }

  6. #6
    Membre actif
    Homme Profil pro
    Bioinformaticien
    Inscrit en
    Octobre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Bioinformaticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 126
    Points : 296
    Points
    296
    Par défaut
    Peut-être que a comporte des valeurs manquantes. Continuons à investiguer d'où vient le souci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    aX <- as.vector(a)
    aY <- factor(aX)
    print(anyNA(aX))
    print(levels(aY))
    Quelles sont les sorties de ce qui précède ?

  7. #7
    Membre actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 604
    Points : 206
    Points
    206
    Par défaut
    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
     
     
    > aX <- as.vector(a)
    > aY <- factor(aX)
    > print(anyNA(aX))
    [1] FALSE
    > print(levels(aY))
     [1] "0.1" "0.2" "0.3" "0.4" "0.5" "0.6" "1"   "1.1" "1.2" "1.3"
    [11] "1.4" "1.5" "1.6" "1.7" "1.8" "1.9" "2"   "2.1" "2.2" "2.3"
    [21] "2.4" "2.5" "2.6" "2.7" "2.8" "2.9" "3"   "3.1" "3.2" "3.3"
    [31] "3.4" "3.5" "3.6" "3.7" "3.8" "3.9" "4"   "4.1" "4.2" "4.3"
    [41] "4.4" "4.5" "4.6" "4.7" "4.8" "4.9" "5"   "5.1" "5.2" "5.3"
    [51] "5.4" "5.5" "5.6" "5.7" "5.8" "5.9" "6"   "6.1" "6.2" "6.3"
    [61] "6.4" "6.5" "6.6" "6.7" "6.8" "6.9" "7"   "7.1" "7.2" "7.3"
    [71] "7.4" "7.6" "7.7" "7.9"
    >

  8. #8
    Membre habitué
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Décembre 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2015
    Messages : 72
    Points : 180
    Points
    180
    Par défaut
    Je pense que le problème vient du faire que la matrice ne sait gérer qu'un type de données à la fois (factor, character, numeric, etc..). On ne peut donc pas changer le format pas à pas. Il faut passer par un autre format.
    Le problème initial étant de réaliser une ACP avec FactoMineR, il faudrait surement passer à un data.frame puis modifier le type colonne par colonne, surtout que FactoMineR travaille bien avec les data frame

    Si on essaye de changer le format des données de a, on retombera sur la forme vectorielle à une dimension, comme évoqué par juliatheric. J'ai fait un petit test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    a<-as.data.frame(a)
    for(i in 1:dim(a)[2]){
    a[,i]<-as.numeric(a[,i])
    }

  9. #9
    Membre actif
    Homme Profil pro
    Bioinformaticien
    Inscrit en
    Octobre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Bioinformaticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 126
    Points : 296
    Points
    296
    Par défaut
    Oui, PCA{FactoMineRPCA} s'attend à un data.frame ; ici, comme il n'y a pas de valeurs manquantes, il suffit de faire la conversion des chaînes en nombres en préservant les dimensions. Ceci devrait donc bien se passer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    aX <- as.data.frame(apply(a, 2, as.numeric))
    aX devrait bien aller avec PCA.

  10. #10
    Membre actif
    Homme Profil pro
    Bioinformaticien
    Inscrit en
    Octobre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Bioinformaticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 126
    Points : 296
    Points
    296
    Par défaut
    Addendum. solution plus « élégante » :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    class(a) <- "numeric"
    aX <- as.data.frame(a)

  11. #11
    Membre actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 604
    Points : 206
    Points
    206
    Par défaut
    merci de vos aides

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [1.x] Widget schema does not include the following field(s):
    Par etoileweb dans le forum Symfony
    Réponses: 3
    Dernier message: 22/11/2010, 16h59
  2. The JAVA_HOME environment variable is not defined correctly
    Par cotede2 dans le forum Services Web
    Réponses: 1
    Dernier message: 21/09/2010, 07h23
  3. Réponses: 2
    Dernier message: 11/03/2010, 18h58
  4. Réponses: 5
    Dernier message: 04/01/2010, 10h50
  5. erreur:The local variable may not have been initialized
    Par wiss20000 dans le forum Langage
    Réponses: 7
    Dernier message: 22/03/2007, 15h18

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