# LIBRERIAS Y DATOS
library(neuralnet)
library(ggplot2)
library(readxl)
options(java.parameters = "-Xmx4g" )
#Objetos aleatorios:
set.seed(65)
### Aquí, generamos nuestra tabla de datos a partir de los valores anteriores:
squads<-tibble::tribble(
~Parto, ~Sexo, ~Pesoi, ~Peso1, ~Peso2, ~Peso3, ~Peso4, ~Peso5, ~Peso6,
1, 1, 3.7, 5, 6.15, 7.45, 8.25, 9.1, 10.65,
2, 1, 3.15, 4.75, 5.8, 6.45, 7.3, 8.4, 9.1,
3, 2, 3.55, 4.7, 5.9, 6.7, 8.15, 9.55, 11.15,
1, 2, 3.65, 4.85, 5.7, 6.65, 7.65, 9.5, 10.5,
2, 2, 3.75, 5, 6.15, 7.3, 7.85, 9.6, 10.7,
3, 2, 4.25, 5.35, 6.35, 8, 9.4, 11.45, 12.7
)
head(squads)
datos <- head(squads)
n <- nrow(datos) ###Contabiliza el número de filas
# Toma una muestra aleatoria:
muestra <- sample(n, n * .70)
# Matriz de entrenamiento
train <- datos[muestra, ]
# Matriz de prueba
test <- datos[-muestra, ]
#Normalizamos las variables:
maxs <- apply(train, 2, max) #valores maximos para el entrenamiento
mins <- apply(train, 2, min) #valores manimos para el entrenamiento
datos_nrm <- as.data.frame(scale(datos, center = mins, scale = maxs - mins))
train_nrm <- datos_nrm[muestra, ]
test_nrm <- datos_nrm[-muestra, ]
nms <- names(train_nrm)
frml <- as.formula(paste("Peso1+Peso2+Peso3+Peso4+Peso5+Peso6 ~",
paste(nms[!nms %in% "Peso1+Peso2+Peso3+Peso4+Peso5+Peso6"],collapse = " + ")))
# MODELO
modelo.nn <- neuralnet(frml,
data = train_nrm,
hidden = c(4),
threshold = 0.01,
algorithm = "rprop+",
learningrate = 0.005,)
#Generamos:
modelo.nn
# PREDICCION
pr.nn <- compute(modelo.nn,within(test_nrm,rm(Peso1,Peso2,Peso3,Peso4,Peso5,Peso6)))
En esta ultima linea me sale el error: Error in [.data.frame(newdata, , object$model.list$variables) : undefined columns selected
Se transoforma el valor escalar al valor nominal original
Aqui ya insertamos todas nuestras variables de salida para poder general nuestros valores:
peso.predict <- (pr.nn$net.result*(max(datos$Peso1)-min(datos$Peso1))+min(datos$Peso1))+
((max(datos$Peso2)-min(datos$Peso2))+min(datos$Peso2))+
((max(datos$Peso3)-min(datos$Peso3))+min(datos$Peso3))+
((max(datos$Peso4)-min(datos$Peso4))+min(datos$Peso4))+
((max(datos$Peso5)-min(datos$Peso5))+min(datos$Peso5))+
((max(datos$Peso6)-min(datos$Peso6))+min(datos$Peso6))
peso.predict
peso.real <- ((test_nrm$Peso1)*(max(datos$Peso1)-min(datos$Peso1))+min(datos$Peso1))+
((max(datos$Peso2)-min(datos$Peso2))+min(datos$Peso2))+
((max(datos$Peso3)-min(datos$Peso3))+min(datos$Peso3))+
((max(datos$Peso4)-min(datos$Peso4))+min(datos$Peso4))+
((max(datos$Peso5)-min(datos$Peso5))+min(datos$Peso5))+
((max(datos$Peso6)-min(datos$Peso6))+min(datos$Peso6))
#Generamos:
peso.real
Hallamos la suma de error cuadrático:
-----------------------------------------------------
se.nn <- sum((peso.real- peso.predict)^2)/nrow(test_nrm)
se.nn
#Generamos nuestra red neuronal:
-----------------------------------------------
Graficamos:
qqplot(x=peso.real, y=peso.predict, geom=c("point","smoth"), method="lm",
main=paste(" Real Vs Prediccion\nSuma de Error Cuadratico=",round(se.nn,2)))
Red
plot(modelo.nn)
Se transoforma el valor escalar al valor nominal original
Aqui ya insertamos todas nuestras variables de salida para poder general nuestros valores:
peso.predict <- (pr.nn$net.result*(max(datos$Peso1)-min(datos$Peso1))+min(datos$Peso1))+
((max(datos$Peso2)-min(datos$Peso2))+min(datos$Peso2))+
((max(datos$Peso3)-min(datos$Peso3))+min(datos$Peso3))+
((max(datos$Peso4)-min(datos$Peso4))+min(datos$Peso4))+
((max(datos$Peso5)-min(datos$Peso5))+min(datos$Peso5))+
((max(datos$Peso6)-min(datos$Peso6))+min(datos$Peso6))
peso.predict
peso.real <- ((test_nrm$Peso1)*(max(datos$Peso1)-min(datos$Peso1))+min(datos$Peso1))+
((max(datos$Peso2)-min(datos$Peso2))+min(datos$Peso2))+
((max(datos$Peso3)-min(datos$Peso3))+min(datos$Peso3))+
((max(datos$Peso4)-min(datos$Peso4))+min(datos$Peso4))+
((max(datos$Peso5)-min(datos$Peso5))+min(datos$Peso5))+
((max(datos$Peso6)-min(datos$Peso6))+min(datos$Peso6))
#Generamos:
peso.real
Hallamos la suma de error cuadrático:
-----------------------------------------------------
se.nn <- sum((peso.real- peso.predict)^2)/nrow(test_nrm)
se.nn
#Generamos nuestra red neuronal:
-----------------------------------------------
Graficamos:
qqplot(x=peso.real, y=peso.predict, geom=c("point","smoth"), method="lm",
main=paste(" Real Vs Prediccion\nSuma de Error Cuadratico=",round(se.nn,2)))
Red
plot(modelo.nn)
Agradeceria su apoyo porfavor
DATOS:
Encabezados: Parto, Sexo, Pesoi, Peso1, Peso2, Peso3, Peso4, Peso5, Peso6
_____________1____1___3.70___5.00___6.15___7.45__8.25__9.10__10.65
_____________1____1___3.15___4.75___5.80___6.45__7.30__8.40___9.10
_____________1____2___3.55___4.70___5.90___6.70__8.15__9.55___11.15
El trabajo es sobre construir una RNA con 3 variables de entrada (Parto, Sexo, Pesoi) y 6 variables de salida (Peso1.Peso2,Peso3,Peso4,Peso5,Peso6)