## Executable examples are disabled for routine package builds. Set LKT_RUN_EXPENSIVE_VIGNETTES=true to run this vignette.
print_fast_fit_table <- function(base, grid, optimized = NULL) {
null_loglike <- base$loglike / (1 - base$r2)
rows <- list(
data.frame(
model = "LibLinear",
loglike = base$loglike,
delta_loglike = 0,
r2 = base$r2,
delta_r2 = 0,
stringsAsFactors = FALSE
),
data.frame(
model = "Online grid start",
loglike = grid$loglike,
delta_loglike = grid$loglike - base$loglike,
r2 = 1 - grid$loglike / null_loglike,
delta_r2 = (1 - grid$loglike / null_loglike) - base$r2,
stringsAsFactors = FALSE
)
)
if (!is.null(optimized)) {
rows[[length(rows) + 1L]] <- data.frame(
model = "Online six-parameter search",
loglike = optimized$loglike,
delta_loglike = optimized$delta_loglike,
r2 = optimized$r2,
delta_r2 = optimized$delta_r2,
stringsAsFactors = FALSE
)
}
print(do.call(rbind, rows))
}fast_input <- LKTOnlineSimpleAdaptiveInput(
model_static_logistic,
val
)
cat("native compiled evaluator available:", fast_input$native_available, "\n")
par_zero <- c(fast_input$beta_start, alpha_recency = 0, alpha_logsuc = 0)
fit_zero <- LKTOnlineSimpleAdaptiveEval(par_zero, fast_input, return_details = TRUE)
check_close(
"alpha-zero loglike matches LibLinear",
fit_zero$loglike,
model_static_logistic$loglike,
tolerance = 1e-6
)
check_close(
"alpha-zero max prediction difference",
max(abs(fit_zero$pred - model_static_logistic$prediction)),
0,
tolerance = 1e-12
)val_short <- val #[seq_len(min(220, nrow(val))), ]
model_static_short <- LKT(
data = val_short,
interc = TRUE,
dualfit = FALSE,
factrv = 1e11,
components = c(
"Anon.Student.Id",
"KC..Default.",
"KC..Default."
),
features = c("logitdec", "logsuc", "recency"),
fixedpars = c(0.98, 0.24)
)
model_fast_online_adapter <- LKT(
data = val_short,
interc = TRUE,
dualfit = FALSE,
factrv = 1e11,
components = c(
"Anon.Student.Id",
"KC..Default.",
"KC..Default."
),
features = c("logitdec", "logsuc", "recency"),
fixedpars = c(0.98, 0.24),
model = "online_adaptive",
model_options = list(
online_mode = "alpha_only",
beta_alpha_terms = c(
"recencyKC..Default.",
"logsucKC..Default."
),
nonlinear_alpha_terms = c(
"recency|KC..Default.|para",
"logitdec|Anon.Student.Id|para"
),
alpha_lower = -1,
alpha_upper = 1,
require_native = FALSE,
maxit = 12,
factr = 1e7
)
)
cat("adapter model name:", model_fast_online_adapter$model_name, "\n")
cat("adapter loglike:", model_fast_online_adapter$loglike, "\n")
cat(
"adapter delta loglike:",
model_fast_online_adapter$loglike - model_static_short$loglike,
"\n"
)
cat("adapter parameters:\n")
print(model_fast_online_adapter$model$par)
cat("adaptive beta terms:\n")
print(model_fast_online_adapter$model$adaptive_beta_terms)
cat("adaptive nonlinear terms:\n")
print(model_fast_online_adapter$model$adaptive_nonlinear_terms)
print(model_fast_online_adapter$coefs)model_native_beta_adapter <- LKT(
data = val_short,
interc = TRUE,
dualfit = FALSE,
factrv = 1e11,
components = c(
"Anon.Student.Id",
"KC..Default.",
"KC..Default."
),
features = c("logitdec", "logsuc", "recency"),
fixedpars = c(0.98, 0.24),
model = "online_adaptive",
model_options = list(
online_mode = "alpha_only",
beta_alpha_terms = c("logitdecAnon.Student.Id"),
alpha_lower = -1,
alpha_upper = 1,
require_native = TRUE,
maxit = 2,
factr = 1e7
)
)
cat("native beta evaluator available:",
model_native_beta_adapter$model$native_available, "\n")
cat("native beta alpha:\n")
print(model_native_beta_adapter$model$alpha)