R/Tasacion.R

Tasacion <- function(Directorio){
  #Carga todas las funciones
  sapply(list.files(pattern="[.]R$", path="R/", full.names=TRUE), source)
  ListaDeDatos <- LeerArchivos(Directorio)
  
  TipologiaEstimacion <- ListaDeDatos$Estimacion[,"Tipologia"]
  
  Variables <- SeleccionarVariables(ListaDeDatos$Muestra, TipologiaEstimacion)
  VariablesCaso <- SeleccionarVariables(ListaDeDatos$Estimacion, TipologiaEstimacion)
  
  #Datos Auxiliares
  OtrasVariablesCaso <- SeleccionarOtrasVariables(ListaDeDatos$Estimacion)
  OtrasVariables <- SeleccionarOtrasVariables(ListaDeDatos$Muestra)
  
  #Hay que poner este valor si es 1, 2 รณ 7
  ElementosConValor7 <- sum(OtrasVariables[,"DatosDeLaPlanta"] == 7)
  DatosASumar <- OtrasVariables[,"DatosDeLaPlanta"] == 7
  TotalDePlantaParaElementosConValor7 <- sum(OtrasVariables[DatosASumar,"NumeroDePlanta"])
  
  OtrasVariablesCaso[is.na(OtrasVariablesCaso[,"NumeroDePlanta"]), "NumeroDePlanta"] <- TotalDePlantaParaElementosConValor7/ElementosConValor7
  if(OtrasVariablesCaso[,"DatosDeLaPlanta"] == 0) OtrasVariablesCaso[,"DatosDeLaPlanta"] <-  5
  

  VariablesMuestraTransformadas <- TransformarVariables(Variables)
  VariablesCasoTransformadas <- TransformarCaso(VariablesCaso, VariablesMuestraTransformadas)
  
  Coeficientes <- ObtieneDatosDelModelo(ListaDeDatos$Parametros, TipologiaEstimacion)

  Rangos <- ObtieneRangosDelModelo_aj(VariablesMuestraTransformadas, VariablesCasoTransformadas)
  DatoCoeficiente <- ObtieneCoeficienteDelModelo_aj(VariablesCasoTransformadas, Rangos, Coeficientes)
  
  #Distancia
  MatrizDatosCaso <- VariablesCasoTransformadas[rep(row.names(VariablesCasoTransformadas), nrow(Variables)), 1:6]
  MatrizRangos <- Rangos[rep(row.names(Rangos), nrow(Variables)), 1:6]
  MatrizCoeficientes <- Coeficientes[rep(row.names(Coeficientes), nrow(Variables)), 1:6]
  if (TipologiaEstimacion==1){
    Matriz_b <- subset(ListaDeDatos$Parametros, Tipologia=="Unifamiliar" & Tipo=="b", select = c(4:9))
  } else {
    Matriz_b <- subset(ListaDeDatos$Parametros, Tipologia=="Plurifamiliar" & Tipo=="b", select = c(4:9))      
  }
  Matriz_b <- Matriz_b[rep(row.names(Matriz_b), nrow(Variables)), 1:6]
  
  Distancia <- as.matrix(rowSums(((VariablesMuestraTransformadas[,2:6] - MatrizDatosCaso[,2:6])/MatrizRangos[,2:6])^2 * MatrizCoeficientes[,1:5]),na.rm = TRUE)
  colnames(Distancia) <- "Distancia"
  
  Ly_Transformada <- as.matrix(VariablesMuestraTransformadas[,"ValorUnitarioDeMercado"] + rowSums((MatrizDatosCaso[,2:6] - VariablesMuestraTransformadas[,2:6])*Matriz_b[,1:5]),na.rm = TRUE)
  colnames(Ly_Transformada) <- "Ly_Transformada"
  
  jerarquia <- as.matrix(order(Distancia))
  DistanciaOrdenada <- as.matrix(Distancia[order(Distancia)])
  rownames(DistanciaOrdenada) <- jerarquia
  
  p_original <- as.matrix(abs(log(Distancia))/log(1/DatoCoeficiente))
  colnames(p_original) <- "p_original"
  
  Tipologia <- as.matrix(ListaDeDatos$Muestra[,"Tipologia"])
  colnames(Tipologia) <- "Tipologia"
  VariablesMuestraTransformadas <- cbind(VariablesMuestraTransformadas, Distancia, Ly_Transformada, p_original, Tipologia)
  
  MuestraOrdenada <- head(VariablesMuestraTransformadas[order(VariablesMuestraTransformadas[,"Distancia"]),], 30)
  Total_p_original <- sum(MuestraOrdenada[,"p_original"])
  
  Pesos <- as.matrix(MuestraOrdenada[,"p_original"]*30/Total_p_original)
  colnames(Pesos) <- "Pesos"
  
  MuestraOrdenada <- cbind(MuestraOrdenada, Pesos)
  
  OtrasVariablesCaso <- ObtieneOtrasVariables(OtrasVariablesCaso)
  
  OtrasVariables <- ObtieneOtrasVariables(OtrasVariables)
  
  CorreccionOtrasVariables <- CorreccionPorOtrasVariables(OtrasVariables, OtrasVariablesCaso, ListaDeDatos$Parametros)
  
  Correccion <- CorreccionOtrasVariables[rownames(MuestraOrdenada)]
  if (TipologiaEstimacion==1){
    wCorregido <- MuestraOrdenada[,"Ly_Transformada"]
  } else {
    wCorregido <- log(Correccion*exp(MuestraOrdenada[,"Ly_Transformada"]))
  }
  PesosXwCorregido <- MuestraOrdenada[,"Pesos"]*wCorregido
  PesosXwCorregidoCuadrado <-  MuestraOrdenada[,"Pesos"]*wCorregido^2
  SumaPesos <- cumsum(MuestraOrdenada[,"Pesos"])
  SumaPesosXwCorregido <- cumsum(PesosXwCorregido)
  Estimacion <- SumaPesosXwCorregido/SumaPesos
  SumaPesosXwCorregidoCuadrado <- cumsum(PesosXwCorregidoCuadrado)
  SumaPesosXwCorregidoCuadradoEntreSumaPesos <- SumaPesosXwCorregidoCuadrado/SumaPesos
  s <- sqrt(SumaPesos*round(SumaPesosXwCorregidoCuadradoEntreSumaPesos-Estimacion^2,8)/(SumaPesos-1))
  rndSumaPesosMenos1 <- round(SumaPesos-1)
  rndSumaPesosMenos1 <- ifelse(rndSumaPesosMenos1 == 0, 1, rndSumaPesosMenos1)
  t <- ifelse(rndSumaPesosMenos1>30, rndSumaPesosMenos1,qt(.975, 1:30)[rndSumaPesosMenos1])
  sxt <- s*t
  MuestraOrdenada <- cbind(MuestraOrdenada, Correccion, wCorregido, PesosXwCorregido, PesosXwCorregidoCuadrado, SumaPesos, SumaPesosXwCorregido, 
                           Estimacion, SumaPesosXwCorregidoCuadrado, SumaPesosXwCorregidoCuadradoEntreSumaPesos, s, rndSumaPesosMenos1, t, sxt)
  
  
  MuestraOrdenadaFiltrada <- MuestraOrdenada[6:30,]
  ValorDistribucionT <- ifelse(min(MuestraOrdenadaFiltrada[,"sxt"])>=log(1.05), min(MuestraOrdenadaFiltrada[,"sxt"]), MuestraOrdenadaFiltrada[,"sxt"][25])
  
  Seleccionados <- head(MuestraOrdenada, 5)
  MuestraDeCorte <- subset(MuestraOrdenadaFiltrada, MuestraOrdenadaFiltrada[,"sxt"] == ValorDistribucionT)
  MuestrasAdicionales <- subset(MuestraOrdenadaFiltrada, MuestraOrdenadaFiltrada[,"Distancia"] <= MuestraDeCorte[,"Distancia"])
  Seleccionados <- rbind(Seleccionados, MuestrasAdicionales)
  Estimacion <- CalcularTasacion(Seleccionados)
  CalidadEstimacion <- CalcularCalidadTasacion(ListaDeDatos$Estimacion, MuestraOrdenada, Seleccionados, Coeficientes, VariablesCasoTransformadas)
  
  GrabarTasacion(Directorio, c(Estimacion, CalidadEstimacion))
}
FMunyoz/Stima documentation built on May 6, 2019, 4:09 p.m.