Partage
  • Partager sur Facebook
  • Partager sur Twitter

Calculer le pourcentage de chaque partie

Sujet résolu
    9 mars 2011 à 19:47:28

    Bonjour!

    Je bloque actuellement sur le calcul de chaque pourcentage de partie.

    Un exemple vaut beaucoup plus qu'un long discours:

    Citation : Arnadus


    Imaginons une population de X personnes (prenons 100) qui peut être affectée par plusieurs conditions/etats/maladies (par exemple, 4). Les 4 conditions ont chacune un pourcentage X de se produire.

    - Cancer : 30%
    - Sida: 50%
    - Grippe: 90%
    - Malaria: 10%

    Sachant cela, j'aimerais savoir le pourcentage de personnes affectées par chacune des combinaisons possibles de ces conditions! Donc:

    - Cancer : A%
    - Sida: B%
    - Grippe: C%
    - Malaria: D%

    - Cancer ET sida: E%
    - Cancer ET Grippe: F%
    - Cancer ET Malaria: G%
    - Sida ET Grippe: H%
    - Sida ET Malaria: I%
    - Grippe ET Malaria: J%

    - ...

    - Cancer ET sida ET Grippe: K%
    - Cancer ET sida ET Malaria: L%
    - ...

    - Cancer ET sida ET Grippe ET Malaria: M%
    - ...

    Voila, je pense que vous avez compris le principe, moi aussi. Ce qui est moins évident (en tout cas pour moi) c'est la résolution ce problème! ^^ Je me doute qu'il doit y avoir un produit cartésien ou quelque chose comme ça dans l'histoire mais... c'est à peu près tout :(



    Merci pour vous réponses détaillées! :)
    • Partager sur Facebook
    • Partager sur Twitter
      9 mars 2011 à 19:59:37

      A priori, les probabilités d'avoir une des quatre maladies sont indépendantes, donc en notant :
      <math>\(A_1\)</math> : Avoir le sida
      <math>\(A_2\)</math> : Avoir un cancer
      <math>\(A_3\)</math> : Avoir la grippe
      <math>\(A_4\)</math> : Avoir la malaria
      je dirais que la probabilité <math>\(p(A_i\cap{}A_j)\)</math> vaut <math>\(p(A_i)\times{}p(A_j)\)</math>

      A vérifier toutefois, cela fait un moment que je n'ai pas touché aux probabilités.
      • Partager sur Facebook
      • Partager sur Twitter
        9 mars 2011 à 20:37:27

        C'est ce que je m'étais dit aussi mais je crains que ce ne soit plus subtile.

        En effet, si l'on prend 3 maladies (pour faire plus simple):

        - Sida : 30%
        - Malaria: 50%
        - cancer: 60%

        En combinant les combinaisons de ces 3 maladies, il me semble que cela devrait donner le dessin suivant, non?

        Dessin de probabilité

        Si c'est le cas, ca deviendrait assez fastidieux de calculer la probabilité de chaque maladie... :(

        J'espère que ce n'est pas le cas!
        • Partager sur Facebook
        • Partager sur Twitter
          9 mars 2011 à 21:12:01

          Hé bien prenons ton illustration. Disons, en jaune le SIDA, en orange la malaria et en vert le cancer.
          Image utilisateur
          Prenons par exemple une personne qui aurait le SIDA et la malaria. La probabilité d'obtenir un tel cas est de <math>\(\frac{30}{100}\times\frac{50}{100}\)</math>, soit <math>\(15\%\)</math>

          Mais rien ne nous dit que cette personne n'a pas aussi un cancer. Autrement dit, c'est l'ensemble {rouge + rose} qui représente ce pourcentage. Si tu voulais savoir quel pourcentage représente la région rouge uniquement, cela correspond à la probabilité : avoir le SIDA, la malaria, mais pas de cancer. Ce qui donne pour le calcul :

          <math>\(\frac{30}{100}\times\frac{50}{100}\times\left(1-\frac{60}{100}\right)\)</math> soit 6% si mes calculs sont exacts.

          Voilà, les formules sont ce qu'elles sont, je ne sais pas vraiment si elles sont fastidieuses. Après il existe quelques raccourcis : par exemple, sachant qu'on a 6% de chances d'avoir le SIDA, la malaria et pas de cancer, on peut en déduire immédiatement qu'on a 94% de chances d'avoir la propriété inverse, c'est-à-dire avoir un cancer ou pas la malaria ou pas le SIDA (c'est-à-dire tout ce qui n'est pas rouge sur le dessin, y compris le blanc : n'oublions pas qu'on a tout de même 14% de chances de ne rien avoir du tout ^^).
          • Partager sur Facebook
          • Partager sur Twitter
            9 mars 2011 à 21:48:00

            Haaa ben oui, évidemment! :)

            Merci de ta réponse... ca va être chaud à implémenter (le fonction que je fais doit fonctionner pour un nombres n de maladies ...) mais je sais au moins le principe maintenant! :)

            Merci! :)
            • Partager sur Facebook
            • Partager sur Twitter
              9 mars 2011 à 21:56:48

              Avec plaisir !

              Si tu n'as pas de question complémentaire, pense à passer le sujet en Résolu :)
              • Partager sur Facebook
              • Partager sur Twitter
                10 mars 2011 à 17:47:52

                Et voila, après quelques temps de programmation, j'ai fini le petit bout de code permettant de calculer le pourcentage de chaque combinaison possible (unique, l'ordre n'ayant pas d'importance)!

                La fonction renvoie un tableau de 2-uplets , le premier élément comportant les clefs (= les condition dans notre exemple) et le second, le pourcentage de chance d'avoir ces conditions réunies!
                Le plus gros du travail a finalement été de construire le "produit cartésien" (amélioré).

                Pas de commentaire dans le code dans un premier temps, et s'il y a des amateurs... et bien contactez-moi! ^^

                <?php
                function ExplodeCartesien($a){
                	return array($a);
                	}
                function produitCartesien($a,$niveau){
                	if($niveau==1){
                		return array(
                		'begin'=>count($a)-1,
                		'tableau'=>array_map('ExplodeCartesien',$a));
                		}
                	else{
                		$info=produitCartesien($a,$niveau-1);
                		$produit_cartesien=$info['tableau'];
                		$lp=count($produit_cartesien);
                		$la=count($a);
                		for($i=$info['begin'];$i<$lp;$i++){
                			for($j=0;$j<$la;$j++){
                				if(!in_array($a[$j],$produit_cartesien[$i])){
                					$copie=$produit_cartesien[$i];
                					$copie[]=$a[$j];
                					sort($copie,SORT_NUMERIC);
                					$produit_cartesien[]=$copie;
                					}
                				}
                			}
                		$produit_cartesien=array_values(array_map('unserialize',array_unique(array_map('serialize',$produit_cartesien),SORT_STRING)));
                		
                		}
                		
                	return array(
                	'begin'=>count($produit_cartesien)-1,
                	'tableau'=>$produit_cartesien);
                	}
                
                function ComputeAlteration($alteration){
                	$keys=array_keys($alteration);
                	$lkey=count($keys);
                	$produitCartesien=produitCartesien($keys,$lkey);
                	$alterations=array();
                	
                	for($i=0;$i<=$produitCartesien['begin'];$i++){
                		$diff=array_diff($keys,$produitCartesien['tableau'][$i]);
                		$produit=1;
                		for($j=0;$j<$lkey;$j++){
                			if(in_array($keys[$j],$produitCartesien['tableau'][$i])){
                				$produit= $produit*($alteration[$keys[$j]]/100);
                				}
                				else{
                					$produit= $produit*(1-$alteration[$keys[$j]]/100);
                					}
                			}
                		$alterations[]=array($produitCartesien['tableau'][$i],$produit);
                		}
                		
                	return $alterations;
                	}
                
                //testons le code
                $a= array(30,50,70); // 30, 50 et 70 représente les pourcentage des conditions.
                
                print_r(ComputeAlteration($a));
                //==========
                
                /*
                Cet exemple renverra:
                
                Array
                (
                    [0] => Array
                        (
                            [0] => Array
                                (
                                    [0] => 0
                                )
                 
                            [1] => 0.045
                        )
                 
                    [1] => Array
                        (
                            [0] => Array
                                (
                                    [0] => 1
                                )
                 
                            [1] => 0.105
                        )
                 
                    [2] => Array
                        (
                            [0] => Array
                                (
                                    [0] => 2
                                )
                 
                            [1] => 0.245
                        )
                 
                    [3] => Array
                        (
                            [0] => Array
                                (
                                    [0] => 0
                                    [1] => 1
                                )
                 
                            [1] => 0.045
                        )
                 
                    [4] => Array
                        (
                            [0] => Array
                                (
                                    [0] => 0
                                    [1] => 2
                                )
                 
                            [1] => 0.105
                        )
                 
                    [5] => Array
                        (
                            [0] => Array
                                (
                                    [0] => 1
                                    [1] => 2
                                )
                 
                            [1] => 0.245
                        )
                 
                    [6] => Array
                        (
                            [0] => Array
                                (
                                    [0] => 0
                                    [1] => 1
                                    [2] => 2
                                )
                 
                            [1] => 0.105
                        )
                 
                )
                */
                
                ?>
                
                • Partager sur Facebook
                • Partager sur Twitter

                Calculer le pourcentage de chaque partie

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown