library(tidyverse)
library(caret)
library(here)
library(inspectdf)
library(glmnet)
library(ROSE)
rm(seqs)
load(here("notebooks/data/nback_seqs.Rd"))
seqs.raw <- seqs
seqs <- seqs.raw %>%
mutate(
rt_cat=cut(rt,breaks=c(-Inf,-1000,+500,+Inf), labels=c("low","mid","high")),
) %>%
filter(rt_cat!="low") %>%
mutate(
rt_cat = droplevels(rt_cat)
) %>%
drop_na(rt, rt_cat, correct, tl,sl)
f <- rt_cat ~ n + t + v
#f <- rt_cat ~ n + t + v + s + l + vl + sl + tl + ul + ll
#f <- correct ~ n + participant
train.indices <- createDataPartition(seqs[[toString(f[[2]])]], p = .8, list =FALSE)
seqs.train.imbalanced <- seqs[train.indices,]
seqs.train <- seqs.train.imbalanced
seqs.train <- ROSE(f, data = seqs.train.balanced)$data
seqs.train.x <- model.matrix(f, seqs.train)[,-1]
seqs.train.y <- seqs.train[[toString(f[[2]])]]
seqs.test <- seqs[-train.indices,]
seqs.test.x <- model.matrix(f, seqs.test)[,-1]
seqs.test.observed_y <- seqs.test[[toString(f[[2]])]]
# ROC for each var
#filterVarImp(as.data.frame(seqs.train.x), seqs.train.y)
# model <- cv.glmnet(seqs.train.x,
# seqs.train.y,
# alpha = 1,
# nfolds = 5,
# family = "binomial",
# type.measure = "auc")
#
# model$lambda.min
ctrl <- trainControl(method="cv",
number=1,
classProbs=T,
verbose = T,
sampling = "up",
savePredictions = T,
summaryFunction=twoClassSummary)
max_components <- n_distinct(attr(terms(f),"term.labels")) -1
# pls tune
tune <- expand.grid(ncomp=2:max_components)
model <- train(seqs.train.x,
seqs.train.y,
method = "pls",
family = "binomial",
metric = "ROC",
preProc = c("center", "scale"),
verboseIter = TRUE,
tuneLength = 2,
tuneGrid = tune,
trControl = ctrl)
model$bestTune
plot(model)
seqs.test.y <- model %>% predict(seqs.test.x)
seqs.test.y_prob <- model %>% predict(seqs.test.x, type="prob")
confusionMatrix(seqs.test.y, seqs.test.observed_y)
plot(varImp(model, scale = F, useModel = F))
roc(seqs.test.observed_y,
seqs.test.y_prob$mid,
legacy.axes=T,
plot = T,
lwd=2,
col="black",
print.auc=T,
percent = T,
print.auc.y = 40,
print.auc.x = 55,
lty = 1,
of = "auc",
boot.n = 100,
ci = T)