R/avaliaVolumeAvancado2.R

## Copyright (C) 2016  Clayton Vieira Fraga Filho
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
## as published by the Free Software Foundation; either version 2
## of the License, or (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
##' @title evaluates Volume Advanced
##' @description this function performs an assessment of estimates of a variable as the forcefulness with expected
##' @param base data.frame with data in case of fragment base
##' @param basePredicao data.frame with data to use in ajust
##' @param baseProjecao data.frame with data to use in validation
##' @param mapeamento name of fields on base
##' @param modelos list of exclusive for base models
##' @param salvar list of param to save the files
##' @param graficos list of param to plot graphics
##' @param estatisticas list of param to caclc estatistics
##' @param forcePredict force the calculation without using predict?
##' @param dividirEm how divide the base in training and validation
##' @param percentualDeTreino how many percent will stay in the training group?
##' @param agruparPor name field of base is group of individuals
##' @param fnCalculaVolume list of estatistics results
##' @param rmColsSuspicious remove fields b0, b1, b2, b2 ... of bases?
##' @return will be returned a result of statistics and ranking of volume
##' @import Fgmutils
##' @importFrom grDevices dev.new
##' @importFrom graphics par
##' @importFrom utils capture.output write.csv
##' @export
avaliaVolumeAvancado2 <- function (base = NULL, basePredicao = NULL, baseProjecao = NULL,
                                   mapeamento = list(dap1 = "dap1", dap2 = "dap2", ht1 = "ht1", ht2 = "ht2", idade2 = "idadearred2", parcela = "parcela", areacorr = "areacorr"),
                                   modelos = NULL, salvar = NULL, graficos = NULL,
                                   estatisticas = NULL, forcePredict = F, dividirEm = NULL,
                                   percentualDeTreino = 0.7, agruparPor = NULL, fnCalculaVolume = calculaVolumeDefault,
                                   rmColsSuspicious = F)
{
  if (!is.null(basePredicao) && !is.null(baseProjecao))
    base = basePredicao
  if (is.null(base))
    stop("informe a base que deseja usar para extrair as informacoes")
  if (is.null(modelos))
    stop("informe modelos a serem avaliados vide ITGM::getModelosLiteraturaExclusivos()")
  save = dirDAP = dirHT = dirVOLUME = NULL
  if (!is.null(salvar)) {
    save = dirDAP = dirHT = dirVOLUME = salvar$diretorio
  }
  if (!is.null(salvar) && !is.null(salvar$diretorioDAP))
    dirDAP = paste0(salvar$diretorio, salvar$diretorioDAP)
  if (!is.null(salvar) && !is.null(salvar$diretorioHT))
    dirHT = paste0(salvar$diretorio, salvar$diretorioHT)
  if (!is.null(salvar) && !is.null(salvar$diretorioVOLUME))
    dirVOLUME = paste0(salvar$diretorio, salvar$diretorioVOLUME)
  suspCols = c("b0", "b1", "b2", "b3", "b4", "b5", "b6", "b7",
               "b8", "b9")
  if (rmColsSuspicious) {
    if (!is.null(base))
      base = removeColsSuspicious(base, intersect(names(base),
                                                  suspCols))
    if (!is.null(basePredicao))
      basePredicao = removeColsSuspicious(basePredicao,
                                          intersect(names(basePredicao), suspCols))
    if (!is.null(baseProjecao))
      baseProjecao = removeColsSuspicious(baseProjecao,
                                          intersect(names(baseProjecao), suspCols))
  }
  colunas = c()
  if (!is.null(dividirEm))
    colunas = union(colunas, dividirEm)
  if (!is.null(agruparPor))
    colunas = union(colunas, agruparPor)
  for (i in 1:length(modelos)) colunas = union(colunas, getColumnsOfBase(base,
                                                                         modelos[[i]]()[[2]]))
  if (length((diff = intersect(colunas, suspCols))) > 0)
    stop(paste0("A base contem campos com nomes suspeitos: <",
                toString(diff), "> sao coeficientes de algum modelo? sugest: renomeie-os ou use rmColsSuspicious = T"))
  if (!is.null(baseProjecao) && length((diff = intersect(names(baseProjecao),
                                                         suspCols))) > 0)
    stop(paste0("A base de projecao contem campos com nomes suspeitos: <",
                toString(diff), "> sao coeficientes de algum modelo? sugest: renomeie-os:\n                \n baseProjecao2 = baseProjecao[, setdiff(names(baseProjecao),  c(\"",
                toString(diff), "\"))] ou use rmColsSuspicious = T"))
  bw = list()
  eval(parse(text = paste0("bw$", union(colunas, mapeamento),
                           " = base$", union(colunas, mapeamento))))
  baseW = as.data.frame(bw)
  baseTreino = basePredicao
  if (is.null(basePredicao) || is.null(baseProjecao)) {
    dftv = separaDados(baseW, dividirEm, percTraining = percentualDeTreino)
    baseTreino = dftv$treino
    baseProjecao = dftv$validacao
  }
  ranking = data.frame(b0 = double(), b1 = double(), rankingB0 = double(),
                       rankingB1 = double())
  dfestatisticas = list()
  nomes = list()
  if (!is.null(agruparPor)) {
    volumesPreditos = data.frame(k = baseProjecao[, agruparPor])
    names(volumesPreditos)[[1]] = agruparPor
  }
  estatisticasV = estatisticasVAj = estatisticas
  estatisticasV$baseDoAjuste = baseProjecao
  estatisticasVAj$baseDoAjuste = baseTreino
  if (!is.null(graficos) && !is.null(graficos$funcoes)) {
    rw = length(modelos)
    cl = 6 * length(graficos$funcoes)
    for (i in 1:length(graficos$funcoes)) if (all.equal(graficos$funcoes[[i]],
                                                        getggplot2GraphicObservadoXEstimado) == T) {
      cl = cl - 6
      break
    }
    if (cl > 0 && is.null(save)) {
      dev.new(width = cl * 2, height = rw * 2)
      par(mfrow = c(rw, cl))
    }
    nms = c()
    for (nm in 1:(6 * rw)) nms = union(nms, paste0("g", nm))
    j = 1
  }
  comparativoAjuste = list()
  comparativoAjuste$estatisticasComparativoGeral = list(estatisticas = data.frame(DAP_OBSERVADO = basePredicao[,
                                                                                                               mapeamento$dap2], HT_OBSERVADO = basePredicao[, mapeamento$ht2],
                                                                                  VOLUME_OBSERVADO = fnCalculaVolume(dap = basePredicao[,
                                                                                                                                        mapeamento$dap2], ht = basePredicao[, mapeamento$ht2])),
                                                        estatisticasDoModelo = data.frame())
  comparativoAjuste$estatisticasComparativoDAP = list(estatisticas = data.frame(DAP_OBSERVADO = basePredicao[,
                                                                                                             mapeamento$dap2]), estatisticasDoModelo = data.frame())
  comparativoAjuste$estatisticasComparativoHT = list(estatisticas = data.frame(HT_OBSERVADO = basePredicao[,
                                                                                                           mapeamento$ht2]), estatisticasDoModelo = data.frame())
  comparativoAjuste$estatisticasComparativoVolume = list(estatisticas = data.frame(VOLUME_OBSERVADO = comparativoAjuste$estatisticasComparativoGeral$estatisticas$VOLUME_OBSERVADO),
                                                         estatisticasDoModelo = data.frame())
  comparativoVal = list()
  comparativoVal$estatisticasComparativoGeral = list(estatisticas = data.frame(DAP_OBSERVADO = baseProjecao[,
                                                                                                            mapeamento$dap2], HT_OBSERVADO = baseProjecao[, mapeamento$ht2],
                                                                               VOLUME_OBSERVADO = fnCalculaVolume(dap = baseProjecao[,
                                                                                                                                     mapeamento$dap2], ht = baseProjecao[, mapeamento$ht2])),
                                                     estatisticasDoModelo = data.frame())
  comparativoVal$estatisticasComparativoDAP = list(estatisticas = data.frame(DAP_OBSERVADO = baseProjecao[,
                                                                                                          mapeamento$dap2]), estatisticasDoModelo = data.frame())
  comparativoVal$estatisticasComparativoHT = list(estatisticas = data.frame(HT_OBSERVADO = baseProjecao[,
                                                                                                        mapeamento$ht2]), estatisticasDoModelo = data.frame())
  comparativoVal$estatisticasComparativoVolume = list(estatisticas = data.frame(VOLUME_OBSERVADO = comparativoVal$estatisticasComparativoGeral$estatisticas$VOLUME_OBSERVADO),
                                                      estatisticasDoModelo = data.frame())
  for (i in 1:length(modelos)) {
    modelo = modelos[[i]]
    estatisticasV$formula = estatisticasVAj$formula = modelo()[[2]]
    nomes[i] = gsub("\\s", "", modelo()[[1]], perl = T)
    dirToSaveVol = dirToSaveVolvalidacao = dirToSaveDAP = dirToSaveHT = dirToSaveDAPvalidacao = dirToSaveHTvalidacao = NULL
    id = gsub("[.]", "*", modelo()[[1]], perl = T)
    if (!is.null(save)) {
      dirToSaveDAP = paste0(dirDAP, nomes[i], "/")
      dirToSaveHT = paste0(dirHT, nomes[i], "/")
      dirToSaveVol = paste0(dirVOLUME, nomes[i], "/")
      dirToSaveDAPvalidacao = paste0(dirToSaveDAP, "validacao/")
      dirToSaveHTvalidacao = paste0(dirToSaveHT, "validacao/")
      dirToSaveVolvalidacao = paste0(dirToSaveVol, "validacao/")
    }
    if (!is.null(graficos)) {
      graficos$mapeamento = mapeamento
    }
    grafic1 = grafic2 = grafic3 = grafic4 = grafic5 = grafic6 = graficos
    if (!is.null(graficos)) {
      if (!is.null(save)) {
        grafic1$save = dirToSaveDAP
        grafic2$save = dirToSaveHT
        grafic3$save = dirToSaveVolvalidacao
        grafic4$save = dirToSaveDAPvalidacao
        grafic5$save = dirToSaveHTvalidacao
        grafic6$save = dirToSaveVol
      }
      grafic1$titulo = grafic1$nome = paste0(nomes[i],
                                             " DAP Ajuste")
      grafic2$titulo = grafic2$nome = paste0(nomes[i],
                                             " HT Ajuste")
      grafic3$titulo = grafic3$nome = paste0(nomes[i],
                                             " Volume Validacao")
      grafic6$titulo = grafic6$nome = paste0(nomes[i],
                                             " Volume Ajuste")
      grafic4$titulo = grafic4$nome = paste0(nomes[i],
                                             " DAP Validacao")
      grafic5$titulo = grafic5$nome = paste0(nomes[i],
                                             " HT Validacao")
      grafic1$desc = paste0("ajuste.", id, ".dap")
      grafic2$desc = paste0("ajuste.", id, ".ht")
      grafic6$desc = paste0("ajuste.", id, ".volume")
      grafic4$desc = paste0("validacao.", id, ".dap")
      grafic5$desc = paste0("validacao.", id, ".ht")
      grafic3$desc = paste0("validacao.", id, ".volume")
      grafic1$data = grafic2$data = grafic6$data = baseTreino
      grafic3$data = grafic4$data = grafic5$data = baseProjecao
      grafic1$nomeParaExibir = nms[[j]]
      grafic4$nomeParaExibir = nms[[j + 1]]
      grafic2$nomeParaExibir = nms[[j + 2]]
      grafic5$nomeParaExibir = nms[[j + 3]]
      grafic3$nomeParaExibir = nms[[j + 4]]
      grafic6$nomeParaExibir = nms[[j + 5]]
      j = j + 6
    }
    estatistica = avaliaEstimativas(observado = comparativoVal$estatisticasComparativoGeral$estatisticas$VOLUME_OBSERVADO,
                                    estimado = (comparativoVal$estatisticasComparativoGeral$estatisticas[,
                                                                                                         paste0("VOLUME_ESTIMADO_", nomes[i])] = (comparativoVal$estatisticasComparativoVolume$estatisticas[,
                                                                                                                                                                                                            paste0("VOLUME_ESTIMADO_", nomes[i])] = (fnCalculaVolume(dap = ((ajusteDAPVAL = avaliaEstimativas(observado = baseProjecao[,
                                                                                                                                                                                                                                                                                                                                       mapeamento$dap2], estimado = (comparativoVal$estatisticasComparativoGeral$estatisticas[,
                                                                                                                                                                                                                                                                                                                                                                                                                              paste0("DAP_ESTIMADO_", nomes[i])] = (comparativoVal$estatisticasComparativoDAP$estatisticas[,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           paste0("DAP_ESTIMADO_", nomes[i])] = (predizer(ajuste = (ajusteDAP = (avaliaEstimativas(observado = baseTreino[,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          mapeamento$dap2], estimado = NULL, ajuste = modelo(y1 = mapeamento$dap1,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             y2 = mapeamento$dap2, base = baseTreino), graficos = grafic1,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   estatisticas = estatisticas, salvarEm = dirToSaveDAP,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   nome = paste0("ajuste DAP ", nomes[i]))))$ajuste,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          newdata = baseProjecao, force = forcePredict)))),
                                                                                                                                                                                                                                                                                                              graficos = grafic4, estatisticas = estatisticasV,
                                                                                                                                                                                                                                                                                                              salvarEm = dirToSaveDAPvalidacao, nome = paste0("validacao DAP ",
                                                                                                                                                                                                                                                                                                                                                              nomes[i])))$estimado), ht = ((ajusteHTVAL = avaliaEstimativas(observado = baseProjecao[,
                                                                                                                                                                                                                                                                                                                                                                                                                                                     mapeamento$ht2], estimado = (comparativoVal$estatisticasComparativoGeral$estatisticas[,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           paste0("HT_ESTIMADO_", nomes[i])] = (comparativoVal$estatisticasComparativoHT$estatisticas[,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      paste0("HT_ESTIMADO_", nomes[i])] = (predizer(ajuste = (ajusteHT = (avaliaEstimativas(observado = baseTreino[,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   mapeamento$ht2], estimado = NULL, ajuste = modelo(y1 = mapeamento$ht1,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     y2 = mapeamento$ht2, base = baseTreino), graficos = grafic2,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            estatisticas = estatisticas, salvarEm = dirToSaveHT,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            nome = paste0("ajuste HT ", nomes[i]))))$ajuste,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    newdata = baseProjecao, force = forcePredict)))),
                                                                                                                                                                                                                                                                                                                                                                                                                            graficos = grafic5, estatisticas = estatisticasV,
                                                                                                                                                                                                                                                                                                                                                                                                                            salvarEm = dirToSaveHTvalidacao, nome = paste0("validacao HT ",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                           nomes[i])))$estimado))))), graficos = grafic3,
                                    estatisticas = estatisticasV, salvarEm = dirToSaveVolvalidacao,
                                    nome = paste0("validacao Volume ", nomes[i]))
    estatistica$estatisticas$ajusteDAP = ajusteDAP$ajuste
    estatistica$estatisticas$ajusteHT = ajusteHT$ajuste
    estatt = estatistica$estatisticas$estatisticas
    estatistica$estatisticas$estatisticas = cbind(baseProjecao,
                                                  estatistica$estatisticas$estatisticas)
    eval(parse(text = paste0("dfestatisticas$", nomes[i],
                             " = estatistica")))
    if (!is.null(agruparPor))
      eval(parse(text = paste0("volumesPreditos$", nomes[i],
                               " = estatistica$estimado")))
    ranking = rbind(ranking, estatistica$ranking)
    comparativoAjuste$estatisticasComparativoGeral$estatisticas[,
                                                                paste0("DAP_ESTIMADO_", nomes[i])] = ajusteDAP$estimado
    comparativoAjuste$estatisticasComparativoGeral$estatisticas[,
                                                                paste0("HT_ESTIMADO_", nomes[i])] = ajusteHT$estimado
    comparativoAjuste$estatisticasComparativoGeral$estatisticas[,
                                                                paste0("VOLUME_ESTIMADO_", nomes[i])] = fnCalculaVolume(dap = ajusteDAP$estimado,
                                                                                                                        ht = ajusteHT$estimado)
    comparativoAjuste$estatisticasComparativoDAP$estatisticas[,
                                                              paste0("DAP_ESTIMADO_", nomes[i])] = ajusteDAP$estimado
    comparativoAjuste$estatisticasComparativoHT$estatisticas[,
                                                             paste0("HT_ESTIMADO_", nomes[i])] = ajusteDAP$estimado
    comparativoAjuste$estatisticasComparativoVolume$estatisticas[,
                                                                 paste0("VOLUME_ESTIMADO_", nomes[i])] = fnCalculaVolume(dap = ajusteDAP$estimado,
                                                                                                                         ht = ajusteHT$estimado)
    estatt2 = avaliaEstimativas(observado = comparativoAjuste$estatisticasComparativoGeral$estatisticas$VOLUME_OBSERVADO,
                                estimado = comparativoAjuste$estatisticasComparativoGeral$estatisticas[,
                                                                                                       paste0("VOLUME_ESTIMADO_", nomes[i])], estatisticas = estatisticasVAj,
                                salvarEm = dirToSaveVol, graficos = grafic6, nome = paste0("ajuste Volume ",
                                                                                           nomes[i]))
    for (name in names(estatt2$estatisticas$estatisticas)) {
      eval(parse(text = paste0("comparativoAjuste$estatisticasComparativoGeral$estatisticas$",
                               name, "_", nomes[i], " = estatt2$estatisticas$estatisticas",
                               name)))
      eval(parse(text = paste0("comparativoAjuste$estatisticasComparativoVolume$estatisticas$",
                               name, "_", nomes[i], " = estatt2$estatisticas$estatisticas",
                               name)))
    }
    for (name in names(ajusteDAP$estatisticas$estatisticas)) {
      eval(parse(text = paste0("comparativoAjuste$estatisticasComparativoGeral$estatisticas$DAP_",
                               name, "_", nomes[i], " = ajusteDAP$estatisticas$estatisticas$",
                               name)))
      eval(parse(text = paste0("comparativoAjuste$estatisticasComparativoDAP$estatisticas$",
                               name, "_", nomes[i], " = ajusteDAP$estatisticas$estatisticas$",
                               name)))
    }
    for (name in names(ajusteHT$estatisticas$estatisticas)) {
      eval(parse(text = paste0("comparativoAjuste$estatisticasComparativoGeral$estatisticas$HT_",
                               name, "_", nomes[i], " = ajusteHT$estatisticas$estatisticas$",
                               name)))
      eval(parse(text = paste0("comparativoAjuste$estatisticasComparativoHT$estatisticas$",
                               name, "_", nomes[i], " = ajusteHT$estatisticas$estatisticas$",
                               name)))
    }
    if (i == 1) {
      comparativoAjuste$estatisticasComparativoGeral$estatisticasDoModelo = data.frame(name = estatt2$estatisticas$estatisticasDoModelo$name)
      comparativoAjuste$estatisticasComparativoVolume$estatisticasDoModelo = data.frame(name = estatt2$estatisticas$estatisticasDoModelo$name)
      comparativoAjuste$estatisticasComparativoDAP$estatisticasDoModelo = data.frame(name = ajusteDAP$estatisticas$estatisticasDoModelo$name)
      comparativoAjuste$estatisticasComparativoHT$estatisticasDoModelo = data.frame(name = ajusteHT$estatisticas$estatisticasDoModelo$name)
    }
    eval(parse(text = paste0("comparativoAjuste$estatisticasComparativoGeral$estatisticasDoModelo$value_",
                             nomes[i], " = estatt2$estatisticas$estatisticasDoModelo$value")))
    eval(parse(text = paste0("comparativoAjuste$estatisticasComparativoDAP$estatisticasDoModelo$value_",
                             nomes[i], " = ajusteDAP$estatisticas$estatisticasDoModelo$value")))
    eval(parse(text = paste0("comparativoAjuste$estatisticasComparativoHT$estatisticasDoModelo$value_",
                             nomes[i], " = ajusteHT$estatisticas$estatisticasDoModelo$value")))
    eval(parse(text = paste0("comparativoAjuste$estatisticasComparativoVolume$estatisticasDoModelo$value_",
                             nomes[i], " = estatt2$estatisticas$estatisticasDoModelo$value")))
    for (name in names(estatt)) {
      eval(parse(text = paste0("comparativoVal$estatisticasComparativoGeral$estatisticas$",
                               name, "_", nomes[i], " = estatt$", name)))
      eval(parse(text = paste0("comparativoVal$estatisticasComparativoVolume$estatisticas$",
                               name, "_", nomes[i], " = estatt$", name)))
    }
    for (name in names(ajusteDAPVAL$estatisticas$estatisticas)) {
      eval(parse(text = paste0("comparativoVal$estatisticasComparativoGeral$estatisticas$DAP_",
                               name, "_", nomes[i], " = ajusteDAPVAL$estatisticas$estatisticas$",
                               name)))
      eval(parse(text = paste0("comparativoVal$estatisticasComparativoDAP$estatisticas$",
                               name, "_", nomes[i], " = ajusteDAPVAL$estatisticas$estatisticas$",
                               name)))
    }
    for (name in names(ajusteHTVAL$estatisticas$estatisticas)) {
      eval(parse(text = paste0("comparativoVal$estatisticasComparativoGeral$estatisticas$HT_",
                               name, "_", nomes[i], " = ajusteHTVAL$estatisticas$estatisticas$",
                               name)))
      eval(parse(text = paste0("comparativoVal$estatisticasComparativoHT$estatisticas$",
                               name, "_", nomes[i], " = ajusteHTVAL$estatisticas$estatisticas$",
                               name)))
    }
    if (i == 1) {
      comparativoVal$estatisticasComparativoGeral$estatisticasDoModelo = data.frame(name = estatistica$estatisticas$estatisticasDoModelo$name)
      comparativoVal$estatisticasComparativoVolume$estatisticasDoModelo = data.frame(name = estatistica$estatisticas$estatisticasDoModelo$name)
      comparativoVal$estatisticasComparativoDAP$estatisticasDoModelo = data.frame(name = ajusteDAPVAL$estatisticas$estatisticasDoModelo$name)
      comparativoVal$estatisticasComparativoHT$estatisticasDoModelo = data.frame(name = ajusteHTVAL$estatisticas$estatisticasDoModelo$name)
    }
    eval(parse(text = paste0("comparativoVal$estatisticasComparativoGeral$estatisticasDoModelo$value_",
                             nomes[i], " = estatistica$estatisticas$estatisticasDoModelo$value")))
    eval(parse(text = paste0("comparativoVal$estatisticasComparativoDAP$estatisticasDoModelo$value_",
                             nomes[i], " = ajusteDAPVAL$estatisticas$estatisticasDoModelo$value")))
    eval(parse(text = paste0("comparativoVal$estatisticasComparativoHT$estatisticasDoModelo$value_",
                             nomes[i], " = ajusteHTVAL$estatisticas$estatisticasDoModelo$value")))
    eval(parse(text = paste0("comparativoVal$estatisticasComparativoVolume$estatisticasDoModelo$value_",
                             nomes[i], " = estatistica$estatisticas$estatisticasDoModelo$value")))
  }
  salvarComparativo <- function(comparativoAjuste, comparativoVal,
                                local, prefixo) {
    write.csv(x = comparativoAjuste$estatisticas, file = paste0(local,
                                                                "comparativo ( ", prefixo, " ) de AJUSTE de modelos - estatisticas.csv"))
    write.csv(x = comparativoAjuste$estatisticasDoModelo,
              file = paste0(local, "comparativo ( ", prefixo, " ) de AJUSTE de modelos - estatistica dos modelos.csv"))
    write.csv(x = comparativoVal$estatisticas, file = paste0(local,
                                                             "comparativo ( ", prefixo, " ) da VALIDACAO dos modelos - estatisticas.csv"))
    write.csv(x = comparativoVal$estatisticasDoModelo, file = paste0(local,
                                                                     "comparativo ( ", prefixo, " ) da VALIDACAO dos modelos - estatistica dos modelos.csv"))
  }
  if (!is.null(save))
    salvarComparativo(comparativoAjuste$estatisticasComparativoGeral,
                      comparativoVal$estatisticasComparativoGeral, save,
                      "GERAL")
  if (!is.null(dirDAP))
    salvarComparativo(comparativoAjuste$estatisticasComparativoDAP,
                      comparativoVal$estatisticasComparativoDAP, dirDAP,
                      "DAP")
  if (!is.null(dirHT))
    salvarComparativo(comparativoAjuste$estatisticasComparativoHT,
                      comparativoVal$estatisticasComparativoHT, dirHT,
                      "HT")
  if (!is.null(dirVOLUME))
    salvarComparativo(comparativoAjuste$estatisticasComparativoVolume,
                      comparativoVal$estatisticasComparativoVolume, dirVOLUME,
                      "VOLUME")
  rownames(ranking) = nomes
  ranking = ranking[order(ranking$rankingB0, ranking$rankingB1),
                    ]
  ranking$rank = list(1:nrow(ranking))[[1]]
  rank = ranking[, c("rank", "b0", "b1")]
  if (!is.null(salvar))
    capture.output(rank, file = paste0(salvar$diretorio,
                                       " rank Test F.txt"))
  print(rank)
  if (!is.null(agruparPor)) {
    str = paste0("SELECT ", agruparPor, ", SUM(", nomes[1],
                 ") AS '", nomes[1], "'")
    if (2 <= length(nomes))
      for (i in 2:length(nomes)) str = paste0(str, ", SUM(",
                                              nomes[i], ") AS '", nomes[i], "'")
      str = paste0(str, "from volumesPreditos GROUP BY ", agruparPor)
      if (!is.null(save)) {
        write.csv(x = basePredicao, file = paste0(save, "basePredicao.csv"))
        write.csv(x = baseProjecao, file = paste0(save, "baseProjecao.csv"))
      }
      print("agrupando...")
      volumesPreditos = sqldf(str)
      print("atribuindo...")
      data = atualizaCampoBase(camposAtualizar = setdiff(names(volumesPreditos),
                                                         agruparPor), baseAgrupada = volumesPreditos, baseAtualizar = baseW,
                               keys = agruparPor)
  }
  else {
    data = list(predicao = baseTreino, projecao = baseProjecao)
  }
  return(list(estatisticas = dfestatisticas, base = data, ranking = rank,
              comparativoAjuste = comparativoAjuste, comparativoValidacao = comparativoVal))
}

Try the ITGM package in your browser

Any scripts or data that you put into this service are public.

ITGM documentation built on Jan. 20, 2021, 5:06 p.m.