Teste du khi-deux/chi-deux d'indépendance

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 022 fois - Téléchargée 1 356 fois

Contenu du snippet

Définition wikipédia : Le test du khi2 (prononcer « khi-deux » ou « khi carré », qu'on écrit également à l'anglaise « chi-deux » ou « chi carré ») permet, partant d'une hypothèse et d'un risque supposé au départ, de rejeter l'hypothèse si la distance entre deux ensembles d'informations est jugée excessive. Un test d'indépendance porte sur des données qualitatives.
Plus d'infos : http://fr.wikipedia.org/wiki/Test_du_%CF%87%C2%B2

Lien en ligne : http://testchideux.awardspace.info
A ce même lien vous trouverez :
- Une classe PHP 5, plus facile à implanter
- Sinon, vous pourrez toujours faire un teste gratuit

Source / Exemple :


<?php
$_SESSION['temp'] = serialize(array('colonne'=>$_POST['colonne'], 'ligne'=>$_POST['ligne'], 'dec'=> $_POST['dec']));
?>

<?php

$temp = unserialize($_SESSION['temp']);

	$carre = 0;
	
	$chi2 = $totaux_contingent = $totaux_theorique  = 0;
	
	$total_colums_obs = $total_lines_obs = 0;
	$total_colums_theor = $total_lines_theor = 0;
	$total_colums_chi = $total_lines_chi = 0;
	
	$Save_total_colums_obs = $Save_total_lines_obs = array();
	$Save_total_colums_theor = $Save_total_lines_theor = array();
	$Save_total_colums_chi = $Save_total_lines_chi = array();
	
	$valeur_theorique = array();
	$valeur_chi = array();
	
/* Fournit le degré de liberté */	
$ddl = ($temp['ligne'] - 1)*($temp['colonne'] - 1); 
	
	
/* Attribue directement zéro au élément vide */	
	foreach($_POST['field'] as $key=> $value)
	{
		($value==null) ? $_POST['field'][$key]=0 : $_POST['field'][$key]=(int)$value;
	}
	

/* Fournit le Total des valeurs observés de chaque lignes */	
	$i=0;
	foreach($_POST['field'] as $value)
	{
		if($i<$temp['ligne'])
		{
			$total_lines_obs = $value + $total_lines_obs;
			$i++;
		}
			if($i==$temp['ligne'])
			{
				$Save_total_lines_obs[] = $total_lines_obs;
				$i = $total_lines_obs = 0;
			}
	}

	
/* Fournit le Total des valeurs observés de chaque colonnes*/	
	for($j=0; $j<$temp['colonne']; $j++)
	{
		$key = $j;
			for($i=0; $i<$temp['ligne']; $i++)
			{
				$total_colums_obs = $_POST['field'][$key] + $total_colums_obs;
				$key += $temp['colonne'];
			}	
		$Save_total_colums_obs[] = $total_colums_obs;
		$total_colums_obs = 0;
	}	
			
	
/* Fournit le Total des Totaux des valeurs observés */	
	if( array_sum($Save_total_lines_obs) == array_sum($Save_total_colums_obs) )
	{	
		$totaux_contingent = round(array_sum($Save_total_lines_obs), $temp['dec']);
	}	
	else
	{
		print 'Le Total des totaux par colonnes et par lignes des valeurs observés, semblent ne pas correspondre ! ';
		exit();
	}	
	
	
/* Fournit les valeurs théoriques */	
	if($totaux_contingent != 0)	
	{	
		for($j=0; $j<$temp['colonne']; $j++)
		{
			for($i=0; $i<$temp['ligne']; $i++)
			{
				$valeur_theorique[] = round((($Save_total_lines_obs[$j]*$Save_total_colums_obs[$i])/$totaux_contingent), $temp['dec']); 
			}
		}
	}
	else
	{ 
		print 'Le Total général des valeurs observés est null, la suite des calculs ne peut être effectuer ! '; 
		exit; 
	}

/* Fournit le Total des valeurs théoriques de chaque lignes */	
	$i=0;
	foreach($valeur_theorique as $value)
	{
		if($i<$temp['ligne'])
		{
			$total_lines_theor = $value + $total_lines_theor;
			$i++;
		}
			if($i==$temp['ligne'])
			{
				$Save_total_lines_theor[] = $total_lines_theor;
				$i = $total_lines_theor = 0;
			}
	}

	
/* Fournit le Total des valeurs théoriques de chaque colonnes*/	
	for($j=0; $j<$temp['colonne']; $j++)
	{
		$key = $j;
			for($i=0; $i<$temp['ligne']; $i++)
			{
				$total_colums_theor = $valeur_theorique[$key] + $total_colums_theor;
				$key += $temp['colonne'];
			}	
		$Save_total_colums_theor[] = $total_colums_theor;
		$total_colums_theor = 0;
	}	
	
	
/* Fournit le Total des Totaux des valeurs théoriques */	
	if( array_sum($Save_total_lines_theor) == array_sum($Save_total_colums_theor) )
	{	
		$totaux_theorique = round(array_sum($Save_total_lines_theor), $temp['dec']);
	}	
	else
	{
		print 'Le Total des totaux par colonnes et par lignes des valeurs théoriques, semblent ne pas correspondre ! ';
		exit();
	}	
	
/* Fournit les valeurs chis partiels */	
	foreach($_POST['field'] as $key => $value)
	{
		if($valeur_theorique[$key]!=0)
		{
			$carre = pow(($_POST['field'][$key] - $valeur_theorique[$key]),2)/$valeur_theorique[$key];
			$valeur_chi[] = round($carre, $temp['dec']);
		}
		else
		{
			$valeur_chi[] = 0;
		}
	}
	
	
/* Fournit le Total des valeurs chis de chaque lignes */	
	$i=0;
	foreach($valeur_chi as $value)
	{
		if($i<$temp['ligne'])
		{
			$total_lines_chi = $value + $total_lines_chi;
			$i++;
		}
			if($i==$temp['ligne'])
			{
				$Save_total_lines_chi[] = $total_lines_chi;
				$i = $total_lines_chi = 0;
			}
	}

	
/* Fournit le Total des valeurs chis de chaque colonnes*/	
	for($j=0; $j<$temp['colonne']; $j++)
	{
		$key = $j;
			for($i=0; $i<$temp['ligne']; $i++)
			{
				$total_colums_chi = $valeur_chi[$key] + $total_colums_chi;
				$key += $temp['colonne'];
			}	
		$Save_total_colums_chi[] = $total_colums_chi;
		$total_colums_chi = 0;
	}	
	
	
/* Fournit le Total des Totaux des valeurs chis soit le CHI2 */	
	if( array_sum($Save_total_lines_chi) == array_sum($Save_total_colums_chi) )
	{	
		$chi2 = round(array_sum($Save_total_lines_chi), $temp['dec']);
	}	
	else
	{
		print 'Le Total des totaux par colonnes et par lignes des valeurs chis, semblent ne pas correspondre ! ';
		exit();
	}	
?>

Conclusion :


Les éléments nécessaires aux calculs du chi2 sont :
- Nombre de ligne du tableau '$_POST['ligne']'
- Nombre de colonne du tableau '$_POST['colonne']'
- Nombre de décimale '$_POST['dec']'
Vous devrez donc les fournir et les serialisés dans une $_SESSION['temp'] ou pas selon vos préférences

Vous aurez le degré de liberté '$ddl' calculer en début de script et le chi2 '$chi2' calculer en fin de script

A voir également

Ajouter un commentaire

Commentaires

Messages postés
12
Date d'inscription
lundi 26 novembre 2007
Statut
Membre
Dernière intervention
10 décembre 2010

Oui c'est bien ce qui me semblait.
Je rappelle que le chi deux test l'indépendance entre deux variables, donc forcément on utilise un tableau à deux dimensions.

En tout cas merci pour le script, il m'a été fort utile!
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
29
"Normalement ca doit être un tableau à deux dimensions, et tu le parcours avec une seul boucle...je vois pas comment ça marche." Ici, non ce n'est pas a deux dimensions... Par contre, comme indiquer dans la desciption :::
Lien en ligne : http://testchideux.awardspace.info
Vous y aussi trouverez la source coder en tableaux multidimensionnels
Messages postés
12
Date d'inscription
lundi 26 novembre 2007
Statut
Membre
Dernière intervention
10 décembre 2010

J'ai l'impression que les données sont entrées grâce au $_POST['field'] mais je ne comprend pas du tout comment tu le parcours...
Normalement ca doit être un tableau à deux dimensions, et tu le parcours avec une seul boucle...je vois pas comment ça marche.

Froll

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.