#' Balancear la variable objetivo.
#'
#' @param archivoDatos Nombre del archivo con los datos.
#' @return No retorna nada solo retorna una tabla con la variable
#' objetivo y las variables predictoras.
#' @export
ds_resumen_modelo <- function (archivoDatos) {
datosEntrada = read.csv (archivoDatos)
variables = names (datosEntrada)
varObjetivo = variables [1]
varPredictoras = variables [-1]
nPred = length(varPredictoras)
rowsVarObj = c (varObjetivo, rep ("", nPred-1))
df = data.frame (Variable_Objetivo=rowsVarObj,
Variables_Predictoras=varPredictoras)
return (df)
}
#' Retorna la formula del modelo a ajustar deacuerdo a los datos de entrada.
#' @param archivoDatos Nombre del archivo con los datos.
#' @export
ds_formula_modelo <- function (archivoDatos) {
datosEntrada = read.csv (archivoDatos)
variables = names (datosEntrada)
varObjetivo = variables [1]
varPredictoras = variables [-1]
nPred = length(varPredictoras)
formulaModelo = as.formula (paste (varObjetivo,"~", paste (varPredictoras, collapse="+")))
return (formulaModelo)
}
#' Binariza la variable objetivo a 1: EXITO y 0: FRACASO
#' @param archivoDatos Nombre del archivo con los datos sin tranformar.
#' @return datos transformados.
#' @import openxlsx
#' @export
ds_binarizar <- function (archivoDatos) {
datos = read.csv (archivoDatos)
datos$SituacionFinal = as.character (datos$SituacionFinal)
datos$SituacionFinal [datos$SituacionFinal=="EXITO"] = 1
datos$SituacionFinal [datos$SituacionFinal=="FRACASO"] = 0
datos$SituacionFinal = as.factor (datos$SituacionFinal)
write.csv (datos, "datos_Binarizados.csv", row.names=F)
write.xlsx (datos, "datos_Binarizados.xlsx", rowNames=F)
cat ("\nSe guardo los nuevos datos en el archivo 'datos_Binarizados.csv'\n")
ver (datos)
}
#' Entrena un modelo de regresión lógica
#'
#' @param archivoDatos Nombre del archivo con los datos.
#' @export
ds_entrenar_modelo <- function (archivoDatos) {
formulaModelo = ds_formula_modelo (archivoDatos)
datosEntrenamiento = read.csv (archivoDatos)
modelo = glm (formulaModelo, family=binomial(link="logit"), maxit=100, data=datosEntrenamiento)
nDatos = nrow (datosEntrenamiento)
cat (sprintf ("\nModelo logit entrenado con %s datos de desmovilizados\n", nDatos))
return (modelo)
}
#' Prueba un modelo de regresión lógica.
#'
#' @param archivoDatos Nombre del archivo con los datos.
#' @export
ds_probar_modelo <- function (modelo, archivoDatos) {
datosPrueba = read.csv (archivoDatos)
resultados <- predict (modelo,newdata=datosPrueba,type='response')
resultados <- ifelse(resultados > 0.5,1,0)
errorDeClasificacion <- mean(resultados != datosPrueba$SituacionFinal)
cat (sprintf ("\nPrecision de la Regresión Lógistica: %s\n", 1-errorDeClasificacion))
}
#' Selecciona las variables más significativas de un modelo de Regresión Logística.
#'
#' @param archivoDatos Nombre del archivo con los datos.
#' @export
ds_seleccionar_variables <- function (archivoDatosEntrenamiento, archivoDatosPruebas) {
set.seed(123)
datosEntrenamiento = read.csv (archivoDatosEntrenamiento)
# Se define el modelo sin variables: solo con el intercepto
modeloSimple = glm (SituacionFinal~1, family=binomial(link="logit"), data=datosEntrenamiento)
# Se define el modelo con todas las variables
modeloCompleto <- glm (SituacionFinal~., family=binomial(link="logit"), data=datosEntrenamiento)
# Ejecutla la regresión por pasos
forward <- step(modeloSimple, direction='forward', scope=formula(modeloCompleto), trace=0)
# Se muestran los resultados
resultados = forward$anova [,c(1,3,6)]
resultados [,1] = gsub ("[+] ", "", resultados [,1])
# Seleccion de variables en los archivos de datos
variablesSeleccionadas = c("SituacionFinal", resultados [c(-1),1])
datosPruebas = read.csv (archivoDatosPruebas)
datosEntrenamientoSel = datosEntrenamiento [,variablesSeleccionadas]
datosPruebasSel = datosPruebas [,variablesSeleccionadas]
write.csv (datosEntrenamientoSel, "datos_Entrenamiento_Seleccionado.csv", row.names=F)
write.csv (datosPruebasSel, "datos_Pruebas_Seleccionado.csv", row.names=F)
cat (sprintf ('\n Se crearon dos nuevos archivos: "datos_Entrenamiento_Seleccionado.csv" y "datos_Pruebas_Seleccionado.csv"\n'))
return (resultados)
}
#' Evalúa diferentes métricas a un modelo.
#'
#' @importFrom caret confusionMatrix
#' @import ROCR Metrics
#' @export
ds_evaluar_modelo <- function (modelo, archivoDatosPruebas) {
# suppressMessages (library(caret))
datosPruebas = read.csv (archivoDatosPruebas)
# Use your model to make predictions, in this example newdata = training set, but replace with your test set
pdata <- predict(modelo, newdata = datosPruebas, type = "response")
# use caret and compute a confusion matrix
reales = as.factor (datosPruebas$SituacionFinal)
predichos = as.factor (as.numeric (pdata > 0.5))
res = caret::confusionMatrix(data = predichos, reference = reales)
Matrix = res$table
names (dimnames (Matrix)) = c ("Predichos", "Reales")
Exactitud = res$byClass ["Balanced Accuracy"]
Sensibilidad = res$byClass ["Sensitivity"]
Especificidad = res$byClass ["Specificity"]
Recall = res$byClass ["Recall"]
cat (sprintf ("\nMatriz de confusión: \n"))
cat ("--------------------------\n")
print (Matrix)
cat ("--------------------------")
cat (sprintf ("\nExactitud : %s%s\n", round (100*Exactitud,1),"%"))
cat (sprintf ("\nSensibilidad : %s%s\n", round (100*Sensibilidad,1),"%"))
cat (sprintf ("\nEspecificidad : %s%s\n", round (100*Especificidad,1),"%"))
# Calculo de la curva ROC
pr = ROCR::prediction(strtoi (predichos), strtoi (reales))
perf = ROCR::performance(pr,measure = "tpr",x.measure = "fpr")
plot(perf) > Metrics::auc(reales,predichos)
}
#' Predice la variable objetivo "SituacionFinal".
#'
#' Realiza la predicción de la variable objetivo "SituacionFinal"
#' a partir de los datos de ocho variables: DesembolsoBIE,
#' PoseeServicioSocial, OcupacionEconomica, EstadoISUN,
#' NivelEducativo, ExGrupo, ServiciosPúblicos, y TipoVivienda
#'
#' @param modelo Modelo cargado o entrenado a utilizar.
#' @param archivoDatos Nombre del archivo de datos con la
#' información de las 8 variables para cada individuo.
#' @return Retorna el mismo conjunto de datos adicionado al
#' inicio la columna "SituacionFinal" con los valores predichos
#' de EXITO o FRACASO.
#' @export
ds_predecir <- function (archivoDatos) {
modelo = ds_cargar_modelo ()
datosPruebas = read.xlsx (archivoDatos)
# Use your model to make predictions, in this example newdata = training set, but replace with your test set
pdata <- predict (modelo, newdata = datosPruebas, type = "response")
# use caret and compute a confusion matrix
predichos = as.numeric (pdata > 0.5)
datosResultados = data.frame (PREDICCION=predichos, datosPruebas)
datosResultados$PREDICCION [datosResultados$PREDICCION==1] = "EXITO"
datosResultados$PREDICCION [datosResultados$PREDICCION==0] = "FRACASO"
write.xlsx (datosResultados, "datos_Predichos.xlsx", rowNames=F)
cat ("\nSe creó el archivo de resultados 'datos_Predichos.xlsx'\n")
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.