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 :

Fonction pour catégoriser une variable continue


Sujet :

R

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur d'études / Biostatisticien
    Inscrit en
    Décembre 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études / Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 354
    Par défaut Fonction pour catégoriser une variable continue
    Bonjour, je cherche une fonction qui permet de catégoriser en 4 une variable continue afin de pouvoir m'en servir dans une ACM ou une régression logistique sur variable modale.

    En vous remerciant d'avance.

  2. #2
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2011
    Messages : 32
    Par défaut
    Tout dépend de ce que tu veux,
    par segments de tailles égales (diviser la plage par 4 et prendre les bornes)? d'effectifs égaux (trier tes individus et découper en 4 segments de même taille)? par k-means (fonction du même nom)?

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur d'études / Biostatisticien
    Inscrit en
    Décembre 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études / Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 354
    Par défaut
    En fait c'est prendre les 4 quartiles (0 à 25% de l'échantillon, 25% à 50% de l'échantillon, 50 à 75% puis 75% à 100%), comme un boxplot. Me servir de ces 4 limites pour découper en 4 ma variable continue, mais j'imagine que ce type de fonction est également paramétrable pour un découpage en 2 voir 3.

  4. #4
    Membre Expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Par défaut
    Bonjour,

    Une solution possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    > x <- rnorm(20)
     
    > cut(x, breaks=quantile(x, c(0, 0.25, 0.5, 0.75, 1)), include.lowest = TRUE)
     [1] (0.759,1.28]    [-0.827,-0.342] [-0.827,-0.342] (-0.342,0.046] 
     [5] (0.046,0.759]   (-0.342,0.046]  [-0.827,-0.342] (-0.342,0.046] 
     [9] (0.759,1.28]    (0.759,1.28]    [-0.827,-0.342] [-0.827,-0.342]
    [13] (0.759,1.28]    (-0.342,0.046]  (0.046,0.759]   (-0.342,0.046] 
    [17] (0.046,0.759]   (0.046,0.759]   (0.759,1.28]    (0.046,0.759]  
    Levels: [-0.827,-0.342] (-0.342,0.046] (0.046,0.759] (0.759,1.28]
     
    > summary(cut(x, breaks=quantile(x, c(0, 0.25, 0.5, 0.75, 1)), include.lowest = TRUE))
    [-0.827,-0.342]  (-0.342,0.046]   (0.046,0.759]    (0.759,1.28] 
                  5               5               5               5

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur d'études / Biostatisticien
    Inscrit en
    Décembre 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études / Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 354
    Par défaut
    Merci pitipoisson, c'est une solution qui pourrait m'arranger en effet, bon aprés j'ai plusieurs variables continues à 'disjonctiver' du coup il me faudrait faire des boucles vue que ta syntaxe me rajoute les une aprés les autres les colonnes dans un même vecteur.

    Mais je suis étonné que R ne propose pas une fonction qui le fasse automatiquement...

  6. #6
    Membre Expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Par défaut
    Citation Envoyé par joyeux_lapin13 Voir le message
    ...bon aprés j'ai plusieurs variables continues à 'disjonctiver' du coup il me faudrait faire des boucles vue que ta syntaxe me rajoute les une aprés les autres les colonnes dans un même vecteur...
    Je ne suis pas certain de comprendre ce que ce code fait ou ne fait pas (en fait je suis certain de ne pas comprendre) !

    T'aurais un exemple plus précis de ce que tu cherches à faire ?

  7. #7
    Membre éclairé
    Homme Profil pro
    Ingénieur d'études / Biostatisticien
    Inscrit en
    Décembre 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études / Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 354
    Par défaut
    Et bien c'est assez simple, j'ai une matrice de données avec plusieurs variables quantitatives, je voudrais en dégager la matrice des classes.

    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    X1 ....
    1
    2
    3
    4
    5
    6
    7
    8
    Si on décide de découper en 4 cette matrice on aura:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    X1 ....
    Cl1
    Cl1
    Cl2
    Cl2
    Cl3
    Cl3
    Cl4
    Cl4
    Ou chaque classe correspond à 25% de l'échantillon.

    Aprés une fois que j'ai ça je compte en extraire la table disjonctive via la commande acm.disjonctif du package Ade4.

  8. #8
    Membre éclairé
    Homme Profil pro
    Ingénieur d'études / Biostatisticien
    Inscrit en
    Décembre 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études / Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 354
    Par défaut
    Bref, j'ai craqué, je me suis servi de ton bout de code et d'une boucle for pour appliquer ta syntaxe à chaque colonne une à une et j'ai enfin pu faire ma matrice catégorisée.

    Merci à vous deux pour vos aides et vos intérêts à mon topic.

  9. #9
    Membre Expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Par défaut
    En R, il vaut mieux éviter les boucles for, while, etc. pour leur préférer (dans la mesure du possible) la vectorisation, les sweep et les fonctions de la famille des apply.

    Dans ton cas (travail sur les colonnes d'une data.frame) c'est sapply qui est la plus adaptée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    df <- data.frame(a=1:20, b=rnorm(20))
     
    ## Définition d'une fonction :
    quantile.cut <- function(x, n=4,...)
    {
        cut(x,
            breaks=quantile(x, seq(from=0, to=1, by=1/n)),
            include.lowest = TRUE,...)
    }
     
    ## On applique la fonction sur chaque colonne (n=4 est optionnel mais peut être changé ici) :
    as.data.frame(sapply(df,
                         quantile.cut,
                         n=4))
    (je t'ai mis un petit argument optionnel qui permet de choisir le nombre de classes).

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/11/2014, 18h39
  2. Problème pour passer une variable sur plusieurs fonctions
    Par pierre3401 dans le forum Général Python
    Réponses: 3
    Dernier message: 13/11/2013, 11h14
  3. specifier un parametre pour une fonction stockée dans une variable
    Par kohsaka dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 25/02/2011, 12h49
  4. Fonctions setappdata et getappdata pour passer une variable dans 2 gui
    Par mihaispr dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 02/05/2009, 14h55
  5. Fonction pour assigner une variable à php
    Par Hightuxdotnet dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 13/08/2008, 00h50

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