// Elie Sadaka novembre 2006

// jview  Statistic

// cd C:\Documents and Settings\Elie Sadaka\My Documents\Java-Statistic

import java.util.*; import java.applet.*; import java.awt.*;

public class Statistic extends Applet{

public int N; // effectif total public double pr1[]; public double pr2[]; public double coeff[][];

public Statistic(int N1){
N=N1;
pr1=
new double[N1];
pr2=
new double[N1];
coeff =
new double[N1][N1];

}

public Statistic(double[] pr1t,double[] pr2t){
N=pr1t.length ;
pr1=
new double[pr1t.length];
pr2=
new double[pr2t.length];
coeff =
new double[pr1t.length][pr1t.length];

}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Minimum de la série
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double minX(double[] a){
double m = a[0];  
for (int i=1; i<a.length; i++){  

if (m > a[i]) m = a[i];
}
return m;

}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Extraire le Minimum de la série
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double[] extractMinX(double[] a){
double m = a[0];
double[] b = new double[a.length-1];
int j=0;

//localiser le n° du min

for (int i=1; i<a.length; i++) { 

if (m > a[i]) {
m = a[i];
j=i;

}
}

for (int i=0; i<j; i++) {

b[i]=a[i];
}
for (int i=j; i<a.length-1; i++) { 

b[i]=a[i+1];
}
return b;

}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// ajouter à la fin de la série
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double[] addEndX(double v,double[] a){
double[] b = new long[a.length+1];
for (int i=0; i<a.length; i++) {

b[i]=a[i];

}
b[a.length] = v;
return b;

}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Maximum de la série
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double maxX(double[] a){
double m = a[0];  
for (int i=1; i<a.length; i++) { 

if (m < a[i]) m = a[i];
}
return m;

}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Ordonner la série
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double[] ordonneInc(double[] a){
double[] b = new double[a.length];
int d=a.length; 
double temp=0;
for(int i = 0; i < d ;i++){

temp=minX(a);
a = extractMinX(a); 
b[i] = temp;

}
return b;

}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// card ensemble de la série
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static int cardEnsemble(double[] a){
double[] b = ordonneInc(a);
int d = a.length;
int temp = 1;
for(int i = 1; i < a.length ;i++){

if(b[i-1]!= b[i]) temp++;
}
return temp;
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// première coordonnée de la série double
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double[] pr1X(double[][] a){
double[] b = new double[a.length];
int d=a.length;

for(int i = 0; i < d ;i++){ 

b[i] = a[i][0];
}
return b;

}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// deuxième coordonnée de la série double
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double[] pr2X(double[][] a){
double[] b = new double[a.length];
int d=a.length;
for(int i = 0; i < d ;i++){

b[i] = a[i][1];

}
return b;
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// les fréquences de la série
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double[][] frequenceX(double[] a){
int d = cardEnsemble(a);
double[] b = ordonneInc(a);
double[][] temp = new double[d][2];

double c=1.0;
double k=0;
int f=0;
for(int i = 0; i < b.length-1 ;i++){

if(b[i+1]!=b[i]) {
temp[f][0]= b[i];
temp[f][1] = c;
f++;
c = 0;

}
c= c+1; 
//compteur d'une classe

}
temp[d-1][0]= b[b.length-1];
temp[d-1][1] = c;

return temp;
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// le mode de la série
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double modeX(double[] a){
int d = pr2X(frequenceX(a)).length;
double r = maxX(pr2X(frequenceX(a)));
double temp=0;
int c=0;
for (int i=0; i<d; i++){

if(frequenceX(a)[i][1]== r){
temp = frequenceX(a)[i][0];
c++;

}
}
if(c==1) return  temp; else return maxX(a)*10;

}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Formater la donnée pour l'affichage static
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static String toString(double[] a){
String data =" ";
for (int i=0; i<a.length; i++){

data += a[i]+" ";
}
data +=
"\n";

return data;
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Formater la série double fréquence
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static String toString(double[][] a){
String data =" ";
for (int i=0; i<a.length; i++){

data += " ("+ a[i][0]+";"+a[i][1]+"); ";
}
data +=
"\n";

return data;
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// q1 de la série double
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double q1X(double[] a){
return ordonneInc(a)[(int)(a.length/4)];
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// q2 de la série double
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double q2X(double[] a){
return ordonneInc(a)[(int)(a.length/2)];
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// q3 de la série double

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double q3X(double[] a){
return ordonneInc(a)[(int)(3*a.length/4)];
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// d1 de la série double
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double d1X(double[] a){
return ordonneInc(a)[(int)(1*a.length/10)];
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// d2 de la série double
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double d2X(double[] a){
return ordonneInc(a)[(int)(2*a.length/10)];
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// d3 de la série double
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double d3X(double[] a){
return ordonneInc(a)[(int)(3*a.length/10)];
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// d4 de la série double
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double d4X(double[] a){
return ordonneInc(a)[(int)(4*a.length/10)];
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// d6 de la série double
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double d6X(double[] a){
return ordonneInc(a)[(int)(6*a.length/10)];
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// d7 de la série double
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double d7X(double[] a){
return ordonneInc(a)[(int)(7*a.length/10)];
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// d8 de la série double
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double d8X(double[] a){
return ordonneInc(a)[(int)(8*a.length/10)];
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// d1 de la série
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double d9X(double[] a){
return ordonneInc(a)[(int)(9*a.length/10)];
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// la moyenne de la série
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double moyenneX(double[] a){
double S=0;
for (int i=0; i<a.length; i++){
S += a[i];}
return S/a.length;
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// la série centrée
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double[] centreX(double[] a){
double[] b=new double[a.length];
for (int i=0; i<a.length; i++){

b[i]= a[i] - moyenneX(a);
}
return b;
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// la série centrée carrée
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double[] centreCarreX(double[] a){
double[] b=new double[a.length];
for (int i=0; i<a.length; i++){
b[i]= (a[i]-moyenneX(a))*(a[i]- moyenneX(a));
}
return b;
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// la variance de la série
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double varianceX(double[] a){
return moyenneX(centreCarreX(a));
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// l'écart type de la série
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double sdX(double[] a){
return Math.sqrt(varianceX(a));
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// premier intervalle de confidence de la série
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static String confidence1X(double[] a){
return "["+precision( moyenneX(a)-sdX(a),2)+
" ; "+ precision( moyenneX(a)+sdX(a),2)+"]";
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// pourcentage du premier intervalle de confidence de la série
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double pourcent1X(double[] a){
int temp=0;
for (int i=0; i<a.length; i++){

if((moyenneX(a)-sdX(a))<=a[i] && a[i]<=(moyenneX(a)+sdX(a))) temp++; 

}return 100*temp/a.length;

}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// second intervalle de confidence de la série
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static String confidence2X(double[] a){
return "["+precision( moyenneX(a)-2*sdX(a),2)+
" ; "+ precision( moyenneX(a)+2*sdX(a),2)+"]";
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// pourcentage du second intervalle de confidence de la série
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double pourcent2X(double[] a){
int temp=0;
for (int i=0; i<a.length; i++){

if((moyenneX(a)-2*sdX(a))<=a[i] && a[i]<=(moyenneX(a)+2*sdX(a))) temp++;  }return 100*temp/a.length;

}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// troisième intervalle de confidence de la série
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static String confidence3X(double[] a){
return "["+precision( moyenneX(a)-3*sdX(a),2)+
" ; "+ precision( moyenneX(a)+3*sdX(a),2)+"]";
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// pourcentage du troisième intervalle de confidence de la série
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double  pourcent3X(double[] a){
int temp=0;
for (int i=0; i<a.length; i++){

if((moyenneX(a)-3*sdX(a))<=a[i] && a[i]<=(moyenneX(a)+3*sdX(a))) temp++;  }return 100*temp/a.length;

}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// triplet pour la normalité de la série
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double precision(double x, int digi ){
return (int)(Math.pow(10,digi)*x)/Math.pow(10,digi);
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// conversion string int
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static int sti(String st) {
return Integer.parseInt(st);
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
// conversion string double
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static double std(String st) {
Double ast;
ast =
Double.valueOf(st);
return ast.doubleValue();

}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - -
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - -

public static void main (String arg[]){
double  a[] = {8,7,6,5,1,2,3,4,5,3,4,4,3,4};

System.out.println(toString(a));

System.out.println(toString(ordonneInc(a))); 

//System.out.println(""+ cardEnsemble(a));

System.out.println(toString(frequenceX(a)));

//System.out.println(toString(pr1X(frequenceX(a))));
//System.out.println(toString(pr2X(frequenceX(a))));
//System.out.println("" + maxX(a));

System.out.println("Mode = (pas de mode si la reponse depasse le max) " + modeX(a));

System.out.println(""+ precision(q1X(a),2));
System.out.println(""+ q2X(a));
System.out.println(""+ q3X(a));
System.out.println(""+precision(moyenneX(a),2));
System.out.println(""+precision(varianceX(a) ,2));
System.out.println(""+precision(sdX(a),2));
System.out.println(confidence1X(a));
System.out.println(confidence2X(a));
System.out.println(confidence3X(a));

System.out.println(" " + pourcent1X(a));
System.out.println(" " + pourcent2X(a));
System.out.println(" " + pourcent3X(a));
}

}