Author: jcouteau Date: 2009-04-20 13:40:15 +0000 (Mon, 20 Apr 2009) New Revision: 115 Modified: trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java trunk/sensitivity/SensitivityCalculatorRMorris.java Log: Expand Grid conform to CDC, fixed bug on Morris (in R). Modified: trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java =================================================================== --- trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java 2009-04-20 08:28:32 UTC (rev 114) +++ trunk/sensitivity/SensitivityCalculatorJavaExpandGrid.java 2009-04-20 13:40:15 UTC (rev 115) @@ -28,10 +28,10 @@ import org.codelutin.util.FileUtil; import fr.ifremer.isisfish.datastore.SimulationStorage; +import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityCalculator; import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan; import fr.ifremer.isisfish.simulator.sensitivity.Factor; import fr.ifremer.isisfish.simulator.sensitivity.Scenario; -import fr.ifremer.isisfish.simulator.sensitivity.AbstractSensitivityCalculator; import fr.ifremer.isisfish.simulator.sensitivity.SensitivityException; import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios; import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; @@ -68,24 +68,26 @@ public SensitivityScenarios compute(DesignPlan plan, File outputdirectory) throws SensitivityException { + setIsisFactorsR(plan, outputdirectory); + int k = 1; //number of sensitivity scenarios (initialization) int factorNumber = plan.getFactors().size(); //number of factors List<Factor> factors = plan.getFactors(); //list of factors for (int i = 0; i < factorNumber; i++) { if (factors.get(i).getDomain() instanceof ContinuousDomain) { - if (((ContinuousDomain) factors.get(i) - .getDomain()).getCardinality() != 0) { + if (((ContinuousDomain) factors.get(i).getDomain()) + .getCardinality() != 0) { k = k - * ((ContinuousDomain) factors - .get(i).getDomain()).getCardinality(); + * ((ContinuousDomain) factors.get(i).getDomain()) + .getCardinality(); } } else if (factors.get(i).getDomain() instanceof DiscreteDomain) { - if (((DiscreteDomain) factors.get(i) - .getDomain()).getValues().size() != 0) { + if (((DiscreteDomain) factors.get(i).getDomain()).getValues() + .size() != 0) { k = k - * ((DiscreteDomain) factors - .get(i).getDomain()).getValues().size(); + * ((DiscreteDomain) factors.get(i).getDomain()) + .getValues().size(); } } } @@ -104,8 +106,8 @@ .getMaxBound(); Double min = ((ContinuousDomain) factor.getDomain()) .getMinBound(); - int card = ((ContinuousDomain) factor - .getDomain()).getCardinality(); + int card = ((ContinuousDomain) factor.getDomain()) + .getCardinality(); result = (int) Math.floor(rest / card); rest = rest - (card * result); @@ -118,8 +120,8 @@ } } if (factor.getDomain() instanceof DiscreteDomain) { - int card = ((DiscreteDomain) factor - .getDomain()).getValues().size(); + int card = ((DiscreteDomain) factor.getDomain()) + .getValues().size(); result = (int) Math.floor(rest / card); rest = rest - (card * result); factor.setValueForIdentifier(rest); @@ -141,13 +143,26 @@ REngine engine = new RProxy(); try { - //Create the factors vectors + + //Set working directory to get Isis R session + log.info("setwd(\"" + outputdirectory.getParent() + "\")"); + engine.voidEval("setwd(\"" + outputdirectory.getParent() + "\")"); + + //Get Isis R session + log.info("load(\".RData\")"); + engine.voidEval("load(\".RData\")"); + + String dataframe = "data<-data.frame("; + + //Create the factors vectors and the dataframe instruction for (int j = 0; j < factorNumber; j++) { - Factor factor = thisExperimentScenarios - .get(0).getFactors().get(j); + Factor factor = thisExperimentScenarios.get(0).getFactors() + .get(j); if (factor.getDomain() instanceof EquationContinuousDomain) { - String vector = "factor" + j + "<-c("; + //String vector = "factor" + j + "<-c("; + String vector = factor.getName().replaceAll(" ", "") + + "<-c("; for (int i = 0; i < scenariosNumber; i++) { if (i < (scenariosNumber - 1)) { vector = vector @@ -166,7 +181,9 @@ engine.voidEval(vector); log.info("Message sent to R : " + vector); } else if (factor.getDomain() instanceof MatrixContinuousDomain) { - String vector = "factor" + j + "<-c("; + //String vector = "factor" + j + "<-c("; + String vector = factor.getName().replaceAll(" ", "") + + "<-c("; for (int i = 0; i < scenariosNumber; i++) { if (i < (scenariosNumber - 1)) { vector = vector @@ -185,7 +202,9 @@ engine.voidEval(vector); log.info("Message sent to R : " + vector); } else { - String vector = "factor" + j + "<-c("; + //String vector = "factor" + j + "<-c("; + String vector = factor.getName().replaceAll(" ", "") + + "<-c("; for (int i = 0; i < scenariosNumber; i++) { if (i < (scenariosNumber - 1)) { vector = vector @@ -204,16 +223,13 @@ log.info("Message sent to R : " + vector); } - } - - //Create the data data.frame from the factors - String dataframe = "data<-data.frame("; - for (int j = 0; j < factorNumber; j++) { if (j < factorNumber - 1) { - dataframe = dataframe + "factor" + j + "=factor(factor" + j - + "),"; + dataframe = dataframe + + factor.getName().replaceAll(" ", "") + "=factor(" + + factor.getName().replaceAll(" ", "") + "),"; } else { - dataframe = dataframe + "factor" + j + "=factor(factor" + j + dataframe += factor.getName().replaceAll(" ", "") + + "=factor(" + factor.getName().replaceAll(" ", "") + "))"; } @@ -254,6 +270,46 @@ log.info("Message sent to R : " + "dput(factornames,file=\".factornames\")"); + //Create the isis.factor.distribution + log.info("Message sent to R : " + + "isis.factor.distribution<-c(0.0)"); + engine.voidEval("isis.factor.distribution<-c(0.0)"); + + //Create isis.MethodExp + log + .info("Message sent to R : " + + "isis.MethodExp<-list(isis.factor,isis.factor.distribution,call_méthode=\"isis-fish-externeR\")"); + engine + .voidEval("isis.MethodExp<-list(isis.factor,isis.factor.distribution,call_méthode=\"isis-fish-externeR\")"); + + log + .info("Message sent to R : " + + "attributes(isis.MethodExp)<-list(nomModel=\"isis-fish-externe-R\")"); + engine + .voidEval("attributes(isis.MethodExp)<-list(nomModel=\"isis-fish-externe-R\")"); + + //Create isis.Simule + log.info("Message sent to R : " + "isis.simule<-data.frame(data)"); + engine.voidEval("isis.simule<-data.frame(data)"); + + log + .info("Message sent to R : " + + "attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")"); + engine + .voidEval("attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")"); + + log.info("Message sent to R : " + + "names(isis.simule)<-isis.factors[[1]]"); + engine.voidEval("names(isis.simule)<-isis.factors[[1]]"); + + //Set working directory to save Isis R session + log.info("setwd(\"" + outputdirectory.getParent() + "\")"); + engine.voidEval("setwd(\"" + outputdirectory.getParent() + "\")"); + + // Save Isis R session + log.info("save.image()"); + engine.voidEval("save.image()"); + engine.terminate(); } catch (Exception e) { @@ -270,39 +326,44 @@ REngine engine = new RProxy(); try { - /*int scenariosNumber = sensitivityScenarios.getScenarios().size(); - int factorNumber = sensitivityScenarios.getScenarios().get(0) - .getFactors().size();*/ + //Set working directory to get Isis R session + log.info("setwd(\"" + outputdirectory.getParent() + "\")"); + engine.voidEval("setwd(\"" + outputdirectory.getParent() + "\")"); + //Get Isis R session + log.info("load(\".RData\")"); + engine.voidEval("load(\".RData\")"); + + // Set output directory + engine.voidEval("setwd(\"" + outputdirectory.getAbsolutePath() + + "\")"); + log.info("Message sent to R : setwd(\"" + + outputdirectory.getAbsolutePath() + "\")"); + + //Get back the scenarios + engine.voidEval("factors<-read.csv(\".expandgrid.csv\")"); + log + .info("Message sent to R : factors<-read.csv(\".expandgrid.csv\")"); + + // Get the factornames object in the .factornames file + engine.voidEval("factornames<-dget(\".factornames\")"); + log.info("Message sent to R : " + + "factornames<-dget(\".factornames\")"); + + //Get back the factors number + int factorNumber = ((Double) engine.eval("length(factors)-1")) + .intValue(); + int sensitivityNumber = simulationStorages.get(0).getParameter() .getSensitivityExport().size(); for (int k = 0; k < sensitivityNumber; k++) { - // Set output directory - engine.voidEval("setwd(\"" + outputdirectory.getAbsolutePath() - + "\")"); - log.info("Message sent to R : setwd(\"" - + outputdirectory.getAbsolutePath() + "\")"); + String name = simulationStorages.get(0).getParameter() + .getSensitivityExport().get(k).getExportFilename(); - //Get back the scenarios - //engine.voidEval("factors<-read.csv(\".expandgrid.csv\",row.names=1,col.names=1)"); - engine.voidEval("factors<-read.csv(\".expandgrid.csv\")"); - log - .info("Message sent to R : factors<-read.csv(\".expandgrid.csv\")"); - - // Get the factornames object in the .factornames file - engine.voidEval("factornames<-dget(\".factornames\")"); - log.info("Message sent to R : " - + "factornames<-dget(\".factornames\")"); - - //Get back the factors number - int factorNumber = ((Double) engine.eval("length(factors)-1")) - .intValue(); - //factorNumber=factorNumber-1; - //Create the results vectors - String result = "result<-c("; + String result = name + "<-c("; for (int l = 0; l < simulationStorages.size(); l++) { File importFile = new File(simulationStorages.get(l) .getDirectory().toString() @@ -326,18 +387,48 @@ engine.voidEval(result); log.info("Message sent to R : " + result); + //Put results in isis.simule + engine.voidEval("isis.simule<-data.frame(isis.simule," + name + + ")"); + log.info("Message sent to R : " + + "isis.simule<-data.frame(isis.simule," + name + ")"); + } + + //adding attribute to isis.Simule + log + .info("Message sent to R : " + + "attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")"); + engine + .voidEval("attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")"); + + for (int k = 0; k < sensitivityNumber; k++) { + + // Creates the R expression to import results in R + String name = simulationStorages.get(0).getParameter() + .getSensitivityExport().get(k).getExportFilename(); + //Create the dataforaov data.frame - String dataframe = "dataforaov<-data.frame(factors,result=result)"; + String dataframe = "dataforaov<-data.frame(factors," + name + + "=" + name + ")"; engine.voidEval(dataframe); log.info("Message sent to R : " + dataframe); //Call aov() - String aovCall = "aovresult<-aov(result~"; + String aovCall = "aovresult<-aov(" + name + "~"; for (int j = 0; j < factorNumber; j++) { + log.info("Message sent to R : " + "names(factors)[" + + (j + 2) + "]"); + if (j < (factorNumber - 1)) { - aovCall = aovCall + "factor" + j + "+"; + aovCall = aovCall + + engine + .eval("names(factors)[" + (j + 2) + "]") + + "+"; } else { - aovCall = aovCall + "factor" + j + ",data=dataforaov)"; + aovCall = aovCall + + engine + .eval("names(factors)[" + (j + 2) + "]") + + ",data=dataforaov)"; } } engine.voidEval(aovCall); @@ -420,10 +511,65 @@ .getExportFilename() + "_SensitivityIndices.csv\")"); //FIXME export through java to enable export when using Rserve (when distant Rserve). - engine.terminate(); + + //creating isis.methodAnalyse + log + .info("Message sent to R : " + + "isis.methodAnalyse<-list(\"isis.factors\"=isis.factors,\"isis.factor.distribution\"=isis.factor.distribution,\"isis.simule\"=isis.simule,call_method=\"" + + aovCall + "\"" + ",aovresult)"); + engine + .voidEval("isis.methodAnalyse<-list(\"isis.factors\"=isis.factors,\"isis.factor.distribution\"=isis.factor.distribution,\"isis.simule\"=isis.simule,call_method=\"" + + aovCall + "\"" + ",aovresult)"); + + String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-isis.methodAnalyse"; + String simulationName = simulationStorages.get(0).getName() + .replaceAll("-", ""); + log.info("Message sent to R : " + + String.format(renameIsisMethodAnalyse, simulationName + + "." + name)); + engine.voidEval(String.format(renameIsisMethodAnalyse, + simulationName + "." + name)); + } - log.info("end"); + //Rename R objects for saving purpose + + String renameIsisSimule = "%s.isis.simule<-isis.simule"; + String renameIsisFactorDistribution = "%s.isis.factor.distribution<-isis.factor.distribution"; + String renameIsisFactor = "%s.isis.factor<-isis.factors"; + String renameIsisMethodExp = "%s.isis.methodExp<-isis.MethodExp"; + + String simulationName = simulationStorages.get(0).getName() + .replaceAll("-", ""); + + log.info("Message sent to R : " + + String.format(renameIsisSimule, simulationName)); + engine.voidEval(String.format(renameIsisSimule, simulationName)); + + log.info("Message sent to R : " + + String.format(renameIsisFactorDistribution, + simulationName)); + engine.voidEval(String.format(renameIsisFactorDistribution, + simulationName)); + + log.info("Message sent to R : " + + String.format(renameIsisFactor, simulationName)); + engine.voidEval(String.format(renameIsisFactor, simulationName)); + + log.info("Message sent to R : " + + String.format(renameIsisMethodExp, simulationName)); + engine.voidEval(String.format(renameIsisMethodExp, simulationName)); + + //Set working directory to save Isis R session + log.info("setwd(\"" + outputdirectory.getParent() + "\")"); + engine.voidEval("setwd(\"" + outputdirectory.getParent() + "\")"); + + // Save Isis R session + log.info("save.image()"); + engine.voidEval("save.image()"); + + engine.terminate(); + } catch (Exception e) { e.printStackTrace(); // Error while processing Modified: trunk/sensitivity/SensitivityCalculatorRMorris.java =================================================================== --- trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-04-20 08:28:32 UTC (rev 114) +++ trunk/sensitivity/SensitivityCalculatorRMorris.java 2009-04-20 13:40:15 UTC (rev 115) @@ -318,8 +318,7 @@ engine.voidEval("factornames<-dget(\".factornames\")"); log.info("Message sent to R : " + "factornames<-dget(\".factornames\")"); - - /*int scenariosNumber = sensitivityScenarios.getScenarios().size();*/ + int scenariosNumber = ((Double) engine .eval("length(a$X)/length(a$factors)")).intValue(); log.info("Message sent to R : " + "length(a$X)/length(a$factors)"); @@ -359,10 +358,39 @@ // Send the simulation results engine.voidEval(rInstruction); + //Put results in isis.simule + engine.voidEval("isis.simule<-data.frame(isis.simule," + name + + ")"); + log.info("Message sent to R : " + + "isis.simule<-data.frame(isis.simule," + name + ")"); + } + + //adding attribute to isis.Simule + log + .info("Message sent to R : " + + "attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")"); + engine + .voidEval("attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")"); + + for (int k = 0; k < sensitivityNumber; k++) { + + // Creates the R expression to import results in R + String name = simulationStorages.get(0).getParameter() + .getSensitivityExport().get(k).getExportFilename(); + //Compute results engine.voidEval("tell(a,y=" + name + ")"); log.info("Message sent to R : " + "tell(a,y=" + name + ")"); + //creating isis.methodAnalyse + log + .info("Message sent to R : " + + "isis.methodAnalyse<-list(\"isis.factors\"=isis.factors,\"isis.factor.distribution\"=isis.factor.distribution,\"isis.simule\"=isis.simule,call_method=\"tell(a,y=" + + name + ")" + "\",a)"); + engine + .voidEval("isis.methodAnalyse<-list(\"isis.factors\"=isis.factors,\"isis.factor.distribution\"=isis.factor.distribution,\"isis.simule\"=isis.simule,call_method=\"tell(a,y=" + + name + ")" + "\",a)"); + // Get back the sensitivity results, mu, mu star and sigma. engine.voidEval("mu<-apply(a$ee, 2, mean)"); log.info("Message sent to R : " + "mu<-apply(a$ee, 2, mean)"); @@ -429,35 +457,6 @@ .getExportFilename() + "_Results.csv\")"); //FIXME export through java to enable export when using Rserve - //Put results in isis.simule - engine.voidEval("isis.simule<-data.frame(isis.simule," + name - + ")"); - log.info("Message sent to R : " - + "isis.simule<-data.frame(isis.simule," + name + ")"); - } - - //adding attribute to isis.Simule - log - .info("Message sent to R : " - + "attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")"); - engine - .voidEval("attributes(isis.simule)<-list(nomModel=\"isis-fish-externe-R\")"); - - for (int k = 0; k < sensitivityNumber; k++) { - - // Creates the R expression to import results in R - String name = simulationStorages.get(0).getParameter() - .getSensitivityExport().get(k).getExportFilename(); - - //creating isis.methodAnalyse - log - .info("Message sent to R : " - + "isis.methodAnalyse<-list(\"isis.factors\"=isis.factors,\"isis.factor.distribution\"=isis.factor.distribution,\"isis.simule\"=isis.simule,call_method=\"tell(a,y=" - + name + ")" + "\",a)"); - engine - .voidEval("isis.methodAnalyse<-list(\"isis.factors\"=isis.factors,\"isis.factor.distribution\"=isis.factor.distribution,\"isis.simule\"=isis.simule,call_method=\"tell(a,y=" - + name + ")" + "\",a)"); - String renameIsisMethodAnalyse = "%s.isis.methodAnalyse<-isis.methodAnalyse"; String simulationName = simulationStorages.get(0).getName() .replaceAll("-", "");