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 :

Test Non paramétrique (variable à expliquer qualitative)


Sujet :

R

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 127
    Points : 58
    Points
    58
    Par défaut Test Non paramétrique (variable à expliquer qualitative)
    Bonjour tout le monde,

    Je lance des tests non paramétriques au préalable d'un modèle de prédiction pour faire une sélection de variables "discriminantes" (suffisamment pour être conservées tout du moins).

    J'ai donc un data.frame de 190430 individus x 34 variables dont ma variable cible qui est qualitative.

    Pour "tester" l'apport de chaque variable explicative continue à la prédiction de ma variable qualitative j'ai choisit le(s) test(s) de Wilcoxon-Mann-Whitney et/ou celui de Kruskal-Wallis (ce dernier me paraissait plus simple à interpréter).

    Je lance donc ma commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    kruskal.test(X1~VarCible, data = mesdonnees)
    et forcément j'ai un message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur dans kruskal.test.default(c(27.96, 28.44, 19.15, 32.58, 16.64, 33.78,  : 
      tous les niveaux des groupes doivent être définis
    N'ayant pas très bien compris comment définir ma liste (via l'aide de la fonction kruskal.test je me suis tourné vers le test de Wilcoxon & co

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wilcox.test(X1~VarCible, data = mesdonnees)
    qui lui me donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Wilcoxon rank sum test with continuity correction
     
    data:  X1 by VarCible 
    W = 134352148, p-value = 0.0006247
    alternative hypothesis: true location shift is not equal to 0
    Mais j'avoue que j'aimerai saisir le coup pour la fonction kruskal si quelqu'un a déjà vu ça (normalement ces 2 tests pour une variable cible à 2 modalités - mon cas - ) devraient être équivalents (à peu de chose près non?).

    Donc si quelqu'un comprenait le coup de kruskal car l'aide me dit bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ## Default S3 method:
    kruskal.test(x, g, ...)
     
    ## S3 method for class 'formula'
    kruskal.test(formula, data, subset, na.action, ...)
    Et dans mon cas je suis bien dans une formule (comme pour Wilcox) et on fait bien appel à des rangs (comme pour Wilcox) donc si il y a égalité de rangs logiquement si ça marche pour l'un des tests ça devrait marcher pour l'autre non?

    Autre question ... y'a t'il moyen d'automatiser tout ça car parfois j'aurai plus de 100 variables à pré-traiter comme cela avant de lancer mon modèle de prédiction et 1x1 ça prend du temps

    Bien cordialement,

    Hollow

  2. #2
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Points : 254
    Points
    254
    Par défaut
    Bonjour,
    Je pense que le test de kruskal est l’équivalent de l'ANOVA mais non-paramétrique, et est utilisé lorsque la variable qualitative a plus de deux modalités.
    Pour l'automatisation, il y a les fonctions de récurrences sapply, lapply, aggregate

    BC

  3. #3
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 127
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par arm3366 Voir le message
    Bonjour,
    Je pense que le test de kruskal est l’équivalent de l'ANOVA mais non-paramétrique, et est utilisé lorsque la variable qualitative a plus de deux modalités.
    Pour l'automatisation, il y a les fonctions de récurrences sapply, lapply, aggregate

    BC
    Normalement non le test de Kruskal s'applique aussi à un nombre k = 2 modalités.
    Et effectivement c'est censé être un peu une "variante" de l'Anova mais pour des variables explicatives continues qui ne sont pas normales (ou en présence d'hétéroscédasticité).

    Thx pour les fonctions d'automatisation il me semblait bien qu'il y avait du "apply quelque chose" dans cette histoire

    Cordialement,

    Hollow

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 208
    Points : 461
    Points
    461
    Par défaut
    Citation Envoyé par hollowdeadoss Voir le message
    Bonjour tout le monde,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    kruskal.test(X1~VarCible, data = mesdonnees)
    et forcément j'ai un message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur dans kruskal.test.default(c(27.96, 28.44, 19.15, 32.58, 16.64, 33.78,  : 
      tous les niveaux des groupes doivent être définis
    Mhhh... max(VarCible) ca donne quoi?
    Ce serait pas l'infini des fois?

    (au passage tu devrais mettre R en anglais, les erreurs sont mal traduites des fois, et c'est plus facile pour se faire aider)

  5. #5
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 127
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par Sengar Voir le message
    Mhhh... max(VarCible) ca donne quoi?
    Ce serait pas l'infini des fois?

    (au passage tu devrais mettre R en anglais, les erreurs sont mal traduites des fois, et c'est plus facile pour se faire aider)
    Bah non ma variable cible est une variable qualitative ... soit 'OUI' soit 'NON' comme valeurs et bien en factor.

    En revanche je veux bien mettre R en anglais mais je sais pas trop comment (je suis sous Eclipse ... peut être que ça complique la chose?)

    Cdlt,

    Hollow

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 208
    Points : 461
    Points
    461
    Par défaut
    Citation Envoyé par hollowdeadoss Voir le message
    Bah non ma variable cible est une variable qualitative ... soit 'OUI' soit 'NON' comme valeurs et bien en factor.

    En revanche je veux bien mettre R en anglais mais je sais pas trop comment (je suis sous Eclipse ... peut être que ça complique la chose?)
    Le kruskal.test devrait marcher normalement c'est bizarre.
    On peut avoir un table/summary des deux variables (et un levels de VarCible si c'est un facteur) car c'est dur de t'aider sans savoir ce que tu utilises?

    En tout cas c'est assez probable que l'erreur soit un problème de format des données ou de valeurs non autorisées par kruskal.test car je ne vois pas pourquoi ce na marcherait pas autrement.

  7. #7
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 127
    Points : 58
    Points
    58
    Par défaut
    Voilà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    table(mesdonnees[1:10,c(15,5)])
               VarCible
    X1 NON OUI
          16.64   1   0
          19.15   1   0
          27.96   1   0
          28.44   1   0
          30.02   1   0
          32.58   1   0
          33.78   1   0
          41.48   1   0
          47.32   1   0
          3276    1   0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    X1       VarCible     
     Min.   :    0.40   NON:188931  
     1st Qu.:   30.02   OUI:  1499  
     Median :   62.71               
     Mean   :  250.71               
     3rd Qu.:  156.26               
     Max.   :94365.00
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    levels(mesdonnees$VarCible)
    [1] "NON" "OUI"
    J'avoue ne pas trop saisir non plus ... le chi2 ainsi que la p-value pourrait m'aider à rejeter ou non l'hypothèse comme quoi les rangs sont les même ou non ...

    Encore merci pour votre aide

    Cdlt,
    Hollow

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    cela devrait fonctionner en indiquant que VarCible doit être un facteur

    la formule suivante doit fonctionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    kruskal.test(X1~factor(VarCible), data = mesdonnees)

Discussions similaires

  1. Test non paramétrique de comparaison de médianes
    Par alers dans le forum SAS STAT
    Réponses: 6
    Dernier message: 17/07/2018, 15h11
  2. ANOVA avec variable à expliquer qualitative
    Par flourangel dans le forum SAS STAT
    Réponses: 1
    Dernier message: 22/01/2013, 23h38
  3. Réponses: 2
    Dernier message: 05/06/2012, 09h47
  4. Réponses: 3
    Dernier message: 24/05/2012, 15h58
  5. Utilisation test paramétrique ou non paramétrique
    Par mathis86 dans le forum SAS STAT
    Réponses: 9
    Dernier message: 28/03/2012, 12h03

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