Сейчас я работаю над проектом, который включает использование пакета xgboost в R для правильной цензуры конечных точек времени до события из двумерного исследования. Похоже, пакет xgboost не имеет встроенной целевой функции для данных о времени до события, подвергнутых правильной цензуре, поэтому я написал свою настраиваемую целевую функцию, которая представляет собой частичное отрицательное значение вероятности записи в журнал в соответствии с alivecomp package as
survobj <- function(preds, dtrain) {
labels <- getinfo(dtrain, "label")
n <- length(preds)
r <- rank(labels)
ita <- preds
expita <- exp(ita)
dono <- rep(0, n)
grad.dono <- rep(0, n)
for (i in 1:n) {
dono[i] <- sum(expita[r >= r[i]])
# derivative of dono
grad.dono[i] <- sum(t.mod[r >= r[i]] * expita[r >= r[i]])
}
# gradient and hessian of the log partial likelihood
# llk <- -(ita - log(dono))*event ### negative log partial likelihood
grad <- -(t.mod - grad.dono / dono)*event
hess <- (dono^2 - grad.dono^2)/ dono^2 * event
return(list(grad = grad, hess = hess))
}
Поскольку эта настраиваемая целевая функция включает группу лечения и индекс цензуры. Мой вопрос заключается в том, можно ли передать индикатор групповой обработки и индекс цензуры в настраиваемую целевую функцию в качестве дополнительных аргументов? Я обнаружил, что аргумент dtrain относится к классу DMatrix, и может быть возможно перенести эту информацию, изменив структуру DMatrix, есть ли способ передать эту информацию в DMatrix?
Спасибо,
Есен