Le teste KHI-2

cs_NourElhoudaa Messages postés 15 Date d'inscription mardi 6 mars 2012 Statut Membre Dernière intervention 18 décembre 2012 - 30 nov. 2012 à 18:24
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 11 déc. 2012 à 08:31
je veut crié un teste KHI-2 sur [a,b] j'ai essaie avec se programme:
package prob.khi2;
import java.util.HashMap;
import java.util.LinkedList;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

import prob.generator.Generator;

/**
*
*/

/**
* Cette classe assure le calcul du Khi2
* @author CnCBoy
*/
public class CalculKhi2 {

/**
* Pour l'appel de CollecterDonne sans argument
*/
public static int NB_TEST_DEFAUT = 300;

/**
* Pour l'appel de CollecterDonne sans argument
*/
public static int NB_CLASS_DEFAUT = 10;

private static int SERIE_THEORIQUE =0;

private static int SERIE_REELLE =1;

/**
* Donnee de collecte
* Serie 1 Valeur Theorique, Serie 2 Valeur Reele
*/
private XYSeriesCollection dataset;

/**
* Generateur mis à l'epreuve
*/
private Generator gen;

/**
* Utilise un generateur pour la mise à l'epreuve
* @param gen
*/
public CalculKhi2(Generator gen){
this.gen = gen;
}

/***
* Effectue l'epreuve sur le nombre de resultat par defaut
*/
public void CollecterDonnee(){
CollecterDonnee(NB_TEST_DEFAUT,NB_CLASS_DEFAUT);
}

/**
* Effectue l'epreuve sur le nombre de resultat nbTest
* @param nbTest Nombre de test à faire
* @param nbClass Nombre de classe utilisé
*/
public void CollecterDonnee(int nbTest, int nbClass){

//Largeur de chaque classe
double classWidth= (gen.getMaxSupport()-gen.getMinSupport())/nbClass;

//Serie des valeurs theoriques
XYSeries serieTheo = new XYSeries("theorique");

//Serie des valeurs theoriques
XYSeries serieExp = new XYSeries("experimental");

//Classeur des valeurs experimentale
HashMap> classeurExp
= new HashMap>(nbClass);

//Collecte des valeurs theoriques
for (Integer i = 0; i < nbClass; i++){
//Mediane de la classe (debut support + mediane de la classe + largeur)
double mediane = gen.getMinSupport()+classWidth/2.0+classWidth*i;
//Valeur inferieure et superieure pour
//la valeur moyenne de probabilite sur ce segment
double vInf = gen.getTheory(gen.getMinSupport()+classWidth*i);
double vSup = gen.getTheory(gen.getMinSupport()+classWidth*(i+1));
serieTheo.add(mediane,(vInf+vSup)/2.0);
//Ajout de la clef (Valeur i pour eviter les pb d'arrondis)
classeurExp.put(i,new LinkedList<Double>());
}

//Tirage aleatoire et rangement en classe
for(int i=0; i<nbTest; i++){
double value = gen.nextDouble();

//Test pour chaque tranche pour contourner
//des problème d'arrondis flottant en cas de division
//Classe ou l'on range l'element

int nClass=0;
//Protection pour eviter de sortir du support
while(nClass<=nbClass &&
!(value>=gen.getMinSupport()+nClass*classWidth
&& value <= gen.getMinSupport()+(nClass+1)*classWidth)){
nClass++;
}
//System.out.println(nClass+" " + value);
if (nClass<nbClass){
classeurExp.get(nClass).add(value);
}
}

//Calcul de la probabilite cumulé de chaque classe
double cumul =0;
for (int i = 0; i < nbClass; i++){
cumul += classeurExp.get(i).size();
serieExp.add(gen.getMinSupport()+i*classWidth+classWidth/2.0,cumul/(double)nbTest);
}

/*for(int i =0; i < serieTheo.getItemCount(); i++){
System.out.println(serieTheo.getX(i)+";"+serieTheo.getY(i));

}*/

dataset = new XYSeriesCollection();
dataset.addSeries(serieTheo); //0
//dataset.addSeries(serieExp); //0
dataset.addSeries(serieExp); //1
}

public double getKhi2(){

double Khi2 = 0;

for(int cptP = 0; cptP<dataset.getSeries(SERIE_THEORIQUE).getItemCount(); cptP++ ){
double attendu = (Double) dataset.getSeries(SERIE_THEORIQUE).getY(cptP);
double observe = (Double) dataset.getSeries(SERIE_REELLE).getY(cptP);

Khi2+= Math.pow(observe-attendu,2)/attendu;
}

return Khi2;
}

public ChartPanel RetournerGraphique(){
// create the chart...
JFreeChart chart = ChartFactory.createXYLineChart(
"Line Chart Demo 6", // chart title
"X", // x axis label
"Y", // y axis label
dataset, // data
PlotOrientation.VERTICAL,
true, // include legend
true, // tooltips
false // urls
);
chart.setAntiAlias(false);

return new ChartPanel(chart);

}
}
il m'affiche des erreur je ne sait pas pourquoi!!
svp aide moi par des proposition
remarque: j’utilise eclipse comme envirenement

4 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
30 nov. 2012 à 19:08
SAlut,

Peux tu nous donner la trace de tes erreurs ?
0
cs_NourElhoudaa Messages postés 15 Date d'inscription mardi 6 mars 2012 Statut Membre Dernière intervention 18 décembre 2012
30 nov. 2012 à 19:23
salut,
ok!! le programme est plain des erreurs . . par exemple au niveau de la bibliothèque org.jfree.*
elle n'es pas connus par l'eclipse
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
3 déc. 2012 à 08:49
Je n'avais pas lu le code, mais manifestement, tu n'utilises pas d'ide.

Commences donc pas télécharger éclipse par exemple, et tu verras d'où viennent tes erreurs.
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
11 déc. 2012 à 08:31
Alors, où en es tu ?
0
Rejoignez-nous