def performRegression(self):

    def quoteBasename(string):
      return u"\"%s\"" % (os.path.basename(string))

    # Default is no.
    reportSummary = "FALSE"

    if self.hasOption(u"options"):
      if self.optionIsSet(u"ReportSummary"):
        reportSummary = "TRUE"

    script = u"""\
modelSetDirectory = "%s"
validationSetDirectory = "%s"
independentVariables = "%s"
categoricalVariables = c(%s)
dependentVariable = "%s"
fractionUnchangedCellsInModelSampleSet = %g
fractionChangedCellsInModelSampleSet = %g
summaryFile = "%s"
stepwise = "forward"
reportSummary = %s
""" % (    self.modelOutputDirectoryName(),
           self.validationOutputDirectoryName(),
           self.independentVariablesTableBaseName(),
           u", ".join(map(quoteBasename, self.categoricalVariables())),
           self.tableFilename(),
           self.fractionOfUnchangedCellsInModelSetSample(),
           self.fractionOfChangedCellsInModelSetSample(),
           u"multinomialregression.Rout",
           reportSummary)

    for name in [u"variogramBinWidth", u"variogramCutoff",
       u"maxNumberOfSteps"]:
      if self.hasOption(name):
        script += "%s = %s\n" % (name, self.option(name))

    if sys.platform == "win32":
      script = script.replace("\\", "\\\\")

    file(self.regressionScriptFilename(), "w").write(script)

    scriptFilename = os.path.join(self.scriptDirectoryName(),
         u"multinomialRegression.R")
    assert os.path.exists(scriptFilename)

    currentWorkingDirectory = os.getcwdu()
    outputFilename = u"multinomialregression_messages.Rout"

    try:
      os.chdir(self.outputDirectoryName())
      utils.executeRScript(scriptFilename, outputFilename,
         logFilename=self.logFilename())
    finally:
      os.chdir(currentWorkingDirectory)

    assert os.path.exists(self.regressionScriptFilename())
    os.remove(self.regressionScriptFilename())
Example #2
0
  def performRegressionsPerClass(self, aClass):

    def quoteBasename(string):
      return u"\"%s\"" % (os.path.basename(string))

    def script(
         dependentVariableTableFilename,
         summaryFile):

      # Default is no.
      reportSummary = "FALSE"

      if self.hasOption(u"options"):
        if self.optionIsSet(u"ReportSummary"):
          reportSummary = "TRUE"

      result = u"""\
modelSetDirectory = "%s"
validationSetDirectory = "%s"
independentVariables = "%s"
categoricalVariables = c(%s)
dependentVariable = "%s"
landUseChanged = "%s"
fractionUnchangedCellsInModelSampleSet = %g
fractionChangedCellsInModelSampleSet = %g
summaryFile = "%s"
stepwise = "forward"
reportSummary = %s
""" % (  self.modelOutputDirectoryName(),
         self.validationOutputDirectoryName(),
         self.independentVariablesTableBaseName(),
         u", ".join(map(quoteBasename, self.categoricalVariables())),
         dependentVariableTableFilename,
         self.changeTableFilename(),
         self.fractionOfUnchangedCellsInModelSetSample(),
         self.fractionOfChangedCellsInModelSetSample(),
         summaryFile,
         reportSummary)

      for name in [u"variogramBinWidth", u"variogramCutoff",
         u"maxNumberOfSteps"]:
        if self.hasOption(name):
          result += "%s = %s\n" % (name, self.option(name))

      return result

    # Death
    aScript = script(self.classNumberToDeathTableFilename(aClass),
         u"binaryregression_death%s.Rout" % (aClass))

    if sys.platform == "win32":
      aScript = aScript.replace("\\", "\\\\")

    file(self.regressionScriptFilename(), "w").write(aScript)

    # TODO Test the existence of this script in the initialise function instead
    # TODO of asserting it here.
    scriptFilename = os.path.join(self.scriptDirectoryName(),
         u"binaryRegression.R")
    assert os.path.exists(scriptFilename)

    currentWorkingDirectory = os.getcwdu()

    try:
      outputFilename = u"binaryregression_death%s_messages.Rout" % (aClass)
      os.chdir(self.outputDirectoryName())
      utils.executeRScript(scriptFilename, outputFilename, logFilename=self.logFilename())
    finally:
      os.chdir(currentWorkingDirectory)

    assert os.path.exists(self.regressionScriptFilename())
    os.remove(self.regressionScriptFilename())

    # Birth
    aScript = script(self.classNumberToBirthTableFilename(aClass),
         u"binaryregression_birth%s.Rout" % (aClass))

    if sys.platform == "win32":
      aScript = aScript.replace("\\", "\\\\")

    file(self.regressionScriptFilename(), "w").write(aScript)

    scriptFilename = os.path.join(self.scriptDirectoryName(),
         u"binaryRegression.R")
    assert os.path.exists(scriptFilename)

    currentWorkingDirectory = os.getcwdu()

    try:
      outputFilename = u"binaryregression_birth%s_messages.Rout" % (aClass)
      os.chdir(self.outputDirectoryName())
      utils.executeRScript(scriptFilename, outputFilename, logFilename=self.logFilename())
    finally:
      os.chdir(currentWorkingDirectory)

    assert os.path.exists(self.regressionScriptFilename())
    os.remove(self.regressionScriptFilename())