model_seen <- list()
feature_input_model_adapter <- LKTCustomModel(
name = "feature-input-smoke",
fit = function(request, verbose = FALSE) {
model_seen$request_names <<- names(request)
model_seen$feature_input_names <<- names(request$feature_input)
model_seen$feature_input_class <<- class(request$feature_input)
model_seen$column_names <<- request$feature_input$column_names
model_seen$response_length <<- length(request$feature_input$response)
model_seen$feature_count <<- length(request$feature_input$feature_spec)
LibLinearModel()$fit(request, verbose = verbose)
}
)
feature_input_model <- LKT(
data = small_val,
interc = FALSE,
components = c("Anon.Student.Id", "KC..Default.", "KC..Default."),
features = c("intercept", "intercept", "lineafm"),
model = feature_input_model_adapter,
verbose = FALSE
)
check_true("model request includes feature_input", "feature_input" %in% model_seen$request_names)
check_true("feature_input has LKTFeatureInput class", "LKTFeatureInput" %in% model_seen$feature_input_class)
check_true("feature_input exposes formula", "formula" %in% model_seen$feature_input_names)
check_true("feature_input exposes design matrix", "design_matrix" %in% model_seen$feature_input_names)
check_true("feature_input exposes column names", length(model_seen$column_names) > 0)
check_true("feature_input response length matches data", model_seen$response_length == nrow(small_val))
check_true("feature_input feature spec length", model_seen$feature_count == 3)
check_true("custom model preserves common outputs", all(c(
"model",
"coefs",
"model_specification",
"r2",
"prediction",
"loglike",
"model_name"
) %in% names(feature_input_model)))
check_true("custom model reports its name", feature_input_model$model_name == "feature-input-smoke")
check_true("custom model predictions align", length(feature_input_model$prediction) == nrow(small_val))