Commit 45f5cea9 authored by pfreon's avatar pfreon
Browse files

Minor change in Cadre_Question.java

Addition d'une condition pour faire apparaitre le message "Your data set is not appropriate for this model (see statistical results in the'Current Known facts' table.)": ne peut apparaitre que si le numéro de question est >6. Sinon seul un message spécifique à la question est affiché.
parent b9630b8a
Years;Production;Effort;Environment
1969; 332.4; 146.5; 4000000.4
1970; 285.5; 127.6; 4000000.32
1971; 306.7; 130.34; 4000000.7
1972; 537.2; 208.06; 5000000.63
1973; 599.4; 243.66; 5000000.53
1974; 692.5; 386.44; 5000000.76
1975; 612.9; 320.22; 5000000.66
1976; 809.4; 413.17; 5000000.79
1977; 776.0; 430.39; 5000000.72
1978; 764.0; 509.67; 5000000.21
1979; 694.7; 461.9; 4000000.68
1980; 702.4; 398.41; 4000000.98
1981; 788.7; 535.44; 5000000.09
1982; 688.0; 551.61; 4000000.86
1983; 719.7; 720.42; 4000000.6
1984; 677.3; 631.72; 4000000.67
1985; 845.03; 807.1; 5000000.38
1986; 958.43; 760.06; 5000000.44
1987; 1203.9; 1100.92; 4000000.92
Years;Production;Effort;Environment
1969; 332.4; 146.5; 400000.4
1970; 285.5; 127.6; 40000.32
1971; 306.7; 130.34; 400000.7
1972; 537.2; 208.06; 500000.63
1973; 599.4; 243.66; 500000.53
1974; 692.5; 386.44; 500000.76
1975; 612.9; 320.22; 500000.66
1976; 809.4; 413.17; 500000.79
1977; 776.0; 430.39; 500000.72
1978; 764.0; 509.67; 500000.21
1979; 694.7; 461.9; 400000.68
1980; 702.4; 398.41; 400000.98
1981; 788.7; 535.44; 500000.09
1982; 688.0; 551.61; 400000.86
1983; 719.7; 720.42; 400000.6
1984; 677.3; 631.72; 400000.67
1985; 845.03; 807.1; 500000.38
1986; 958.43; 760.06; 500000.44
1987; 1203.9; 1100.92; 400000.92
compile.on.save=true
do.depend=false
do.jar=true
do.jlink=false
javac.debug=true
javadoc.preview=true
jlink.strip=false
user.properties.file=C:\\Users\\pfreon\\AppData\\Roaming\\NetBeans\\11.3\\build.properties
......@@ -4,6 +4,14 @@
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
<group>
<file>file:/E:/CLIMPROD_Git2/climprod/src/fr/ird/climprod/Data.java</file>
<file>file:/E:/CLIMPROD_Git2/climprod/src/fr/ird/climprod/Cadre_Plot.java</file>
<file>file:/E:/CLIMPROD_Git2/climprod/src/fr/ird/climprod/CadreMain.java</file>
<file>file:/E:/CLIMPROD_Git2/climprod/nbproject/build-impl.xml</file>
<file>file:/E:/CLIMPROD_Git2/climprod/src/fr/ird/climprod/Modele.java</file>
<file>file:/E:/CLIMPROD_Git2/climprod/src/fr/ird/climprod/Cadre_Modele.java</file>
<file>file:/E:/CLIMPROD_Git2/climprod/src/fr/ird/climprod/Validation.java</file>
<file>file:/E:/CLIMPROD_Git2/climprod/src/fr/ird/climprod/Cadre_Question.java</file>
<file>file:/E:/CLIMPROD_Git2/climprod/src/fr/ird/climprod/UtilCadre.java</file>
</group>
</open-files>
......
......@@ -38,6 +38,7 @@ javac.classpath=
# Space-separated list of extra javac options
javac.compilerargs=-Xlint:unchecked -Xlint:deprecation
javac.deprecation=true
javac.external.vm=false
javac.modulepath=
javac.processormodulepath=
javac.processorpath=\
......@@ -54,6 +55,7 @@ javac.test.processorpath=\
javadoc.additionalparam=
javadoc.author=false
javadoc.encoding=${source.encoding}
javadoc.html5=false
javadoc.noindex=false
javadoc.nonavbar=false
javadoc.notree=false
......@@ -62,6 +64,8 @@ javadoc.splitindex=true
javadoc.use=true
javadoc.version=false
javadoc.windowtitle=
jlink.launcher=false
jlink.launcher.name=Climprod5
main.class=fr.ird.climprod.Main
manifest.file=manifest.mf
meta.inf.dir=${src.dir}/META-INF
......
......@@ -226,7 +226,7 @@ public class CadreMain extends JFrame {
});
menuPlotBivariate.setEnabled(false);
menuPlotBivariate.setMnemonic(KeyEvent.VK_B);
menuPlotBivariate.setText("Bivariates plots");
menuPlotBivariate.setText("Bivariate plots");
menuPlotBivariate.addActionListener(new java.awt.event.ActionListener() {
@Override
......
......@@ -46,7 +46,7 @@ public class Cadre_Question extends JFrame
this.parent = parent;
initWindow();
UtilCadre.Size(this, 30, 30); // remplace 60 par 30 Cadre Questions non-graphiques Test 2020
System.out.println("Définition dans ligne 47 de Cadre_Question.java des Facteurs de réduction (30, 30)(JFrame) par rapport à max (sx et sy ligne 73 UtilCadre.java");// Test 2020
//System.out.println("Définition dans ligne 47 de Cadre_Question.java des Facteurs de réduction (30, 30)(JFrame) par rapport à max (sx et sy ligne 73 UtilCadre.java");// Test 2020
UtilCadre.Centrer(this);
QuestionReponse.reset();
this.loadQuestion(true);
......@@ -407,8 +407,10 @@ public class Cadre_Question extends JFrame
System.out.println("Dans Cadre_Question ligne 406: n° de question numQ = " + numQ + " n° de règle numR = " +numR);
if (numQ == -1)
{
String m$ = "Your data set is not appropriate for this model (see statistical results in the'Current Known facts' table.)";
if (!Global.bavard)
String m$ = ""; // Modif. 2020
if (numR > 6) // Modif. 2020
{m$ = "Your data set is not appropriate for this model (see statistical results in the'Current Known facts' table).";}
if (!Global.bavard)
{
m$ = m$ + "\n" + TexteRegles.getComment();
}
......
......@@ -113,7 +113,10 @@ public class Global {
static double critereAIC; //Akeike
static boolean validationOk; // true si Validation ex�cut�e
static boolean modelisationOk; // true si mod�le ajust�
static int Compteur_erreurs_Jackknife;
static int[] Nb_years_lower100;
static int [] Nb_years_greater100;
static String Texte_erreur_jackknife$;
/**
* *********** Plots ************************
*/
......@@ -256,8 +259,8 @@ public class Global {
public static double gam(double x){
return(Gamma.gamma(x));
}
// f(x) = Γ((n1 + n2)/2) / (Γ(n1/2) Γ(n2/2)) (n1/n2)^(n1/2) x^(n1/2 - 1) (1 + (n1/n2) x)^-(n1 + n2)/2
// Calcul du F de Fisher rajouté par Julien Veyssier
// f(x) = Γ((n1 + n2)/2) / (Γ(n1/2) Γ(n2/2)) (n1/n2)^(n1/2) x^(n1/2 - 1) (1 + (n1/n2) x)^-(n1 + n2)/2 Formule donnée par PF à Julien Veyssier le 21/03/2016
public static double pfisher(double x, double n1, double n2){
//double n1 = 2;
//double n2 = 9;
......
......@@ -852,7 +852,10 @@ public class Modele {
Global.residualsPlot[i].setTitreGraphique(Global.titreG[i + 15]);
Global.residualsPlot[i].setTitreX(Global.titreSx[i + 15]);
Global.residualsPlot[i].setTitreY(Global.titreSy[i + 15]);
Global.residualsPlot[i].ajusteExtremas(false, true, false, false);
// ajusteExtremas de Plot.java: selon valeur booléenne (vrai ou faux) applique ou non l'ajustement
// surX, sur X et met ou non le minimum à zéro sur Y et sur Y
Global.residualsPlot[i].ajusteExtremas(false, false, false, false); // seconde valeur boolénne changée de true en false. Modification 2020
// Cette modification évite un écrasement des valeurs de Y autours de l'axe des X.
Global.residualsPlot[i].setXcutYat(0.0d);
}
......@@ -966,7 +969,7 @@ public class Modele {
}
/*
Donne les principaux r�sultats
Donne les principaux r�sultats dans fenetre "Fit a model directly", sous fenetre de gauche "Modelization: Main results, y compris Akaike
*/
public static Object[][] getResult() {
if (!Global.modelisationOk) {
......@@ -983,11 +986,11 @@ public class Modele {
for (int i = 0; i < nbre_par; i++) {
data$[i + 1][0] = param$[i];
data$[i + 1][1] = nf.format(par_alors[i]);
data$[i + 1][2] = nf.format(par_init[i]);
data$[i + 1][1] = nf.format(par_alors[i]); // Valeur paramètre estimé fin Marquart
data$[i + 1][2] = nf.format(par_init[i]); // Valeur initiale du paramètre début Marquart
}
data$[nbre_par + 1][0] = "Nb. of data used to fit";
data$[nbre_par + 1][1] = Integer.toString(nim);
data$[nbre_par + 1][1] = Integer.toString(nim); // nim = nombre observations
data$[nbre_par + 2][0] = "Nb. of degrees of freedom";
data$[nbre_par + 2][1] = Integer.toString(nim - nbre_par);
data$[nbre_par + 3][0] = "Coefficient of determination R²";
......@@ -995,8 +998,8 @@ public class Modele {
System.out.println("r : "+r+" et globalr : "+Global.coeff_determination);
data$[nbre_par + 4][0] = "Fisher test of R² for F(" + getNbDataRetenue() + "," + Global.nbre_param +")";
data$[nbre_par + 4][1] = Double.toString(Global.pfisher(Global.coeff_determination, getNbDataRetenue(), Global.nbre_param));
data$[nbre_par + 4][0] = "Fisher test of R² for F(" + getNbDataRetenue() + "; " + Global.nbre_param +")"; // Donne entre parenthèses les valeurs du nombre d'observation et de paramètres du modèle pour le test de Fisher sur R2
data$[nbre_par + 4][1] = nf.format(Global.pfisher(Global.coeff_determination, getNbDataRetenue(), Global.nbre_param)); // Valeur tirée du tableau à 3D Global.pfisher
data$[nbre_par + 5][0] = "Fisher threshold";
data$[nbre_par + 5][1] = nf.format(Global.fF(Global.coeff_determination, getNbDataRetenue(), Global.nbre_param));
......
......@@ -97,6 +97,7 @@ public class Plot implements Cloneable {
* @param PlotSerie s.
*/
public void setValeurs(PlotSerie s) {
//System.out.println("Flag PlotSerie s, ligne 100 Plot.java"); // test 2020
int divX = 10;
if (nbSerie == 0) {
extremasSeries[0] = s.getMinX();
......@@ -120,7 +121,7 @@ public class Plot implements Cloneable {
pas[0] = 1;
serieHisto = true;
} else if (!serieHisto) {
// extremasSeries[0]=extremasSeries[0]*.9;
// extremasSeries[0]=extremasSeries[0]*.9;
// extremasSeries[2]=extremasSeries[2]*1.1;
pas[0] = Math.abs((extremasSeries[1] - extremasSeries[0]) / 10);
......@@ -129,8 +130,8 @@ public class Plot implements Cloneable {
}
ajusteExtrema(0, 1);
}
//System.out.println("calcul pas[1] : "+extremasSeries[3]+" et "+extremasSeries[2]);
pas[1] = Math.abs((extremasSeries[3] - extremasSeries[2]) / 10);
//System.out.println("Ligne 133 PlotSerie s, calcul pas[1] extremasSeries[3]= " + extremasSeries[3]+" et extremasSeries[2]= " + extremasSeries[2]); // test 2020
pas[1] = Math.abs((extremasSeries[3] - extremasSeries[2]) / 10); // Le pas sur l'axe des Y (pas[1] est égal à 1/10ème del'étendue, arondi à unité entière. // Commentaire 2020
if (pas[1] > 1) {
pas[1] = Math.round(pas[1] + 0.5);
}
......@@ -290,7 +291,7 @@ public class Plot implements Cloneable {
}
/*
*
* DEFINITION DES MARGES DU GRAPHIQUE. 2020
*/
public void setMarges(double[] newMarges) {
if (newMarges.length != 4) {
......@@ -421,9 +422,9 @@ public class Plot implements Cloneable {
* @return double le maximum sur Y.
*/
public double getMaxAxeY() {
return extremasAxes[3];
// System.out.println("getMaxAxeY() extremasAxes[3] (graphique antérieur), ligne 425 Plot.java = " + extremasAxes[3]); // test 2020
return extremasAxes[3]; // Maximum étiquette axe Y (au moins pour les 4 time series plots du menu principal "Plots"). 2020
}
/*
* Donne le minimun sur l'axe Y du graphique.
*
......@@ -439,9 +440,9 @@ public class Plot implements Cloneable {
* @return double le pas sur Y.
*/
public double getpasY() {
return pas[1];
}
// System.out.println("getpasY(), pas[1](graphique antérieur), ligne 444 Plot.java = " + pas[1]); // test 2020
return pas[1]; // Pas axe Y. 2020
}
/*
* Donne le pas sur l'axe X du graphique.
*
......@@ -500,6 +501,7 @@ public class Plot implements Cloneable {
*/
public void setMaxAxeY(double ext) {
extremasAxes[3] = ext;
// System.out.println("setMaxAxeY() extremasAxes[3], ligne 503 Plot.java = " + extremasAxes[3]); // test 2020
}
/*
......@@ -931,7 +933,8 @@ public class Plot implements Cloneable {
//System.out.println("***lg serie**"+vx.length);
}
switch (typefigure) {
case NuageDePoints:
case NuageDePoints: // Nuage de points X Y (pour bivariate plots et résidus). 2020
Color[] currentColor = s.getCouleurPoints();
if (typemark == 0) {
typemark = 1;
......@@ -1127,10 +1130,13 @@ public class Plot implements Cloneable {
if (Math.abs(pas[p]) < 1.e-5) {
return;
}
extremasAxes[i] = extremasSeries[i];
extremasAxes[j] = extremasSeries[j];
extremasAxes[i] = extremasSeries[i]; // Définition extremasAxes minima < 1; i=0 min X et i=2 min Y. Commentaire 2020
extremasAxes[j] = extremasSeries[j]; // Définition extremasAxes maxima < 1; j=1 max X et j=3 max Y. Commentaire 2020
//System.out.println("ajusteExtrema(), ligne 1133 Plot.java, i="+ i + " extremasAxes[i]= " + extremasAxes[i]);
//System.out.println("ajusteExtrema(), ligne 1133 Plot.java, j="+ j + " extremasAxes[j]= " + extremasAxes[j]);
if (Math.abs(extremasAxes[i]) > 1) {
extremasAxes[i] = Math.round(extremasAxes[i] - 0.5);
extremasAxes[i] = Math.round(extremasAxes[i] - 0.5); // Définition extremasAxes > 1 (=arrondi de valeur). Commentaire 2020
}
if (Math.abs(extremasAxes[j]) > 1) {
extremasAxes[j] = Math.round(extremasAxes[j] + 0.5);
......@@ -1152,9 +1158,11 @@ public class Plot implements Cloneable {
/*
* Ajuste les extremas des axes de telle sorte que les graduations soient
* des multiples de 10.
* des multiples de 10. (PF 2020: c'est un pb pour graphique résidus car amplitude divisée 2 !!!)
*/
public void ajusteExtremas(boolean surX, boolean surY, boolean minzeroSurX, boolean minzeroSurY) {
public void ajusteExtremas(boolean surX, boolean surY, boolean minzeroSurX, boolean minzeroSurY) {
// Selon valeur booléenne (vrai ou faux) applique ou non l'ajustement surX, sur X et met ou non le minimum à zéro sur Y et sur Y
// System.out.println("Flag ajusteExtremas(), ligne 1163 Plot.java"); // test 2020
long[] bornes = {1, 10, 100, 1000, 10000};
int deb;
int fin;
......@@ -1173,21 +1181,25 @@ public class Plot implements Cloneable {
}
for (int i = deb; i < fin; i++) {
// System.out.print("i " + i + "OLD " +extremasSeries[i]);
double extabs = Math.abs(extremasSeries[i]);
double extabs = Math.abs(extremasSeries[i]); // extabs pour extension absolue
// System.out.print("ajusteExtremas(), ligne 1181 Plot.java i =" + i + " extremasSeries[i]=" + extremasSeries[i]);
int index = 4;
if (extabs < 1) {
index = 0;
} else if (extabs < 100) {
} else if (extabs < 100) { // 2020 Pourquoi < 10 n'existe pas?
index = 1;
} else if (extabs < 10000) {
index = 2;
} else if (extabs < 1000000) {
index = 3;
}
// System.out.println("\najusteExtremas(), ligne 1193 Plot.java, index = " + index); // test 2020
double newext = 0;
double modulo = extremasSeries[i] % bornes[index];
double modulo = extremasSeries[i] % bornes[index]; // % = modulo = reste de la division extremasSeries / bornes. Commentaire 2020
// System.out.println("ajusteExtremas(), ligne 1194 Plot.java modulo initial= " + modulo); // test 2020
if (extremasSeries[i] < 0) {
modulo = bornes[index] + (modulo);
modulo = bornes[index] + modulo;
// System.out.println("ajusteExtremas(), extremasSeries[i] < 0 ligne 1196 Plot.java, i= " + i + " index= " + index + " bornes[index]= " + bornes[index] + " modulo final= " + modulo); // test 2020
}
// else
// modulo=bornes[index]-(modulo);
......@@ -1217,9 +1229,9 @@ public class Plot implements Cloneable {
if (minzeroSurY && extremasAxes[2] > 0) {
extremasAxes[2] = 0;
}
pas[0] = (extremasAxes[1] - extremasAxes[0]) / 10;
pas[1] = (extremasAxes[3] - extremasAxes[2]) / 10;
pas[0] = (extremasAxes[1] - extremasAxes[0]) / 10; // extremasAxes[0] min. axe X et extremasAxes[1] max axe X. 2020.
pas[1] = (extremasAxes[3] - extremasAxes[2]) / 10; // extremasAxes[2] min. axe Y et extremasAxes[3] max axe Y. 2020.
// System.out.println("ajusteExtremas(), ligne 1229 Plot.java pas[1]= " + pas[1] + " extremasAxes[2]= " + extremasAxes[2] + " extremasAxes[3]= " + extremasAxes[3]); // test 2020
if (pas[0] > 100) {
this.setDecimalsurX(0);
}
......@@ -1235,7 +1247,7 @@ public class Plot implements Cloneable {
if (nbGraduation <= 0) {
return;
}
double etendue = (extremasAxes[1] - extremasAxes[0]) / nbGraduation;
double etendue = (extremasAxes[1] - extremasAxes[0]) / nbGraduation; // 2020
if (etendue <= 1) {
pas[0] = etendue;
}
......@@ -1411,7 +1423,7 @@ public class Plot implements Cloneable {
}
}
final int NuageDePoints = 1;
final int NuageDePoints = 1; // 2020
final int Courbes = 2;
final int Histogrammes = 3;
final int CourbesModales = 4;
......
......@@ -331,8 +331,8 @@ public static boolean isTrue(){
break;
case 51:
//Global.val_param[2]=2;
System.out.println("Flag_Modele_Lineaire_deja_recherche = " + Flag_Modele_Lineaire_deja_recherche +" Global.relationCPU_E = " + Global.relationCPU_E);
result = (Flag_Modele_Lineaire_deja_recherche!=1 && Global.relationCPU_E==RechercheModele.general && Global.coeff_determination>0.4 && Global.val_param[2]<2.2d && Global.val_param[2]>1.8d);
//System.out.println("Flag_Modele_Lineaire_deja_recherche = " + Flag_Modele_Lineaire_deja_recherche +" Global.relationCPU_E = " + Global.relationCPU_E);
result = (Flag_Modele_Lineaire_deja_recherche!=1 && Global.relationCPU_E==RechercheModele.general && Global.coeff_determination>0.4 && Global.val_param[2]<2.2d && Global.val_param[2]>1.8d);
if (result)
{
Global.relationCPU_E=RechercheModele.lineaire;
......@@ -374,17 +374,18 @@ public static boolean isTrue(){
result = (Global.relationCPU_E==RechercheModele.general && Global.coeff_determination>0.4);
// commentaireEnCours="Oui le modèle est généralisé";
break;
case 56:
case 56:
result = true;
if (Global.CadreJackniffePlots == null) {
//System.out.println("Global.CadreJackniffePlots = " + Global.CadreJackniffePlots);
if (Global.CadreJackniffePlots == null)
{
Cadre_Plot dlg;
dlg = new Cadre_Plot(Global.jackknifePlot);
dlg.setTitle("Climprod : Jackknife plots");
dlg.setVisible(true);
Global.CadreJackniffePlots = dlg;
} else {
Global.CadreJackniffePlots.setVisible(true);
}
}
else {Global.CadreJackniffePlots.setVisible(true);}
break;
case 57:
result = false;
......@@ -401,7 +402,8 @@ public static boolean isTrue(){
commentaireEnCours="From the current rule the model " + RechercheModele.getEquation()+ " is convenient.";
}
else
System.out.println("Global.effort_preponderant= "+Global.effort_preponderant+ " Global.cpue_sous_sur_production= "+Global.cpue_sous_sur_production +" Global.relationCPU_E= "+ Global.relationCPU_E+" Global.coeff_determination= "+Global.coeff_determination); // commentaireEnCours="Model is not convenient because R2 = "+ Global.coeff_determination + " .\n\nYou may still generate a report.";
//System.out.println("Global.effort_preponderant= "+Global.effort_preponderant+ " Global.cpue_sous_sur_production= "+Global.cpue_sous_sur_production +" Global.relationCPU_E= "+ Global.relationCPU_E+" Global.coeff_determination= "+Global.coeff_determination);
commentaireEnCours="The model is not convenient because R2 = "+ Global.coeff_determination + " .\nYou may still generate a report.";
break;
case 6:
result = (Global.effort_preponderant==1 && Global.coeff_determination>0.9);
......@@ -409,7 +411,7 @@ public static boolean isTrue(){
commentaireEnCours="From the current rule the model " + RechercheModele.getEquation()+ " is convenient.";
break;
case 7:
result = (Global.effort_preponderant!=1 && Global.environmental_influence.equals("abundance") && Global.cpue_sous_sur_production!=1 && Global.coeff_determination>0.7);
result = (Global.effort_preponderant!=1 && Global.cpue_sous_sur_production!=1 && Global.coeff_determination>0.7);
if(result)
commentaireEnCours="From the current rule the model " + RechercheModele.getEquation()+ " is convenient.";
break;
......@@ -427,12 +429,11 @@ public static boolean isTrue(){
result=(Global.test_jackknife==false);
System.out.println("La valeur de test_jackknife est "+Global.test_jackknife);
if(result){
commentaireEnCours="The Student's test on jackknife is not acceptable.\nAt least one of the regression coefficients is not significant as you can see in the jackknife plots.\nFrom the current rule the model " + RechercheModele.getEquation()+ " is not validated";
}
commentaireEnCours="The Student's test on jackknife is not acceptable.\nAt least one of the regression coefficients is not significant as you can see in the jackknife plots.\nFrom the current rule the model " + RechercheModele.getEquation()+ " is not validated";
}
else
commentaireEnCours="The Student's test on jackknife regression coefficients is acceptable";
commentaireEnCours=commentaireEnCours+"\n\nDue to usual autocorrelation in time series and non independance between CPUE and E, conventional statistics are usually provide too optimistic results";
commentaireEnCours=commentaireEnCours+"\n\nDue to usual autocorrelation in time series and non independance between CPUE and E, conventional statistics are usually provide too optimistic results";
break;
case 1:
result=( Global.coeff_determination_instable!=1);
......
/**
* Titre : Climprod<p>
* Effectue validation du modele par test Jackknife et Fisher
*/
package fr.ird.climprod;
import static fr.ird.climprod.Data.getNbDataRetenue;
......@@ -9,7 +10,7 @@ import java.awt.Color;
import java.io.*;
public class Validation {
static private int nim;
static private int nparmax=4,nv=50;
static private int nparmax=4,nv=100; // Modif 2020
static private int jk,nbre_par;
static private int riter,iter,ritertot,maxrit=100;
static private double val_init,val_fin, alpha=4,ecart;
......@@ -58,6 +59,8 @@ static private double[]y_ms_m2=new double[nv];
static private double []vec_y_min2=new double[nv];
static private double []vec_y_max2=new double[nv];
private static void marquardt()
{
int iter=0,riter=0,i,j,k;
......@@ -90,7 +93,7 @@ private static void marquardt()
//for(i=0;i<nbre_par;i++)
// System.out.println("rac "+racineh[i]+" deri " +derivee[i] );
//*******************************************
//inverse_gauss( nbre_par, hessien, delta, derivee );
//inverse_gauss( nbre_par, hessien, delta, derivee );
for(i=0;i<nbre_par-1;i++) {
for(j=i+1;j<nbre_par;j++){
c=hessien[j][i]/hessien[i][i];
......@@ -263,7 +266,8 @@ public static void valide_modele()
v=Data.getV();
vbar=Data.getVbar();
pue=Data.getPue();
if((Global.numero_modele > 5) || (Global.numero_modele< 2))
if((Global.numero_modele > 5) || (Global.numero_modele< 2)) // Exclus les modèles Schaefer et Fox + f(V) linéaire ou power ??? Commentaire 2020
for(iv=0;iv<nv;iv++){
f_ms_m[iv] = 0.0;
f_ms_s[iv] = 0.0;
......@@ -288,10 +292,11 @@ public static void valide_modele()
calc_var_jk();
var_tot = variance_pue;
sdc_tot = somme_residus_jk(par_init);
r_tot = 100*(1 - (sdc_tot/var_tot));
r_tot = 100*(1 - (sdc_tot/var_tot)); // Coefficient de détermination conventionnel R2. Commentaire 2020
sdc_jk = 0;
//for(i=0;i<nbre_par;i++) System.out.print(par_init[i]+" ");
//System.out.println("R² "+r_tot);
/**************** boucle jackknife ******************/
for(jk=0;jk<nim;jk++){
......@@ -306,7 +311,7 @@ public static void valide_modele()
for(i=0;i<nbre_par;i++)
pseudo[jk][i]= nim*par_init[i]-(nim-1)*par_alors[i];//ici
vv = val_v[2];
if((Global.numero_modele > 5) || (Global.numero_modele < 2))
if((Global.numero_modele > 5) || (Global.numero_modele < 2)) // Exclus les modèles Schaefer et Fox + f(V) linéaire ou power ??? Commentaire 2020
for(iv=0;iv<nv;iv++){
f_ms = EquationModele.minimum_fonction(vv,par_alors);
y_ms = f_ms * EquationModele.fonction_modele(f_ms,vv,vv,par_alors);
......@@ -332,7 +337,7 @@ public static void valide_modele()
if(jkn[jk][0]<0) jkn[jk][0] = 0.0;
// for(i=0;i<nbre_par;i++) System.out.print(par_alors[i]+" ");
//System.out.println("R� " +100*jkn[jk][0]);
//System.out.println("R� " +100*jkn[jk][0]);
}
/**************** calculs des pseudo-valeurs *********************/
......@@ -351,29 +356,31 @@ public static void valide_modele()
covar_pseudo[i][j] /= (double)nim;//ici
//System.out.println(i+" "+j+"covar "+covar_pseudo[i][j]);
}
for(i=0;i<nbre_par;i++) ecart_pseudo[i] = Math.sqrt(covar_pseudo[i][i]);
for(i=0;i<nbre_par;i++) ecart_pseudo[i] = Math.sqrt(covar_pseudo[i][i]); // Ecart-type pseudo-valeurs. Commentaire 2020
/****************************** Test du Jackknife *******************************/
Global.test_jackknife=true;
Global.test_jackknife=true; // Initialisation test (vrai par défaut)
// TODO vérifier et décommenter
for(i=0;i<nbre_par;i++) {
if ( Math.abs(par_init[i]/ecart_pseudo[i]) < 2.00) Global.test_jackknife=false;
for(i=0;i<nbre_par;i++)
{
if (Math.abs(par_init[i]/ecart_pseudo[i]) < 2.00) Global.test_jackknife=false; // Teste valeur ABSOLUE des ratios des paramètres du modèle (Jakknife t-ratio) par rapport a 2.OO. Si au moins 1 faux, test = faux. Commentaire 2020
System.out.println("Jackknife t-ratio = " + Math.abs(par_init[i]/ecart_pseudo[i]) + " valeur à comparer à 2.00; Test Jakknife = " + Global.test_jackknife); // Test 2020
}
// TODO add fisher test
/****************************************************************************/
r_jk = (1 - (sdc_jk/var_tot));
r_jk = (1 - (sdc_jk/var_tot)); // Valeur du R2 jackknife. Commentaire 2020
if(r_tot<0.0) r_tot = 0.0;
if(r_jk<0.0) r_jk = 0.0;
//System.out.println(" Conventional coefficient of determination R² = " + r_tot);
//System.out.println(" Jackknife coefficient of determination R² = "+r_jk);
//System.out.println(" Jackknife coefficient of determination R² = "+r_jk);
Global.coeff_determination=r_tot/100;
Global.jackknife=r_jk;
for(i=0;i<nbre_par;i++)
for(i=0;i<nbre_par;i++)
{
for(jk=0;jk<nim;jk++)
trjk[jk] = 100*jkn[jk][i+1]/par_init[i];//ici
for(jk=0;jk<nim;jk++) trjk[jk] = 100*jkn[jk][i+1]/par_init[i];//ici
// System.out.print(trjk[jk]+" ");
// System.out.println();
// System.out.println();
}
/*******Calcul des valeurs th�oriques en fonction de V observ�**********/
......@@ -404,14 +411,15 @@ public static void valide_modele()
}
static private void makePlot(){
/***********jacknife plot **************************/
String[] ty={"a","b","c","d"};
double[] years=Data.getYears();
String[] etiq$=new String[nim];
double[] etiq=new double[nim];
double[] serie100=new double[nim];
DecimalFormat df=new DecimalFormat("0");
for(int i=0;i<nim;i++)
{
......@@ -425,11 +433,20 @@ ps100.setCouleur(Color.black);
//PlotSerie[] ps=new PlotSerie[nbre_par+1];
Global.jackknifePlot= new PlotHisto[nbre_par+1];
double[] trjk;
int[] Nb_years_greater100=new int[nim]; // Test 2020
int[] Nb_years_lower100=new int[nim];
for(int i=0;i<nbre_par;i++){
trjk=new double[nim];
Nb_years_lower100[i]= 0;
Nb_years_greater100[i] = 0;
for(jk=0;jk<nim;jk++)
trjk[jk] = 100*jkn[jk][i+1]/par_init[i];
{
trjk[jk] = 100*jkn[jk][i+1]/par_init[i]; // Valeurs des barres des histogrammes des paramètres
if (trjk[jk] < 100) Nb_years_lower100[i] = Nb_years_lower100[i] +1; // Compte le nb d'occurence <100%
if (trjk[jk] > 100) Nb_years_greater100[i] = Nb_years_greater100[i] +1; // Compte le nb d'occurence >100%
}
if (Nb_years_greater100[i] == nim || Nb_years_lower100[i] == nim) System.out.println("Problem in Jackknife computation due to CPUE values <1");
// else System.out.println("No problem in Jackknife computation Nb years = " + nim + " Nb_years_lower100[i] = " + Global.Nb_years_lower100[i] + " Nb_years_greater100[i] = " + Global.Nb_years_greater100[i]); // Test 2020
PlotSerie ps= new PlotSerie("Years",etiq,ty[i],trjk);
ps.setFigure(3);
Global.jackknifePlot[i]=new PlotHisto();
......@@ -456,7 +473,7 @@ for(int i=0;i<nbre_par;i++){
Global.jackknifePlot[i].setXcutYat(0.d);
}
trjk=new double[nim];
trjk=new double[nim]; // Graphique R2 jackknife de menu principal "Plots". Commentaire 2020
for(int i=0;i<nim;i++)
trjk[i] = 10000*jkn[i][0]/r_tot;
DecimalFormat nf = new DecimalFormat("0.00");
......@@ -488,7 +505,11 @@ for(int i=0;i<nim;i++)
/*****************************MSE & MS-Y Plots***********************/
Global.msyPlot[0]=new Plot();