Otimizar os parametros do modelo usando o pacote XGboots

Eu estou fazendo um leave-one-out e aplicando um modelo simples, como por exemplo: o ARIMA(p=1,d=1,q=1). O banco de dados trata de crescimento de 71 animais, com pesagem a cada dia,
tendo um total de 64 dias cada, sendo que quero prever os últimos 7 dias (tem_predicao = 7). Na linha 28 desse código queria substituir por uma função do XGboots que otimize a escolha do parametros (media_par <- apply(param, 2, mean) #eu não gostaria de usa a média). Como poderia implemetar isso, usando o XGboots?

ARIMA_110 <- function(dados, tem_predicao, plot = TRUE){
tamanho_serie = 64
end_obs = tamanho_serie - tem_predicao
id = unique(dados$idanimal)
avaliacao = NULL
estatistica = NULL
param = NULL
timeserieforecast = NULL
pdf(file = paste0(directory,“ARIMA110”, format(Sys.time(), “%d%m_%H%M%S”),".pdf"))
for (j in 1:length(id)){
idanimal.test = id[j]
idanimal.train = setdiff(id, idanimal.test)
param = NULL
for (i in idanimal.train){
identifica = subset(dados, idanimal == i)
pesos = identifica[1:end_obs, “PESOS”]
end_serie = identifica[(end_obs+1):tamanho_serie, “PESOS”]
#=====================================================
#Step 1: Decompose Your Data
count_ma = ts(na.omit(identifica[, “PESOS”]), frequency = 7)
decomp = stl(count_ma, s.window = “periodic”)
deseasonal_cnt <- seasadj(decomp)
#=====================================================
p = 1; d = 1; q = 0
model <- arima(deseasonal_cnt, order=c(p,d,q))
param <- rbind(param, model$coef)
}
media_par <- apply(param, 2, mean) # XGBoot para fazer a otimização da melhor escolha do parametro e não usar simplesmente a media

#=====================================================
identifica = subset(dados, idanimal == idanimal.test)
pesos = identifica[1:end_obs, "PESOS"]
end_serie = identifica[(end_obs+1):tamanho_serie, "PESOS"]
#=====================================================

# predicao usando o parametro estimado no traino
prev = NULL
for (k in 1:tem_predicao){
  count_ma <- ts(na.omit(pesos), frequency = 7)
  decomp <- stl(count_ma, s.window = "periodic")
  deseasonal_cnt <- seasadj(decomp)
  model <- arima(deseasonal_cnt, order = c(p, d, q))  
  prev1 <- as.numeric( pesos[length(pesos)] + media_par*(pesos[length(pesos)] - pesos[length(pesos)-1]) )   # modelo da integra
  prev <- c(prev, prev1)
}

# Ajuste do proprio conjunto de dados - não necessariamente é o modelo do train
fit1 <- auto.arima(deseasonal_cnt, seasonal=FALSE)
fit_ARIMA = arimaorder(fit1)
fcast1 <- forecast(fit1, h=tem_predicao)
value_forcat = as.numeric(fcast1$mean)
forcat_weigth = 0.7*(value_forcat) + 0.3*(prev)

model_test = c(pesos, value_forcat); length(model_test)
model_train = c(pesos, prev); length(model_train)
model_mix = c(pesos, forcat_weigth); length(model_mix)

idanimal <- rep(idanimal.test, tamanho_serie)
timeserie <- cbind(idanimal, model_test, model_train, model_mix)
timeserieforecast <- rbind(timeserie, timeserieforecast)

if (plot==TRUE){
  plot(timeserie[, "model_mix"], type = "l", col = 2, main = idanimal.test)
  points(identifica$PESOS , type = "l", col = 3)
  legend("topleft", legend = c("forecast", "observed"), lty=c(1,1), lwd = c(1,1), col=c(2,3))
}

}
dev.off()
return(timeserieforecast)
}

tem_predicao = 7

T = ARIMA_110 (dados, tem_predicao, plot = TRUE)

Oioi!! Vc pode disponibilizar uma amostrinha dos dados que seja suficiente pra rodar o código? Vai ajudar!

Segue os dadosvhttps://drive.google.com/file/d/1_npbfPzwTzOqajPYR7EDaPRO7fOTygqX/view?usp=sharing