|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
STATISTIQUES MATHÉMATIQUES
Information sur la source
Description
Ceci est une classe permettant d'effectuer des statistiques mathématiques sur une ou plusieurs plages de données : calcul de moyenne, variance, écart-type et autre. De plus j'ai intégré la possibilité d'effectuer une regression linéaire grâce à 2 plages de données que l'on peut choisir. Tout en bas de la source vous avez la méthode d'utilisation et les exemples.
Source
- <html>
- <head></head>
- <BODY>
- <?
- class myException extends Exception {
-
-
- public function __construct($msg) {
- parent :: __construct($msg);
- }
-
-
- public function getError($V) {
-
- // On retourne un message d'erreur complet pour nos besoins.
- // avec le numero de ligne
- switch ($V)
- {
- case 999 : break; // Cette erreur n'a pas de suite car elle est issue d'une erreur précédente. En effet, cette erreur n'est dû qu'à la présence d'une erreur dans le tableau, ce qui a été déjà déclaré
- default :
- $return = 'Une exception a été gérée :<br/>';
- $return .= '<strong>Message : ' . $this->getMessage() . '</strong><br/>';
- // $return .= 'A la ligne : ' . $this->getLine().'<br/>';
- //$return .= 'Checkstate : ' . $V.'<br/>';
-
- return $return;
- break;
- }
- }
-
- public function __destruct() {
-
- }
- }
-
-
- class Statistiques
- {
- //------------------------------------------------------------------------
- //---------------------- Définition des variables-------------------------
- //------------------------------------------------------------------------
-
- var $TabVal; // -> Tableau 2D contenant les valeurs. Ex : $TabVal[0][0] : 1ere valeur de la série 1
- var $Moyenne; // -> Tableau 1D contenant la moyenne pour chacune des listes
- var $Mediane; // -> Tableau 1D contenant la médiane pour chacune des listes
- var $EcartMoy; // -> Tableau 1D contenant la médiane pour chacune des listes
- var $Variance; // -> Tableau 1D contenant la variance pour chacune des listes
- var $EcartType;
- var $Covariance;
- var $Pente;
- var $Ord;
- var $R;
- var $R2;
- var $VarResid;
- private $CheckState;
-
-
- //------------------------------------------------------------------------
- //--------------------Fin Définition des variables------------------------
- //------------------------------------------------------------------------
-
-
- //------------------------------------------------------------------------
- //------------------- Ajout des tableaux de valeurs-----------------------
- //------------------------------------------------------------------------
-
- // -> Ajout d'un tableau de valeur dans la table 2D $TabVal
- // -> $Val = tableau de valeur $Position : Position du tableau
- function F_AddVal($Val, $Position)
- {
- $this->CheckState[$Position] =1 ;
- try{
- if (!is_array($Val)) {$this->CheckState[$Position] =0 ;throw new myException ("Ce n'est pas un tableau !!!");} // Vérification du type de données : tableau
-
- $NbrVal = count($Val);
- if ($NbrVal == 0) {$this->CheckState[$Position] =0; throw new myException ('Tableau vide !!!');} // Vérification de la présence de contenu
-
- for ($Ivar1=0; $Ivar1 <= $NbrVal; $Ivar1++)
- {
-
- str_replace("," , ".", $Val[$Ivar1]); // Remplace les points par des virgules (les virgules ne st pas considérés comme numérique)
-
- $Count += is_numeric($Val[$Ivar1]);
-
- if (!is_numeric($Val[$Ivar1]) && $Val[$Ivar1] != "")
- {
- $this->CheckState[$Position] = 0;
- throw new myException ('Valeur non numerique '.$Val[$Ivar1]);
- }
- };
-
- if ($Count == count($Val)) // Si chacune des données du tableau est numérique alors on ajoute le tableau
- {
- //Effacement du tableau $TabVal[$Position] précédent si il y a lieu:
- if ($this->TabVal[$Position][0]) {array_splice($this->TabVal[$Position], 0, count($this->TabVal[$Position]));};
- // Ajout du nouveau tableau :
- $this->TabVal[$Position]=$Val;
- }
- else {
- $this->CheckState[$Position] = 0;
- throw new myException ('ERROR : tableau '.$Position.' non numerique '.$this->CheckState[$Position] );}
-
-
- }
-
- catch (MyException $e)
- {echo $e -> getError($this->CheckState[$Position]);}
- }
-
-
- //------------------------------------------------------------------------
- //----------------------- Calcul de la moyenne----------------------------
- //------------------------------------------------------------------------
-
-
- // Calcul la moyenne arithmétique
- // -> $Ask : liste de valeur à vérifier. -1 pour toutes les faires
- function F_Moyenne ($Ask)
- {
-
- switch ($Ask)
- {
- case -1: // Calcul les moyennes de toutes les tables et renvoie le tableau complet
-
- $NbrVal = count($this->TabVal)-1;
- for ($Ivar1=0; $Ivar1 <= $NbrVal; $Ivar1++)
- {
- try{ if ($this->CheckState[$Ivar1] == 0) { throw new myException ('ERROR'); }
- $this->CalMoy($Ivar1);
- }
- catch(MyException $e){echo "ERROR"; echo $e -> getError(999);};
- }
- return $this->Moyenne;
- break;
- default :
- try{
- if ($this->CheckState[$Ivar1] == 0) { throw new myException ('ERROR'); }
- return $this->CalMoy($Ask);
- }
- catch(MyException $e){echo $e -> getError(999);}; break; // Calcul la moyenne de la table demandé
- }
-
- }
-
- private function CalMoy($Ask) // Permet le calcul des moyennes (accessible que ds la classe)
- {
- $NbrVal = count($this->TabVal[$Ask]);
- for ($Ivar1 = 0; $Ivar1 <= $NbrVal; $Ivar1++)
- {
- $Somme += $this->TabVal[$Ask][$Ivar1];
- }
- try{
-
- $this->Moyenne[$Ask] = $Somme / $NbrVal; return $this->Moyenne[$Ask];}
- catch (MyException $e)
- {echo $e -> getError(999);}
-
- }
-
-
- //------------------------------------------------------------------------
- //----------------------- Calcul de la mediane----------------------------
- //------------------------------------------------------------------------
-
-
- // Calcul la moyenne arithmétique
- // -> $Ask : liste de valeur à vérifier. -1 pour toutes les faires
- function F_Mediane ($Ask)
- {
-
- switch ($Ask)
- {
- case -1: // Calcul les moyennes de toutes les tables et renvoie le tableau complet
- $NbrVal = count($this->TabVal)-1;
- for ($Ivar1=0; $Ivar1 <= $NbrVal; $Ivar1++)
- {$this->CalMed($Ivar1);} return $this->Mediane;
- break;
- default : return $this->CalMed($Ask); break; // Calcul la moyenne de la table demandé
- }
-
- }
-
- private function CalMed($Ask) // Permet le calcul des moyennes (accessible que ds la classe)
- {
- $Tableau = $this->TabVal[$Ask]; // On transfere le tableau dans une variable (plus léger et obligatoire pour la suite)
-
- sort($Tableau); // On trie le tableau par ordre croissant (si on avait pas fait le transfert de variable, cela aurait trier notre original et faussé la suite)
-
- if (count($Tableau) /2 == floor(count($Tableau) /2)) // On regarde si le nombre de valeur est paire
- {
- // Valeur correspondant au milieu des valeurs du milieu du tableau
- $this->Mediane[$Ask] = ($Tableau[count($Tableau)/2-1]
- +$Tableau[count($Tableau)/2+1])/2;
- }
- else // ou impaire
- {
- $this->Mediane[$Ask] = $Tableau[(count($Tableau)+1)/2-1]; // Valeur au milieu du tableau
- }
- return $this->Mediane[$Ask];
- }
-
- //------------------------------------------------------------------------
- //---------------------- Calcul de l'écart moyen--------------------------
- //------------------------------------------------------------------------
-
-
- // Calcul l'écart moyen
- // -> $Ask : liste de valeur à vérifier. -1 pour toutes les faires
- function F_EcartMoy ($Ask)
- {
- switch ($Ask)
- {
- case -1: // Calcul l'écart moyen de toutes les tables et renvoie le tableau complet
- $NbrVal = count($this->TabVal)-1;
- for ($Ivar1=0; $Ivar1 <= $NbrVal; $Ivar1++)
- {$this->CalEcMoy($Ivar1);} return $this->EcartMoy;
- break;
- default : return $this->CalEcMoy($Ask); break; // Calcul l'écart moyen de la table demandé
- }
-
- }
-
- private function CalEcMoy($Ask) // Permet le calcul de l'écart moyen (accessible que ds la classe)
- {
-
- $EcartMoy = 0; // Initialisation au cas où;
- $NbrVal = count($this->TabVal[$Ask])-1;
- for ($Ivar1 = 0; $Ivar1 <= $NbrVal; $Ivar1++)
- {
- $EcartMoy += abs($this->TabVal[$Ask][$Ivar1] - $this->Moyenne[$Ask]);
- }
- try{ $this->EcartMoy[$Ask] = $EcartMoy/count($this->TabVal[$Ask]); }
-
- catch (MyException $e)
- {echo $e -> getError(999);}
- return $this->EcartMoy[$Ask];
- }
-
- //------------------------------------------------------------------------
- //---------------------- Calcul de la variance----------------------------
- //------------------------------------------------------------------------
-
-
- // Calcul la variance
- // -> $Ask : liste de valeur à vérifier. -1 pour toutes les faires
- function F_Variance ($Ask)
- {
- switch ($Ask)
- {
- case -1: // Calcul les moyennes de toutes les tables et renvoie le tableau complet
-
- $NbrVal = count($this->TabVal)-1;
- for ($Ivar1 = 0; $Ivar1 <= $NbrVal; $Ivar1++)
- {
- try{
- if ($this->CheckState[$Ivar1] == 0) { throw new myException ('ERROR'); }
- $this->CalVariance($Ivar1); }
- catch(MyException $e){echo $e -> getError(999);};
- }
- return $this->Variance;
- break;
- default : try{
- if ($this->CheckState[$Ask] == 0) { throw new myException ('ERROR'); } return $this->CalVariance($Ask); }
- catch(MyException $e){echo $e -> getError(999);}; break; // Calcul la moyenne de la table demandé
- }
-
- }
-
- private function CalVariance($Ask) // Permet le calcul de l'écart moyen (accessible que ds la classe)
- {
-
- $Variance= 0; // Initialisation au cas où;
- $NbrVal = count($this->TabVal[$Ask])-1;
- for ($Ivar1 = 0; $Ivar1 <= $NbrVal; $Ivar1++)
- {
- $Variance += pow($this->TabVal[$Ask][$Ivar1] - $this->Moyenne[$Ask],2);
- }
- $this->Variance[$Ask] = $Variance/count($this->TabVal[$Ask]);
- return $this->Variance[$Ask];
-
- }
-
-
- //------------------------------------------------------------------------
- //---------------------- Calcul de l'écart type---------------------------
- //------------------------------------------------------------------------
-
-
- // Calcul l'écart type, à savoir la racine de la variance
- // -> $Ask : liste de valeur à vérifier. -1 pour toutes les faires
- function F_EcartType ($Ask)
- {
- switch ($Ask)
- {
- case -1: // Calcul les moyennes de toutes les tables et renvoie le tableau complet
- $NbrVal = count($this->TabVal)-1;
- for ($Ivar1 = 0; $Ivar1 <= $NbrVal; $Ivar1++)
- {
- if (!isset($this->Variance[$Ivar1])) {$this->CalVariance($Ivar1);};
- $this->EcartType[$Ivar1] = sqrt($this->Variance[$Ivar1]);
- }
- return $this->EcartType;
- break;
- default :
- if (!isset($this->Variance[$Ask])) {$this->CalVariance($Ask);};
- $this->EcartType[$Ask] = sqrt($this->Variance[$Ask]);
- return $this->EcartType[$Ask]; break; // Calcul la moyenne de la table demandé
- }
-
- }
-
-
- //------------------------------------------------------------------------
- //---------------- Calcul de la covariance de X et Y ---------------------
- //------------------------------------------------------------------------
- function F_Covariance ($Ask1, $Ask2)
- {
- //Vérification du même nombre de données dans les listes :
- try
- {
- if (count($this->TabVal[$Ask1]) ==count($this->TabVal[$Ask2]))
- {
- // Vérification de la présence des moyennes
- if (!isset($this->Moyenne[$Ask1])) {$this->F_Moyenne($Ask1);}
- if (!isset($this->Moyenne[$Ask2])) {$this->F_Moyenne($Ask2);}
- // Initialisation
- $Covariance = 0;
- for ($Ivar1=0; $Ivar1 <= count($this->TabVal[$Ask2]); $Ivar1++)
- {
- $Covariance += ($this->TabVal[$Ask1][$Ivar1])*($this->TabVal[$Ask2][$Ivar1]);
- }
- $this->Covariance[$Ask1."-".$Ask2] = $Covariance/(count($this->TabVal[$Ask2])) - ($this->Moyenne[$Ask2])*($this->Moyenne[$Ask1]);
- return $this->Covariance[$Ask1."-".$Ask2] ;
- }
- else
- {
- throw new myException ('Dimension des tableaux '.$Ask1.' (dim ='.count($this->TabVal[$Ask1]).') et '.$Ask2.' (dim ='.count($this->TabVal[$Ask2]).') differente');
- }
- }
- catch (MyException $e)
- {echo $e -> getError(999);}
- }
-
- //------------------------------------------------------------------------
- //----------------- Calcul de l'équation de la droite --------------------
- //------------------------------------------------------------------------
- function F_EquDrte($Ask1, $Ask2)
- {
- // Vérification de la présence des données nécessaires
- if (!isset($this->Moyenne[$Ask1]) ) {$this->F_Moyenne($Ask1);}
- if (!isset($this->Moyenne[$Ask2])){$this->F_Moyenne($Ask2);}
- if (!isset($this->Covariance[$Ask1."-".$Ask2])) {$this->F_Covariance($Ask1, $Ask2);}
- if (!isset($this->Variance[$Ask1])) {$this->F_Variance($Ask1);}
- if (!isset($this->Variance[$Ask2])) {$this->F_Variance($Ask2);}
- // Calcul de la pente
- if ($this->Variance[$Ask1])
- {
- $this->Pente[$Ask1."-".$Ask2] = round($this->Covariance[$Ask1."-".$Ask2]/($this->Variance[$Ask1]),5);
- // Calcul de l'ordonnée à l'origine
- $this->Ord[$Ask1."-".$Ask2] = round($this->Moyenne[$Ask2]-($this->Covariance[$Ask1."-".$Ask2]/$this->Variance[$Ask1])*($this->Moyenne[$Ask1]),5);
- }
- }
-
- //------------------------------------------------------------------------
- //------------------------ Calcul de regression --------------------------
- //------------------------------------------------------------------------
- function F_R2($Ask1, $Ask2)
- {
- if (!isset($this->Covariance[$Ask1."-".$Ask2])) {$this->F_Covariance($Ask1, $Ask2);}
- if (!isset($this->Variance[$Ask1])) {$this->F_Variance($Ask1);}
- if (!isset($this->Variance[$Ask2])) {$this->F_Variance($Ask2);}
-
- if ($this->Variance[$Ask1] && $this->Variance[$Ask2]) {$this->R2[$Ask1."-".$Ask2] = pow($this->Covariance[$Ask1."-".$Ask2]/(sqrt($this->Variance[$Ask2])*sqrt($this->Variance[$Ask1])),2); }
- }
-
- //------------------------------------------------------------------------
- //------------------- Calcul de coeff de determination -------------------
- //------------------------------------------------------------------------
- function F_R($Ask1, $Ask2)
- {
- if (!isset($this->Covariance[$Ask1."-".$Ask2])) {$this->F_Covariance($Ask1, $Ask2);}
- if (!isset($this->Variance[$Ask1])) { $this->F_Variance($Ask1);}
- if (!isset($this->Variance[$Ask2])) { $this->F_Variance($Ask2);}
-
- if ($this->Variance[$Ask1] && $this->Variance[$Ask2]) {$this->R[$Ask1."-".$Ask2] = $this->Covariance[$Ask1."-".$Ask2]/(sqrt($this->Variance[$Ask2])*sqrt($this->Variance[$Ask1]));}
- }
-
- //------------------------------------------------------------------------
- //------------------- Calcul de l'erreur sur la pente -------------------
- //------------------------------------------------------------------------
- function F_ERROR($Ask1, $Ask2)
- {
- if (!isset($this->Pente[$Ask1."-".$Ask2]) && !isset($this->Ord[$Ask1."-".$Ask2])){ $this->F_EquDrte($Ask1, $Ask2);}
- $Count = count($this->TabVal[$Ask1]);
- $error = 0;
- for ($Ivar1=0; $Ivar1 <= $Count-1; $Ivar1++)
- {
- $error += pow($this->TabVal[$Ask2][$Ivar1] -($this->TabVal[$Ask1][$Ivar1]*$this->Pente[$Ask1."-".$Ask2]+$this->Ord[$Ask1."-".$Ask2]),2);
- }
-
- echo "Erreur sur a : ".sqrt($error/($Count));
-
- }
-
- };
-
-
- //------------------------------------------------------------------------
- //------------------------------- Interface rapide ------------------------
- //------------------------------------------------------------------------
-
-
- $Debug=(isset($_GET['Debug'])) ? $_GET['Debug'] : "";
- $Val=(isset($_GET['Val'])) ? $_GET['Val'] : "5";
- ?>
- <body> <form method="POST" action="Stat%20(revised).php?Val=<?php echo $Val; if ($Debug == "1") {echo "&Debug=1";}; ?>">
-
- <center>
- <H1>Interpolation</H1>
- <table border="6" cellpadding="3"><tr><td>
- <table>
- <tr align="center"><td>x</td><td>y</td></tr>
- <?php
- define("MAXVAL", $Val);
-
-
-
- $Count = 0;
- // Récupération des valeurs
- for ($Ivar2 = 0; $Ivar2 <= MAXVAL; $Ivar2++)
- {
- $x[$Ivar2]=(isset($_POST['x'.$Ivar2]) && $_POST['x'.$Ivar2] != "") ? $_POST['x'.$Ivar2] : "";
- $y[$Ivar2]=(isset($_POST['y'.$Ivar2]) && $_POST['y'.$Ivar2] != "") ? $_POST['y'.$Ivar2] :"";
-
- };
-
-
- // Ecriture du tableau
- for ($Ivar1 = 0; $Ivar1 <= MAXVAL; $Ivar1++)
- { echo '<tr><td><INPUT type="TEXT" name="x'.$Ivar1.'" value="'.$x[$Ivar1].'"></td><td><INPUT type="TEXT" name="y'.$Ivar1.'" value="'.$y[$Ivar1].'"></td></tr>'; };
- ?>
- </table>
-
- <input type="SUBMIT" value="ok"/>
- </form>
- </td><td>
-
- <?php
-
-
-
-
- ?>
-
-
-
- </td></tr></table>
-
- <?php
-
- $Reg = new Statistiques;
- if ($x[0] && $y[0]) {$Reg -> F_AddVal($x,0);
- echo $Reg -> F_AddVal($y,1);
-
- echo '<table border="1"><tr><td>Moyenne : </td>';
- foreach (($Reg -> F_Moyenne(-1) ) as $tab)
- {
- echo "<td>".round($tab,5)."</td>";
- };
- echo "</tr><tr><td>Mediane : </td>";
- foreach (($Reg -> F_Mediane(-1) ) as $tab)
- {
- echo "<td>".round($tab,5)."</td>";
- };
- echo "</tr><tr><td>Ecart Moyen : </td>";
-
- foreach (($Reg -> F_EcartMoy(-1) ) as $tab)
- {
- echo "<td>".round($tab,5)."</td>";
- };
- echo "</tr><tr><td>Variance : </td>";
-
- foreach (($Reg -> F_Variance(-1) ) as $tab)
- {
- echo "<td>".round($tab,5)."</td>";
- };
- echo "</tr><tr><td>Ecart type : </td>";
-
- foreach (($Reg -> F_EcartType(-1) ) as $tab)
- {
- echo "<td>".round($tab,5)."</td>";
- };
-
- echo "</tr></table><br/>";
- echo "<table><tr><td></td><td>Interpolation linéaire</td></tr>";
-
- echo "<tr><td>Covariance : </td><td>".($Reg -> F_Covariance(0,1))."</td></tr>";
- echo "<tr><td>Regression lineaire : </td>";
- $Reg ->F_EquDrte(0,1);
-
- echo "<td>".($Reg->Pente["0-1"])."x +".($Reg->Ord["0-1"])." </td>";
-
- $Reg ->F_R2(0,1);
-
- $Reg ->F_R(0,1);
-
- echo "<tr><td>R2 : </td><td>".($Reg -> R2["0-1"])."</td></tr>";
- echo "<tr><td>R : </td><td>".($Reg -> R["0-1"])."</td></tr>";
- echo "</tr></table>";
- echo "<br/><br/>";
- echo $Reg -> F_ERROR(0, 1);
- echo "<br/>";
-
-
- };
- ?>
-
-
-
-
-
- </center>
-
-
- </BODY>
- </html>
-
<html>
<head></head>
<BODY>
<?
class myException extends Exception {
public function __construct($msg) {
parent :: __construct($msg);
}
public function getError($V) {
// On retourne un message d'erreur complet pour nos besoins.
// avec le numero de ligne
switch ($V)
{
case 999 : break; // Cette erreur n'a pas de suite car elle est issue d'une erreur précédente. En effet, cette erreur n'est dû qu'à la présence d'une erreur dans le tableau, ce qui a été déjà déclaré
default :
$return = 'Une exception a été gérée :<br/>';
$return .= '<strong>Message : ' . $this->getMessage() . '</strong><br/>';
// $return .= 'A la ligne : ' . $this->getLine().'<br/>';
//$return .= 'Checkstate : ' . $V.'<br/>';
return $return;
break;
}
}
public function __destruct() {
}
}
class Statistiques
{
//------------------------------------------------------------------------
//---------------------- Définition des variables-------------------------
//------------------------------------------------------------------------
var $TabVal; // -> Tableau 2D contenant les valeurs. Ex : $TabVal[0][0] : 1ere valeur de la série 1
var $Moyenne; // -> Tableau 1D contenant la moyenne pour chacune des listes
var $Mediane; // -> Tableau 1D contenant la médiane pour chacune des listes
var $EcartMoy; // -> Tableau 1D contenant la médiane pour chacune des listes
var $Variance; // -> Tableau 1D contenant la variance pour chacune des listes
var $EcartType;
var $Covariance;
var $Pente;
var $Ord;
var $R;
var $R2;
var $VarResid;
private $CheckState;
//------------------------------------------------------------------------
//--------------------Fin Définition des variables------------------------
//------------------------------------------------------------------------
//------------------------------------------------------------------------
//------------------- Ajout des tableaux de valeurs-----------------------
//------------------------------------------------------------------------
// -> Ajout d'un tableau de valeur dans la table 2D $TabVal
// -> $Val = tableau de valeur $Position : Position du tableau
function F_AddVal($Val, $Position)
{
$this->CheckState[$Position] =1 ;
try{
if (!is_array($Val)) {$this->CheckState[$Position] =0 ;throw new myException ("Ce n'est pas un tableau !!!");} // Vérification du type de données : tableau
$NbrVal = count($Val);
if ($NbrVal == 0) {$this->CheckState[$Position] =0; throw new myException ('Tableau vide !!!');} // Vérification de la présence de contenu
for ($Ivar1=0; $Ivar1 <= $NbrVal; $Ivar1++)
{
str_replace("," , ".", $Val[$Ivar1]); // Remplace les points par des virgules (les virgules ne st pas considérés comme numérique)
$Count += is_numeric($Val[$Ivar1]);
if (!is_numeric($Val[$Ivar1]) && $Val[$Ivar1] != "")
{
$this->CheckState[$Position] = 0;
throw new myException ('Valeur non numerique '.$Val[$Ivar1]);
}
};
if ($Count == count($Val)) // Si chacune des données du tableau est numérique alors on ajoute le tableau
{
//Effacement du tableau $TabVal[$Position] précédent si il y a lieu:
if ($this->TabVal[$Position][0]) {array_splice($this->TabVal[$Position], 0, count($this->TabVal[$Position]));};
// Ajout du nouveau tableau :
$this->TabVal[$Position]=$Val;
}
else {
$this->CheckState[$Position] = 0;
throw new myException ('ERROR : tableau '.$Position.' non numerique '.$this->CheckState[$Position] );}
}
catch (MyException $e)
{echo $e -> getError($this->CheckState[$Position]);}
}
//------------------------------------------------------------------------
//----------------------- Calcul de la moyenne----------------------------
//------------------------------------------------------------------------
// Calcul la moyenne arithmétique
// -> $Ask : liste de valeur à vérifier. -1 pour toutes les faires
function F_Moyenne ($Ask)
{
switch ($Ask)
{
case -1: // Calcul les moyennes de toutes les tables et renvoie le tableau complet
$NbrVal = count($this->TabVal)-1;
for ($Ivar1=0; $Ivar1 <= $NbrVal; $Ivar1++)
{
try{ if ($this->CheckState[$Ivar1] == 0) { throw new myException ('ERROR'); }
$this->CalMoy($Ivar1);
}
catch(MyException $e){echo "ERROR"; echo $e -> getError(999);};
}
return $this->Moyenne;
break;
default :
try{
if ($this->CheckState[$Ivar1] == 0) { throw new myException ('ERROR'); }
return $this->CalMoy($Ask);
}
catch(MyException $e){echo $e -> getError(999);}; break; // Calcul la moyenne de la table demandé
}
}
private function CalMoy($Ask) // Permet le calcul des moyennes (accessible que ds la classe)
{
$NbrVal = count($this->TabVal[$Ask]);
for ($Ivar1 = 0; $Ivar1 <= $NbrVal; $Ivar1++)
{
$Somme += $this->TabVal[$Ask][$Ivar1];
}
try{
$this->Moyenne[$Ask] = $Somme / $NbrVal; return $this->Moyenne[$Ask];}
catch (MyException $e)
{echo $e -> getError(999);}
}
//------------------------------------------------------------------------
//----------------------- Calcul de la mediane----------------------------
//------------------------------------------------------------------------
// Calcul la moyenne arithmétique
// -> $Ask : liste de valeur à vérifier. -1 pour toutes les faires
function F_Mediane ($Ask)
{
switch ($Ask)
{
case -1: // Calcul les moyennes de toutes les tables et renvoie le tableau complet
$NbrVal = count($this->TabVal)-1;
for ($Ivar1=0; $Ivar1 <= $NbrVal; $Ivar1++)
{$this->CalMed($Ivar1);} return $this->Mediane;
break;
default : return $this->CalMed($Ask); break; // Calcul la moyenne de la table demandé
}
}
private function CalMed($Ask) // Permet le calcul des moyennes (accessible que ds la classe)
{
$Tableau = $this->TabVal[$Ask]; // On transfere le tableau dans une variable (plus léger et obligatoire pour la suite)
sort($Tableau); // On trie le tableau par ordre croissant (si on avait pas fait le transfert de variable, cela aurait trier notre original et faussé la suite)
if (count($Tableau) /2 == floor(count($Tableau) /2)) // On regarde si le nombre de valeur est paire
{
// Valeur correspondant au milieu des valeurs du milieu du tableau
$this->Mediane[$Ask] = ($Tableau[count($Tableau)/2-1]
+$Tableau[count($Tableau)/2+1])/2;
}
else // ou impaire
{
$this->Mediane[$Ask] = $Tableau[(count($Tableau)+1)/2-1]; // Valeur au milieu du tableau
}
return $this->Mediane[$Ask];
}
//------------------------------------------------------------------------
//---------------------- Calcul de l'écart moyen--------------------------
//------------------------------------------------------------------------
// Calcul l'écart moyen
// -> $Ask : liste de valeur à vérifier. -1 pour toutes les faires
function F_EcartMoy ($Ask)
{
switch ($Ask)
{
case -1: // Calcul l'écart moyen de toutes les tables et renvoie le tableau complet
$NbrVal = count($this->TabVal)-1;
for ($Ivar1=0; $Ivar1 <= $NbrVal; $Ivar1++)
{$this->CalEcMoy($Ivar1);} return $this->EcartMoy;
break;
default : return $this->CalEcMoy($Ask); break; // Calcul l'écart moyen de la table demandé
}
}
private function CalEcMoy($Ask) // Permet le calcul de l'écart moyen (accessible que ds la classe)
{
$EcartMoy = 0; // Initialisation au cas où;
$NbrVal = count($this->TabVal[$Ask])-1;
for ($Ivar1 = 0; $Ivar1 <= $NbrVal; $Ivar1++)
{
$EcartMoy += abs($this->TabVal[$Ask][$Ivar1] - $this->Moyenne[$Ask]);
}
try{ $this->EcartMoy[$Ask] = $EcartMoy/count($this->TabVal[$Ask]); }
catch (MyException $e)
{echo $e -> getError(999);}
return $this->EcartMoy[$Ask];
}
//------------------------------------------------------------------------
//---------------------- Calcul de la variance----------------------------
//------------------------------------------------------------------------
// Calcul la variance
// -> $Ask : liste de valeur à vérifier. -1 pour toutes les faires
function F_Variance ($Ask)
{
switch ($Ask)
{
case -1: // Calcul les moyennes de toutes les tables et renvoie le tableau complet
$NbrVal = count($this->TabVal)-1;
for ($Ivar1 = 0; $Ivar1 <= $NbrVal; $Ivar1++)
{
try{
if ($this->CheckState[$Ivar1] == 0) { throw new myException ('ERROR'); }
$this->CalVariance($Ivar1); }
catch(MyException $e){echo $e -> getError(999);};
}
return $this->Variance;
break;
default : try{
if ($this->CheckState[$Ask] == 0) { throw new myException ('ERROR'); } return $this->CalVariance($Ask); }
catch(MyException $e){echo $e -> getError(999);}; break; // Calcul la moyenne de la table demandé
}
}
private function CalVariance($Ask) // Permet le calcul de l'écart moyen (accessible que ds la classe)
{
$Variance= 0; // Initialisation au cas où;
$NbrVal = count($this->TabVal[$Ask])-1;
for ($Ivar1 = 0; $Ivar1 <= $NbrVal; $Ivar1++)
{
$Variance += pow($this->TabVal[$Ask][$Ivar1] - $this->Moyenne[$Ask],2);
}
$this->Variance[$Ask] = $Variance/count($this->TabVal[$Ask]);
return $this->Variance[$Ask];
}
//------------------------------------------------------------------------
//---------------------- Calcul de l'écart type---------------------------
//------------------------------------------------------------------------
// Calcul l'écart type, à savoir la racine de la variance
// -> $Ask : liste de valeur à vérifier. -1 pour toutes les faires
function F_EcartType ($Ask)
{
switch ($Ask)
{
case -1: // Calcul les moyennes de toutes les tables et renvoie le tableau complet
$NbrVal = count($this->TabVal)-1;
for ($Ivar1 = 0; $Ivar1 <= $NbrVal; $Ivar1++)
{
if (!isset($this->Variance[$Ivar1])) {$this->CalVariance($Ivar1);};
$this->EcartType[$Ivar1] = sqrt($this->Variance[$Ivar1]);
}
return $this->EcartType;
break;
default :
if (!isset($this->Variance[$Ask])) {$this->CalVariance($Ask);};
$this->EcartType[$Ask] = sqrt($this->Variance[$Ask]);
return $this->EcartType[$Ask]; break; // Calcul la moyenne de la table demandé
}
}
//------------------------------------------------------------------------
//---------------- Calcul de la covariance de X et Y ---------------------
//------------------------------------------------------------------------
function F_Covariance ($Ask1, $Ask2)
{
//Vérification du même nombre de données dans les listes :
try
{
if (count($this->TabVal[$Ask1]) ==count($this->TabVal[$Ask2]))
{
// Vérification de la présence des moyennes
if (!isset($this->Moyenne[$Ask1])) {$this->F_Moyenne($Ask1);}
if (!isset($this->Moyenne[$Ask2])) {$this->F_Moyenne($Ask2);}
// Initialisation
$Covariance = 0;
for ($Ivar1=0; $Ivar1 <= count($this->TabVal[$Ask2]); $Ivar1++)
{
$Covariance += ($this->TabVal[$Ask1][$Ivar1])*($this->TabVal[$Ask2][$Ivar1]);
}
$this->Covariance[$Ask1."-".$Ask2] = $Covariance/(count($this->TabVal[$Ask2])) - ($this->Moyenne[$Ask2])*($this->Moyenne[$Ask1]);
return $this->Covariance[$Ask1."-".$Ask2] ;
}
else
{
throw new myException ('Dimension des tableaux '.$Ask1.' (dim ='.count($this->TabVal[$Ask1]).') et '.$Ask2.' (dim ='.count($this->TabVal[$Ask2]).') differente');
}
}
catch (MyException $e)
{echo $e -> getError(999);}
}
//------------------------------------------------------------------------
//----------------- Calcul de l'équation de la droite --------------------
//------------------------------------------------------------------------
function F_EquDrte($Ask1, $Ask2)
{
// Vérification de la présence des données nécessaires
if (!isset($this->Moyenne[$Ask1]) ) {$this->F_Moyenne($Ask1);}
if (!isset($this->Moyenne[$Ask2])){$this->F_Moyenne($Ask2);}
if (!isset($this->Covariance[$Ask1."-".$Ask2])) {$this->F_Covariance($Ask1, $Ask2);}
if (!isset($this->Variance[$Ask1])) {$this->F_Variance($Ask1);}
if (!isset($this->Variance[$Ask2])) {$this->F_Variance($Ask2);}
// Calcul de la pente
if ($this->Variance[$Ask1])
{
$this->Pente[$Ask1."-".$Ask2] = round($this->Covariance[$Ask1."-".$Ask2]/($this->Variance[$Ask1]),5);
// Calcul de l'ordonnée à l'origine
$this->Ord[$Ask1."-".$Ask2] = round($this->Moyenne[$Ask2]-($this->Covariance[$Ask1."-".$Ask2]/$this->Variance[$Ask1])*($this->Moyenne[$Ask1]),5);
}
}
//------------------------------------------------------------------------
//------------------------ Calcul de regression --------------------------
//------------------------------------------------------------------------
function F_R2($Ask1, $Ask2)
{
if (!isset($this->Covariance[$Ask1."-".$Ask2])) {$this->F_Covariance($Ask1, $Ask2);}
if (!isset($this->Variance[$Ask1])) {$this->F_Variance($Ask1);}
if (!isset($this->Variance[$Ask2])) {$this->F_Variance($Ask2);}
if ($this->Variance[$Ask1] && $this->Variance[$Ask2]) {$this->R2[$Ask1."-".$Ask2] = pow($this->Covariance[$Ask1."-".$Ask2]/(sqrt($this->Variance[$Ask2])*sqrt($this->Variance[$Ask1])),2); }
}
//------------------------------------------------------------------------
//------------------- Calcul de coeff de determination -------------------
//------------------------------------------------------------------------
function F_R($Ask1, $Ask2)
{
if (!isset($this->Covariance[$Ask1."-".$Ask2])) {$this->F_Covariance($Ask1, $Ask2);}
if (!isset($this->Variance[$Ask1])) { $this->F_Variance($Ask1);}
if (!isset($this->Variance[$Ask2])) { $this->F_Variance($Ask2);}
if ($this->Variance[$Ask1] && $this->Variance[$Ask2]) {$this->R[$Ask1."-".$Ask2] = $this->Covariance[$Ask1."-".$Ask2]/(sqrt($this->Variance[$Ask2])*sqrt($this->Variance[$Ask1]));}
}
//------------------------------------------------------------------------
//------------------- Calcul de l'erreur sur la pente -------------------
//------------------------------------------------------------------------
function F_ERROR($Ask1, $Ask2)
{
if (!isset($this->Pente[$Ask1."-".$Ask2]) && !isset($this->Ord[$Ask1."-".$Ask2])){ $this->F_EquDrte($Ask1, $Ask2);}
$Count = count($this->TabVal[$Ask1]);
$error = 0;
for ($Ivar1=0; $Ivar1 <= $Count-1; $Ivar1++)
{
$error += pow($this->TabVal[$Ask2][$Ivar1] -($this->TabVal[$Ask1][$Ivar1]*$this->Pente[$Ask1."-".$Ask2]+$this->Ord[$Ask1."-".$Ask2]),2);
}
echo "Erreur sur a : ".sqrt($error/($Count));
}
};
//------------------------------------------------------------------------
//------------------------------- Interface rapide ------------------------
//------------------------------------------------------------------------
$Debug=(isset($_GET['Debug'])) ? $_GET['Debug'] : "";
$Val=(isset($_GET['Val'])) ? $_GET['Val'] : "5";
?>
<body> <form method="POST" action="Stat%20(revised).php?Val=<?php echo $Val; if ($Debug == "1") {echo "&Debug=1";}; ?>">
<center>
<H1>Interpolation</H1>
<table border="6" cellpadding="3"><tr><td>
<table>
<tr align="center"><td>x</td><td>y</td></tr>
<?php
define("MAXVAL", $Val);
$Count = 0;
// Récupération des valeurs
for ($Ivar2 = 0; $Ivar2 <= MAXVAL; $Ivar2++)
{
$x[$Ivar2]=(isset($_POST['x'.$Ivar2]) && $_POST['x'.$Ivar2] != "") ? $_POST['x'.$Ivar2] : "";
$y[$Ivar2]=(isset($_POST['y'.$Ivar2]) && $_POST['y'.$Ivar2] != "") ? $_POST['y'.$Ivar2] :"";
};
// Ecriture du tableau
for ($Ivar1 = 0; $Ivar1 <= MAXVAL; $Ivar1++)
{ echo '<tr><td><INPUT type="TEXT" name="x'.$Ivar1.'" value="'.$x[$Ivar1].'"></td><td><INPUT type="TEXT" name="y'.$Ivar1.'" value="'.$y[$Ivar1].'"></td></tr>'; };
?>
</table>
<input type="SUBMIT" value="ok"/>
</form>
</td><td>
<?php
?>
</td></tr></table>
<?php
$Reg = new Statistiques;
if ($x[0] && $y[0]) {$Reg -> F_AddVal($x,0);
echo $Reg -> F_AddVal($y,1);
echo '<table border="1"><tr><td>Moyenne : </td>';
foreach (($Reg -> F_Moyenne(-1) ) as $tab)
{
echo "<td>".round($tab,5)."</td>";
};
echo "</tr><tr><td>Mediane : </td>";
foreach (($Reg -> F_Mediane(-1) ) as $tab)
{
echo "<td>".round($tab,5)."</td>";
};
echo "</tr><tr><td>Ecart Moyen : </td>";
foreach (($Reg -> F_EcartMoy(-1) ) as $tab)
{
echo "<td>".round($tab,5)."</td>";
};
echo "</tr><tr><td>Variance : </td>";
foreach (($Reg -> F_Variance(-1) ) as $tab)
{
echo "<td>".round($tab,5)."</td>";
};
echo "</tr><tr><td>Ecart type : </td>";
foreach (($Reg -> F_EcartType(-1) ) as $tab)
{
echo "<td>".round($tab,5)."</td>";
};
echo "</tr></table><br/>";
echo "<table><tr><td></td><td>Interpolation linéaire</td></tr>";
echo "<tr><td>Covariance : </td><td>".($Reg -> F_Covariance(0,1))."</td></tr>";
echo "<tr><td>Regression lineaire : </td>";
$Reg ->F_EquDrte(0,1);
echo "<td>".($Reg->Pente["0-1"])."x +".($Reg->Ord["0-1"])." </td>";
$Reg ->F_R2(0,1);
$Reg ->F_R(0,1);
echo "<tr><td>R2 : </td><td>".($Reg -> R2["0-1"])."</td></tr>";
echo "<tr><td>R : </td><td>".($Reg -> R["0-1"])."</td></tr>";
echo "</tr></table>";
echo "<br/><br/>";
echo $Reg -> F_ERROR(0, 1);
echo "<br/>";
};
?>
</center>
</BODY>
</html>
Conclusion
Voilà. Pour l'instant je n'arrive pas à installer la librairie GD donc faudra attendre pour les graphiques. Les critiques constructives sont ouvertes
Historique
- 20 février 2008 19:25:01 :
- Voila, j'ai réussi à intégrer les exceptions. C'est la 1ere fois que je le fais, donc ca risque d'être maladroit. A vous de noter ;P
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Statistiques [ par Sniperman113 ]
Bonjour,Je voudrai créer un script de statistiques (notamment bénéfices des 30 derniers jours) sous forme graphique. Par exemple dans l'idéal, il faud
Pb requête dans PHP [ par Ma2004 ]
Bonjour à tous,J'ai un petit souci avec une de mes requêtes et plus précisément la requête suivante:$requete=mysql_query("SELECT * FROM $gauche,$droit
générer des statistiques graphiques a partir d'un fichier xml [ par ammar_emi ]
|