MATH_EgaliteProportions    [Statistiques]

Par Teddy Linet (Math4D v1)
Nouvelle recherche
Si (Faux)
   ` MATH_EgaliteProportions [Teddy LINET 12/2002]
   ` ---------------------------------------------
   ` ATTENTION : Nécessite MATH_LoiNormale
   ` ---------------------------------------------
   ` Dans sa 1ère écriture :
   ` Permet de comparer une proportion vraie à une valeur donnée
   ` Dans sa 2e écriture
   ` Permet de comparer deux proportions expérimentales
   ` 
   ` Renvoie p, le risque que ses 2 valeurs soient différentes
   ` Si p est supérieur au seuil de signification (habituellement 5%) on peut
   ` considerer que les moyennes sont différentes (rejet de l'hypothèse Ho);
   ` Sinon, on ne peut rien conclure
   ` 
   ` ATTENTION : ceci ne correspond pas à la conduite habituelle
   ` en statistiques (d'abord test, puis calcul de p si z est dans l'intervalle
   ` de confiance); Mais le résultat est en fait équivalent
   ` ---------------------------------------------
   ` Rappels mathématiques :
   ` Le test d'égalité d'une proportion expérimentale (Po) à une valeur donnée (Ph)
   ` Ce test permet de vérifier si Po différent Ph (rejet de Ho)
   ` Le paramètre à évaluer est donc le suivant :
   `        Po-Ph
   ` z =-------------------
   `      Sqr((Ph(1-Ph))/n)
   `ou n représente le nombre d'élément
   ` Conditions de validité : n*Ph >= 5 et n*(1-Ph)>= 5
   ` Pour comparer 2 proportions expérimentales (Poa et Pob) le paramètre à évaluer 
   `           Poa - Pob
   ` z=----------------------
   `       (^p(1-^p)     (^p(1-^p)                 naPoa+nbPob
   `    Sqr(-------- + --------  )  ou ^p =-------------
   `       (    na             nb    )                     na+nb
   ` Les conditions sont : na*^p>=5 ; na(1-^p)>=5 ; nb*^p>=5 ; nb(1-^p)>=5
   ` ---------------------------------------------
   ` Deux écritures :
   ` 
   ` MATH_EgaliteMoyennes (ProportionObs;NbElements;ProportionReelle)
   ` ProportionObs (Réel) : Proportion Observée dans la série
   ` NbElements (Réel) : Nombre d'éléments de la série
   ` ProportionReelle (Réel) : Valeur à comparer
   ` Renvoie $O (Réel)  représentant p le risque que ses 2 valeurs soient différente
   ` 
   ` MATH_EgaliteMoyennes (ProprotionA;NbElementsA;ProportionB;NbElementsB)
   ` ProprotionA (Réel) : Proportion Observée dans la série A
   ` NbElementsA (Réel) : Nombre d'éléments de la série A
   ` ProportionB (Réel) : Proportion Observée dans la série B
   ` NbElementsB (Réel) : Nombre d'éléments de la série B
   ` ---------------------------------------------
   ` MATHERROR
   ` 0 -> Pas d'erreur
   ` -1 -> n <= 0
   ` -2 -> Ph nul
   ` -3 -> Pas des proportions
   ` +1 -> Conditions non remplies
   ` +3 -> n n'est pas un entier (arrondi)
   ` ---------------------------------------------
   ` EXEMPLES
   ` 
Fin de si 

C_REEL($0;$p_F;$z_F;$1;$vProportionObs_F;$vProportionA_F;$2;$vNbElementsObs_F;$vNbElementsA_F)
C_REEL($3;$vProportionReelle_F;$vProportionB_F;$4;$vNbElementsB_F;$vpChapeau_F;$VariableTravail_F)
C_ENTIER LONG($vMathError_L;MATHERROR)
$vMathError_L:=0
$p_F:=0  ` par défaut
Si (Nombre de parametres#4)  `Cas ou il s'agit de la comparaison avec une proportion vraie
 $vProportionObs_F:=$1
 $vNbElementsObs_F:=$2
 $vProportionReelle_F:=$3
   ` Matherror n'est pas tout de suite calculée
   ` Car elle pourrait être parasitée par LoiNormale
 Au cas ou 
  : ($vNbElementsObs_F<=1)  ` Sinon division par zéro
  $vMathError_L:=-1
  : ($vProportionReelle_F=0)  ` Sinon division par zéro
  $vMathError_L:=-2
  : (($vProportionObs_F>1) | ($vProportionObs_F<0) | ($vProportionReelle_F>1) | ($vProportionReelle_F<0))
  $vMathError_L:=-3
 Sinon   ` Erreurs corrigeables (du moins important au plus important)
    ` On ne met pas de "au cas ou" car elles pourront peut-être être multiples      
  Si (($vNbElementsObs_F-Ent($vNbElementsObs_F))#0)  ` Pas un entier
   $vMathError_L:=3
   $vNbElementsObs_F:=Arrondi($vNbElementsObs_F;0)  ` Arrondi
  Fin de si 
  Si ((($vNbElementsObs_F*$vProportionReelle_F)<5) | (($vNbElementsObs_F*(1-$vProportionReelle_F))<5))  ` Vérifie que les conditions sont remplies  
   $vMathError_L:=1
  Fin de si 
 Fin de cas 
 Si ($vMathError_L>=0)  ` Pas de drame => on continue
  $z_F:=$vProportionObs_F-$vProportionReelle_F
  $VariableTravail_F:=($vProportionReelle_F*(1-$vProportionReelle_F))
  $VariableTravail_F:=$VariableTravail_F/$vNbElementsObs_F
  $VariableTravail_F:=Racine carree($VariableTravail_F)
  $z_F:=$z_F/$VariableTravail_F  ` Calcul du paramètre
    ` Logiquement on vérifie que le paramètre est bien dans l'intervalle de pari
  $p_F:=1-(MATH_LoiNormale ($z_F;"P")*2)  ` Puis on cacul p
 Fin de si 
Sinon   ` Cas ou il s'agit de la comparaison entre 2 proportions observées
 $vProportionA_F:=$1
 $vNbElementsA_F:=$2
 $vProportionB_F:=$3
 $vNbElementsB_F:=$4
 Au cas ou 
  : (($vNbElementsA_F<=1) | ($vNbElementsB_F<=1))  ` Sinon division par zéro
  $vMathError_L:=-1
  : (($vProportionA_F=0) | ($vProportionB_F=0))  ` Sinon division par zéro
  $vMathError_L:=-2
  : (($vProportionA_F>1) | ($vProportionA_F<0) | ($vProportionB_F>1) | ($vProportionB_F<0))
  $vMathError_L:=-3
 Sinon   ` Erreurs corrigeables (du moins important au plus important)
  Si (($vNbElementsA_F-Ent($vNbElementsA_F))#0)  ` Pas un entier
   $vMathError_L:=3
   $vNbElementsA_F:=Arrondi($vNbElementsA_F;0)  ` Arrondi
  Fin de si 
  Si (($vNbElementsB_F-Ent($vNbElementsB_F))#0)  ` Pas un entier
   $vMathError_L:=3
   $vNbElementsB_F:=Arrondi($vNbElementsB_F;0)  ` Arrondi
  Fin de si 
 Fin de cas 
 Si ($vMathError_L>=0)  ` Pas de drame => on continue
  $vpChapeau_F:=($vNbElementsA_F*$vProportionA_F)+($vNbElementsB_F*$vProportionB_F)
  $vpChapeau_F:=$vpChapeau_F/($vNbElementsA_F+$vNbElementsB_F)  ` Calcul de ^p    
  $z_F:=$vProportionA_F-$vProportionB_F
  $VariableTravail_F:=($vpChapeau_F*(1-$vpChapeau_F))
  $VariableTravail_F:=$VariableTravail_F*((1/$vNbElementsA_F)+(1/$vNbElementsB_F))
  $VariableTravail_F:=Racine carree($VariableTravail_F)
  $z_F:=$z_F/$VariableTravail_F  ` Calcul du paramètre
    ` Logiquement on vérifie que le paramètre est bien dans l'intervalle de pari
  $p_F:=1-(MATH_LoiNormale ($z_F;"P")*2)  ` Puis on cacul p    
    ` Vérifie que les conditions sont remplies  
  Au cas ou   ` Pour être plus lisible (un si-fin de si aurait suffit)
   : (($vNbElementsA_F*$vpChapeau_F)<5)
   $vMathError_L:=1
   : (($vNbElementsA_F*(1-$vpChapeau_F))<5)
   $vMathError_L:=1
   : (($vNbElementsB_F*$vpChapeau_F)<5)
   $vMathError_L:=1
   : (($vNbElementsB_F*(1-$vpChapeau_F))<5)
   $vMathError_L:=1
  Fin de cas 
 Fin de si 
Fin de si 

$0:=$p_F  ` Enfin, on renvoie la valeur calculée
MATHERROR:=$vMathError_L  ` Puis on renvoie le matherror de cette fonction