В настоящее время я пытаюсь разработать и откалибровать модель, используя процедуру перекрестной проверки для определения значений лямбда и альфа в регрессии эластичной сетки, используя glmnet
. Переменная результата является двоичной (asd) с множеством факторных и нефакторных кандидатов, независимых предикторов.
# Define factors
xfactors <- model.matrix(asd~sex+asa+smoke+c5over12+c7over12, data3)[,-1]
# Combine with non-factor variables
x <- data.matrix(data.frame(data3$age, data3$bmi, data3$fumonths, data3$dosym, data3$lordpre,
data3$lordpost, data3$lordfinal, data3$svapre, data3$svapost, data3$svafinal,
data3$fusepre, data3$fusepost, data3$fusefinal, data3[,48:110], xfactors))
# Define outcome
y <- as.factor(data3$asd)
# Cross-validation to ID alpha & lambda
set.seed(123)
registerDoParallel(cores = 4)
a <- seq(0, 1, 0.01)
search <- foreach(i = a, .combine = rbind) %dopar% {
cv.net <- cv.glmnet(x, y, family = "binomial", nfolds = 10, type.measure =
"deviance", paralle = TRUE, alpha = i)
data.frame(cvm = cv.net$cvm[cv.net$lambda == cv.net$lambda.min], lambda.min =
cv.net$lambda.min, alpha = i)
}
cv3 <- search[search$cvm == min(search$cvm), ]
#Model built with cross-validated selected alpha and lambda
model <- glmnet(x, y, family = "binomial", lambda = cv3$lambda.min, alpha = cv3$alpha)
Однако при попытке калибровать модель по обучающим данным, используя predict
# Get probabilities for training set
mypred <- predict(model, type="response", s=cv3$lambda.min, newx=x)
# Define calibration & plot
v <- val.prob(mypred, data3$asd, m=4, cex=.5)
plot(v)
Я получаю следующую кривую:
Я пытаюсь понять, почему график фактических и прогнозируемых вероятностей принимает логарифмическую зависимость (кажется, что это график общего уравнения регрессии? ). Есть ли в моем коде ошибка или модель просто плохо откалибрована?