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 :

Division d'une matrice par une de ses lignes : ratio pas égal à 1 !


Sujet :

R

  1. #1
    Futur Membre du Club
    Homme Profil pro
    bioinformatique
    Inscrit en
    Avril 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : bioinformatique
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2009
    Messages : 5
    Points : 7
    Points
    7
    Par défaut Division d'une matrice par une de ses lignes : ratio pas égal à 1 !
    Bonjour à tous,

    J'ai une matrice numérique dont je souhaite pondérer (ou normaliser) toutes les valeurs par une ligne de celle-ci.
    J'applique donc la formule:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ##d'abord j'enregistre ma ligne 
    ma_ligne = ma_matrice["ID",]
    ##et puis je divise ma matrice par les valeurs de la ligne
    ma_matrice_pondérée = ma_matrice/ma_ligne
    Jusque là pas de problème, je vérifie les ratios sur une ligne quelconque je trouve exactement les mêmes valeurs, tout va bien. Seulement si je vérifie la même ligne par laquelle j'ai pondérée, je ne trouve pas une série de 1 mais des valeurs autour de 1. Y aurait-il des histoires d'arrondis différents entre objets différents ? Bref je sèche mais je ne vois pas pourquoi cela fait ça surtout qu'en faisant: ma_matrice["ID",]/ma_matrice["ID",] , je trouve bien une série de 1.

    Bref, est-ce que quelqu'un aurait déjà observé ce problème ?

    Merci d'avance !

  2. #2
    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,

    Tout d'abord, vous pourriez nous fournir un extrait de votre jeu de données afin qu'il nous soit plus facile de voir où se situe le problème.

    Ensuite, est-ce que l'identifiant "ID" correspond bien au nom d'une ligne (et pas d'une colonne)?

    Enfin, pour moi le calcul est faux car la division d'une matrice par un vecteur se fait (par défaut) par colonne !
    En effet :

    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
     
    A<-matrix(c(1,2,5,2,4,8,5,10,15),byrow=TRUE,ncol=3)
    A
         [,1] [,2] [,3]
    [1,]    1    2    5
    [2,]    2    4    8
    [3,]    5   10   15
     
    ma_ligne<-A[1,]
    ma_ligne
    [1] 1 2 5
     
    mat_ponderee<-A/ma_ligne
    mat_ponderee
         [,1] [,2] [,3]
    [1,]    1    2    5
    [2,]    1    2    4
    [3,]    1    2    3
    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.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    bioinformatique
    Inscrit en
    Avril 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : bioinformatique
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2009
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    Bon j'ai finalement opté pour la boucle for, c'est beaucoup plus long mais au moins je suis sûr du résultat.
    On m'a dit d'utiliser la fonction apply aussi mais pas testé encore, à suivre donc...

    Merci pour la réponse A.D.

  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 skadum,

    Contente d'avoir pu aider
    Tu pourrais peut-être poster le code que tu as écrit, ça pourrait servir à d'autres !

    Sinon oui, je te conseille fortement de jeter un oeil du côté des fonctions de type "apply", c'est typiquement le genre de cas où elles peuvent être utiles. N'hésite pas à poser des questions à ce sujet si tu en as.

    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.

  5. #5
    Membre averti
    Femme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Points : 417
    Points
    417
    Par défaut
    Citation Envoyé par skadum Voir le message
    Bon j'ai finalement opté pour la boucle for, c'est beaucoup plus long mais au moins je suis sûr du résultat.
    On m'a dit d'utiliser la fonction apply aussi mais pas testé encore, à suivre donc...

    Merci pour la réponse A.D.
    Bonjour,
    n'y a-t-il pas plus simple en passant par les transpositions?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    A<-matrix(c(1,2,5,2,4,8,5,10,15),byrow=TRUE,ncol=3)
    ma_ligne<-A[1,]
    t(t(A)/ ma_ligne)
     
        [,1] [,2] [,3]
    [1,]    1    1  1.0
    [2,]    2    2  1.6
    [3,]    5    5  3.0
    N'hésitez pas à me dire si je suis à côté de la plaque

    Bonne journée

  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
    Citation Envoyé par lilly74 Voir le message
    Bonjour,
    n'y a-t-il pas plus simple en passant par les transpositions?
    Bien vu ! Moi j'étais passée par un apply ET une transposition
    Cela dit, c'est bien d'apprendre à se servir des fonctions de type "apply".

    Bonne journée


    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.

Discussions similaires

  1. Remplacement d'une ligne par une autre dans une matrice
    Par Mathematiker dans le forum Scilab
    Réponses: 4
    Dernier message: 17/02/2015, 14h57
  2. Réponses: 2
    Dernier message: 21/10/2011, 21h04
  3. Réponses: 4
    Dernier message: 31/10/2007, 20h27
  4. masquer une partie d'une vidéo par une banniere
    Par lezabour dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 16/10/2006, 16h47
  5. Réponses: 11
    Dernier message: 05/10/2006, 13h20

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