## ----Setup--------------------------------------------------------------------
library(hdrm)
library(grpreg)
library(ggplot2)
library(glinternet)
library(sprintr)

## ----Interactions-------------------------------------------------------------
# Simulate some data
n <- 70
p <- 20
set.seed(2)
x <- matrix(rnorm(n * p), n, p)
y <- x[, 1] + x[, 4] - x[, 1] * x[, 2] + rnorm(n)

# Fit models
xx <- model.matrix(~ (.)^2, as.data.frame(x))[, -1]
cv_lasso <- cv.glmnet(xx, y)
cv_glint <- glinternet.cv(x, y, rep(1, p))

# Number of main effects and interactions selected
b <- coef(cv_lasso, s = cv_lasso$lambda.min)[-1]
(las_main <- sum(b[1:20] != 0))
(las_int <- sum(b[-(1:20)] != 0))
b <- coef(cv_glint$glinternetFit)[[which.min(cv_glint$cvErr)]]
(gli_main <- length(b$mainEffects$cont))
(gli_int <- nrow(b$interactions$contcont))

# Maximum R^2
(las_rsq <- max(1 - cv_lasso$cvm / var(y)))
(gli_rsq <- max(1 - 2 * cv_glint$cvErr / var(y)))

cv_sprint <- cv.sprinter(x, y)

(rim_rsq <- max(1 - cv_sprint$cvm / var(y)))
cv_sprint$compact
t_rim <- system.time(cv.sprinter(x, y))
t_gli <- system.time(glinternet.cv(x, y, rep(1, ncol(x))))

