Appariement de deux groupes de personnes

Résolu
Bonjour,

je dois faire un travail d'appariement de deux groupes de personnes (des patients)..

Je mets un fichier d'exemple ici: http://www.cjoint.com/c/GGAjN56ZLR3

Un peu compliqué, je reconnais...

j'ai une liste de 96 personnes (qui ont fait un infarctus) - classeur 1
Je dois chercher dans une liste de 3043 témoins (des personnes qui n'ont pas d'infarctus) des personnes qui ressemblent le plus au premier groupe- classeur 2

En clair pour chaque personne de la première liste je dois trouver dans la seconde, une (voire deux idéalement) personne qui est voisine pour les variables des colonnes C (âge), D (IMC), E (HbA1c) F (HDL), G (sexe) et H (tabac)

Pour la C ca peut être +/- 2
Pour la D ca peut être +/-6%
Pour la E ca peut être +/- 6%
pour la F ca peut être +/- 6%
Pour la G et H ca doit être exacte (variable oui/non)

Il se peut que je doive ajouter ou enlever une variable plus tard dans un autre appariement pour d'autres calculs...

Si c'est quelqu'un a déjà fait cela ou sait le faire...;

Merci

5 réponses

Résumé de la discussion

L’appariement de 96 patients infarctés avec 3043 témoins consiste à trouver, pour chaque patient, un témoin compatible par âge (+/-2), IMC (+/-6%), HbA1c (+/-6%), HDL (+/-6%), et des correspondances exactes sur sexe et tabac. Des échanges sur la flexibilité des critères et la possibilité d’ajouter ou retirer une variable ont émergé, notamment pour autoriser des dépassements lorsque aucune solution parfaite n’existe. Plusieurs solutions techniques ont été discutées, incluant l’utilisation d’une table mémoire, des critères de tolérance progressifs et l’interdiction d’utiliser un témoin pour plusieurs patients sans ajustement. Des ajustements pratiques incluaient le retrait de témoins avec données manquantes et la garantie que le témoin soit utilisé une seule fois, avec des méthodes d’activation d’appariement adaptées.

Bobot (l’IA à votre service)
  1. Contributeur
    Bonjour,

    est-ce qu'un témoin peut être associé à 2 personnes ou plus ?
    S'il n'y a pas de solution est-ce qu'un dépassement des 6% sur qq lignes est toléré ou tu te mets en quête d'autres témoins ?
    eric
    0
    1. 1) non un témoin ne doit être utilisé qu'une seule fois
      2) oui on peut tolérer plus si aucune solution. En faut à la fin que les deux groupes ait des moyennes qui ne soient pas statistiquement significatives

      Merci de ton aide...
      0
      1. Contributeur
        Heuuuu, attend pour le merci, pas dit que je trouve comment l'attaquer ;-)
        Surtout si ça doit évoluer dans les variables. En vba peu de souplesse, et je ne vois pas comment présenter ton truc au solveur... :-s
        0
    2. Bonsoir à vous deux

      Un essai par fonction personnalisée par macro avec pour l'instant un nombre fixe de variables et de % de variation :

      https://mon-partage.fr/f/Yz8z5D8g/

      Cdlmnt
      Via
      0
      1. Contributeur
        Salut via,

        Pour l'age c'est +/- 2 ans, j'ai bien l'impression que tu as mis +/- 2%... ;-)
        eric
        0
      2. C'est peut être pour cela que beaucoup n'ont pas de correspondants ?
        0
      3. Contributeur
        Ca n'aide pas oui :-)
        0
      4. @eriiicBonjour à vous deux

        Exact j'ai mis +/- 2 %
        Pour ouvrir le code ALT+F11
        Pour corriger :
        Au début des IF remplacer les 2 premiers par :
        If age <= .Range("C" & n) +2 and age >= .Range("C" & n) -2...

        Cdlmnt
        Via
        0
      5. @via55Merci++ J'ai fait le changement.
        Mais je ne sais pas comment je fais tourner le programme mis à jour...
        désolé de ces questions basiques
        0
    3. Ca l'air très bien.
      Je peux changer le % ?
      et si je veux enlever une variable ?

      en fait je n'arrive pas à ouvrir le code
      1
      1. Contributeur
        Dans le groupe 2 tu as des données absentes.
        On peut éliminer ces témoins sans autre forme de procès ?
        Ca rajoute des tests inutiles qui rallongent les temps de calcul pour rien.
        0
      2. Oui on peut effectivement les enlever
        0
    4. Contributeur
      Bonjour à tous,

      Je suis parti sur un traitement en table mémoire nécessairement plus rapide.
      - comme indiqué, j'élimine les lignes avec rubriques vides
      - ceux qui ne sont pas appariés à 6% sont repris par pas de 1%
      - j'ai mis le numéro apparié et à côté les caractéristiques paire avec le seuil de tolérance utilisé.

      http://www.cjoint.com/c/GGBuieYOLUl

      L'appariement s'effectue avec clic sur le bouton "Apparier".
      Il reste un vide mais c'est pour confirmer la règle ! ;-)
      0
      1. Excellent !
        comment est mesuré le seuil de tolérance ?

        si je veux enlever des variables, c'est possible sans tout casser ou non?
        0
      2. Contributeur
        Bonjour,

        Le seuil de tolérance est ajusté avec la variable 'tlc' (tolérance courante) qui varie depuis la valeur de 'tln' jusqu'à la valeur de 'tlx' par pas de 1%.

        Pour enlever des variables, tu mets en commentaire (') le test correspondant qui est indiqué dans le code ainsi que le 'End If' correspondant.
        0
      3. Contributeur
        re
        Une version plus conviviale car tu enlèves les variables à la volée, il te suffit de choisir "N" dans la liste pour que le paramètre de cette colonne soit ignoré.

        http://www.cjoint.com/c/GGCihWnSGsl
        0
      4. C'est juste génial !
        une dernière petite demande: est-ce qu'on peut ajouter 3 colonnes de variables qualitatives aussi en 0/1 variables comme pour tabac et sexe ?
        Je ne voudrais pas toucher au code moi-même au risque de tout casser...
        0
      5. J'avais encore une dernière des dernières demandes (si possible....) : c'est d'avoir la possibilité de mettre un deuxième apparié par patient. Mais que ce soit en option...
        0