I was fitting a generalized additive model (GAM) with LASSO penalty to my data using gamlasso
, as in the following (here I use simulated data, but the idea is similar):
set.seed(1)
Sex <- sample(c(rep(1, 40), rep(0, 60)))
set.seed(2)
Group <- sample(c(rep(1, 30), rep(0, 70)))
set.seed(3)
Ed <- sample(c(rep(1, 20), rep(0, 80)))
Age <- sample(c(rep(7, 15), rep(8, 20), rep(9, 30), rep(10, 10), rep(11, 15), rep(12, 10)))
sample_data <-data.frame(Age = Age,
Sex = Sex,
Ed = Ed,
Group = Group,
Perf1 = runif(100, -200, 100),
Perf2 = runif(100, 20, 200),
Perf3 = runif(100, 0.03, 0.3)
)
sample_data$x <- model.matrix( ~ Age + Sex + Ed,
data=sample_data)[,-1]
gamlasso_fit <- gamlasso(Group ~ x + s(Perf1) + s(Perf2) + s(Perf3),
data = sample_data,
smooth.penalty = "l1",
linear.penalty = "l1",
family = "binomial")
gamlasso_fit$cv.glmnet
summary(gamlasso_fit, s = lambda.1se)
Which gives me:
> gamlasso_fit$cv.glmnet
NULL
> summary(gamlasso_fit, s = lambda.1se)
$lasso
NULL
$gam
Family: binomial
Link function: logit
Formula:
Group ~ x + s(Perf1) + s(Perf2) + s(Perf3)
Parametric coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.88730 1.63831 -1.152 0.2493
xAge 0.09693 0.17289 0.561 0.5750
xSex 0.71345 0.53603 1.331 0.1832
xEd -1.71468 0.88280 -1.942 0.0521 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Approximate significance of smooth terms:
edf Ref.df Chi.sq p-value
s(Perf1) 4.381 5.363 4.858 0.494
s(Perf2) 1.000 1.000 0.009 0.926
s(Perf3) 4.734 5.740 5.770 0.395
R-sq.(adj) = 0.12 Deviance explained = 19.4%
UBRE = 0.26659 Scale est. = 1 n = 100
My actual model is giving me the same kind of result with the lasso part ($lasso
) missing in the output (see summary
and gamlasso_fit$cv.glmnet
), which should be part of the output due to my model specification. My question is whether I am specifying anything wrong here. I followed the vignette of the plsmselect
package and their examples, however I think I might be missing something here. I am using a GAM (binomial) with LASSO penalty since non-linearity is found between the log-odds of the outcome (Group) and some of the predictors in a glm
(with/without LASSO penalty).
Best Answer
You should change all instances of
x
(lowercase) toX
(uppercase). So your code will beIt isn't explicitly mentioned in the documentation to use an uppercase
X
but the package is actually hardcoded like that. In the next version of the package we will try to make it more flexible and add clearer documentation.