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 :

Remplacer un vecteur numeric en vecteur logique


Sujet :

R

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Remplacer un vecteur numeric en vecteur logique
    Bonjour,
    Je souhaite comparer 2 moyennes pour les paramètres descriptifs de 2 populations
    j'arrive bien à le faire avec un test de student pour des paramètres continus comme l'age ou le poids
    mais le problème vient quand je souhaite comparer les genre,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     t.test(dataRB_Cock30$Gender,dataRB_CKDEPI30$Gender)
    Error in if (stderr < 10 * .Machine$double.eps * max(abs(mx), abs(my))) stop("data are essentially constant") : 
      missing value where TRUE/FALSE needed
    In addition: Warning messages:
    1: In mean.default(x) : argument is not numeric or logical: returning NA
    2: In var(x) :
      Calling var(x) on a factor x is deprecated and will become an error.
      Use something like 'all(duplicated(x)[-1L])' to test for a constant vector.
    3: In mean.default(y) : argument is not numeric or logical: returning NA
    4: In var(y) :
      Calling var(x) on a factor x is deprecated and will become an error.
      Use something like 'all(duplicated(x)[-1L])' to test for a constant vector.
    je crois que le problème vient du fait que les genres MALE/FEMALE sont en fait rentrés dans mon tableau comme des données numériques

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mode(dataRB_Cock30$Gender)
    [1] "numeric"
    mais je n'arrive pas à les remplacer en mode logique ... si je fait ca,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    > as.logical(dataRB_Cock30$Gender)
    ça me met des NA partout

    help !
    merci
    Corentina

  2. #2
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 276
    Points : 561
    Points
    561
    Par défaut
    Bonjour,

    il y a deux problèmes, le premier est théorique, ça n'a pas de sens de comparer par un test t des variables qualitatives. Le deuxième c'est que tes genres sont probablement des facteurs et comme la fonction, le test, t est fait pour comparer les moyennes d'une variable numérique en fonction de 2 groupes, tu obtiens ton message d'erreur.
    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
    fac <-gl(2, 10, labels = c("MALE", "FEMALE"))
    f2 <- sample(c("MALE", "FEMALE"), 20, rep = T)
    f2 <- factor(f2)
    t.test(fac, f2)
    Error in if (stderr < 10 * .Machine$double.eps * max(abs(mx), abs(my))) stop("data are essentially constant") : 
      valeur manquante là où TRUE / FALSE est requis
    De plus : Warning messages:
    1: In mean.default(x) : argument is not numeric or logical: returning NA
    2: In var(x) :
      Calling var(x) on a factor x is deprecated and will become an error.
      Use something like 'all(duplicated(x)[-1L])' to test for a constant vector.
    3: In mean.default(y) : argument is not numeric or logical: returning NA
    4: In var(y) :
      Calling var(x) on a factor x is deprecated and will become an error.
      Use something like 'all(duplicated(x)[-1L])' to test for a constant vector.
     
    is.numeric(fac)
    [1] FALSE
    cdlt

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci, je suis une très novice,
    un test chi 2 c mieux sur le plan théorique ? parceque en pratique ça donne le meme message d'erreur
    sinon c'est quoi le test à utiliser ?

  4. #4
    Membre éclairé
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Points : 793
    Points
    793
    Par défaut
    Si tu cherches à vérifier que la proportion MALE/FEMALE est la même dans les deux tableaux, tu peux utiliser un test de proportions (voir prop.test)

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci pour ton aide précieuse,
    mais mes 2 séries ne sont pas appariées

  6. #6
    Membre éclairé
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Points : 793
    Points
    793
    Par défaut
    prop.test ne nécessite pas des échantillons appariées contrairement au test de McNemar. Une autre possibilité est d'utiliser la test du chi2 sur le tableau de contingence.

  7. #7
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    r veut pas faire de prop.test car il n'y a pas le même nombre de valeurs dans chaque vecteur

  8. #8
    Membre éclairé
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Points : 793
    Points
    793
    Par défaut
    L'aide en ligne de prop.test dit :
    Usage

    prop.test(x, n, p = NULL,
    alternative = c("two.sided", "less", "greater"),
    conf.level = 0.95, correct = TRUE)
    Arguments

    x a vector of counts of successes, a two-dimensional table (or matrix) with 2 columns, giving the counts of successes and failures, respectively.
    n a vector of counts of trials; ignored if x is a matrix or a table.
    et donne comme exemple :
    ## Data from Fleiss (1981), p. 139.
    ## H0: The null hypothesis is that the four populations from which
    ## the patients were drawn have the same true proportion of smokers.
    ## A: The alternative is that this proportion is different in at
    ## least one of the populations.

    smokers <- c( 83, 90, 129, 70 )
    patients <- c( 86, 93, 136, 82 )
    prop.test(smokers, patients)

    Tu dois donc calculer les valeurs à partir de tes données. Par exemple, x sera le tableau de contingence ayant comme colonnes les niveaux du facteur MALE/FEMALE et comme lignes les identifications des deux échantillons dataRB_Cock30 et dataRB_CKDEPI30. Voici un exemple de code pour comment faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    # Solution x = tableau de contingence, n ignoré
    z1 <- sample( c( "a", "b"), size=130, rep=TRUE)
    z2 <- sample( c( "a", "b"), size=80, rep=TRUE)
    t1 <- table( z1)
    t2 <- table( z2)
    m <- matrix( c( t1, t2), ncol=2, byrow=TRUE, dimnames=list( c( "z1", "z2"), c( "a", "b")))
    prop.test( m)
     
    # solution alternative : x = nombre de succès, n=nombre d'essais
    prop.test( m[,1], rowSums( m))
     
    # Utilisation du chi2
    chisq.test( m)

  9. #9
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup +++
    ça fonctionne !!
    mais pas pour tout ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    > HTA_Cock30<-dataRB_Cock30$Arterial.hypertension[dataRB_Cock30$Arterial.hypertension!="NOT SPECIFIED"]
    > HTA_CKDEPI30<-dataRB_CKDEPI30$Arterial.hypertension[dataRB_CKDEPI30$Arterial.hypertension!="NOT SPECIFIED"]
    > THTA_Cock30<-table(HTA_Cock30)
    > THTA_CKDEPI30<-table(HTA_CKDEPI30)
    > MHTA<-matrix(c(THTA_Cock30,THTA_CKDEPI30),ncol=2,byrow=T,dimnames=list(c("HTA_Cock30","HTA_CKDEPI30"),c("Yes","No")))
    Error in matrix(c(THTA_Cock30, THTA_CKDEPI30), ncol = 2, byrow = T, dimnames = list(c("HTA_Cock30",  : 
      length of 'dimnames' [1] not equal to array extent
    > prop.test(MHTA)
    Error in is.table(x) : object 'MHTA' not found
    J'ai cru que le problème c’était les 3 occurences Yes/No/NOT SPECIFIED, mais ça change rien en les enlevant

  10. #10
    Membre éclairé
    Homme Profil pro
    Chercheur
    Inscrit en
    Décembre 2015
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 327
    Points : 793
    Points
    793
    Par défaut
    Que donnent THTA_Cock30 et THTA_CKDEPI30 ? Au moins l'un des deux ne doit pas être de longueur 2 ("Yes", "No"). Il y a peut-être un problème de codage comme des oublis de majuscules en début de mot.

    N.B. : "NOT SPECIFIED" peut aussi être codé par la valeur spéciale NA.

Discussions similaires

  1. [Débutant] remplacer fausses valeurs dans des vecteurs
    Par aigle noir dans le forum MATLAB
    Réponses: 5
    Dernier message: 11/05/2015, 14h37
  2. [Défis][1] Vecteur colonne ou vecteur ligne ?
    Par Jerome Briot dans le forum Contribuez
    Réponses: 19
    Dernier message: 26/06/2012, 15h00
  3. vecteur d'un vecteur
    Par mimish dans le forum C++
    Réponses: 10
    Dernier message: 15/03/2011, 17h17
  4. transformer un vecteur ligne en vecteur colonne
    Par samiov dans le forum MATLAB
    Réponses: 4
    Dernier message: 26/03/2010, 09h42
  5. découper un vecteur en sous vecteur
    Par FstDsi dans le forum Débuter
    Réponses: 2
    Dernier message: 04/08/2009, 21h46

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