Я пытаюсь написать функцию, которая будет выполнять k-кратную перекрестную проверку модели логистической регрессии с использованием разных пороговых значений. Под порогами я подразумеваю, с какой вероятностью выходные данные модели превращаются в прогноз 1 или 0. Например, используя порог 0,4, вероятность 0,42 будет закодирована как прогноз 1.
Чтобы выполнить перекрестную проверку с использованием логистической регрессии, мне нужно создать собственную функцию стоимости (по умолчанию вычисляется MSE) и передать ее функции cv.glm(). Приведенная ниже функция будет работать, если я использую статический порог, но я хочу, чтобы порог менялся в каждом цикле, поэтому я встроил свою функцию стоимости в свой цикл. Я получаю сообщение об ошибке «объект, который я не нашел». Есть ли способ создать новую функцию внутри функции, используя аргументы, не указанные во встроенной функции?
logit.CV<-function(data, model, K, firstThreshold, lastThreshold) {
error<-NULL
for(i in seq_along(firstThreshold:lastThreshold) {
costFunction<-function(y, pred) {
pred<-ifelse(pred > (i+firstThreshold-1)/10, 1, 0)
mean(abs(y-pred) > .5)
}
error[i]<-cv.glm(amData, logit.mod, cost=costFunction, K=10)$delta[1]
}
print(error)
}
cv.glm
, которая использует...
для передачи дополнительных аргументов в функциюcost
, а затем каждый раз передаетi
через цикл. - person joran   schedule 23.05.2014