# The supervised s2net

s2net can be used as a supervised method (without unlabeled data) and it is equivalent to elastic net.

## Data

The auto_mpg dataset is available when s2net is installed.

library(s2net)
data("auto_mpg")

# Preprocess the data using the s2Data function
train = s2Data(auto_mpg$P1$xL, auto_mpg$P1$yL, preprocess = TRUE)

## Ordinary least squares

To fit an OLS model, we will use the lm function (without intercept).

lm.fit = lm( y~ 0 + ., data = data.frame(train$xL, y = train$yL))

To obtain the estimations from s2net we use

obj = s2netR(train, s2Params(0))
# We set all the hyper-parameters to 0

We can compare the training objectives of both algorithms, as well as the estimations.

library(Metrics)
# Training error
ypred = predict.lm(lm.fit, data.frame(train$xL)) print("OLS error:") mse(ypred, train$yL)

ypred = predict(obj, train$xL) print("s2net error:") mse(ypred, train$yL)

#Estimations
data.frame(mle = lm.fit$coefficients, s2net = obj$beta)
  [1] "OLS error:"
[1] 11.14708
[1] "s2net error:"
[1] 11.14754
mle        s2net
cylinders.L   0.3548161  0.285474997
cylinders.Q  -0.9132173 -0.935717172
cylinders.C   0.3835068  0.330481968
cylinders.4          NA -0.008096223
displacement -1.0056651 -0.945328949
horsepower    0.1307953  0.124370552
weight       -2.8561218 -2.901267109
acceleration  1.1041176  1.115766617
year          3.7855521  3.782110411

## Lasso

library(glmnet)

lasso.fit = glmnet(train$xL, train$yL, family = "gaussian",
alpha = 1, lambda = 0.01, intercept = F)
ypred = predict(lasso.fit, train$xL) print("Lasso error:") mse(ypred, train$yL)

obj = s2netR(train, s2Params(lambda1 = 0.01))
ypred = predict(obj, train$xL) print("s2net error") mse(ypred, train$yL)

print("Coefficients")
data.frame(lasso = as.numeric(lasso.fit$beta), s2net = obj$beta)
  [1] "Lasso error:"
[1] 11.1477
[1] "s2net error"
[1] 11.1495
[1] "Coefficients"
lasso       s2net
1  0.00000000  0.04400422
2 -1.12939790 -1.06249932
3  0.03454994  0.11384660
4 -0.06378002 -0.04329510
5 -0.97177003 -0.88722825
6  0.11854687  0.10780812
7 -2.87208217 -2.93069375
8  1.10283623  1.11822773
9  3.77265557  3.76858994

## Elastic net

enet.fit = glmnet(train$xL, train$yL, family = "gaussian",
alpha = 0.3333, lambda = 0.03, intercept = F)
ypred = predict(enet.fit, train$xL) print("glmnet error") mse(ypred, train$yL)

obj = s2netR(train, s2Params(lambda1 = 0.01, lambda2 = 0.01))
ypred = predict(obj, train$xL) print("s2net error") mse(ypred, train$yL)

print("Coefficients")
data.frame(enet = as.matrix(enet.fit$beta), s2net = obj$beta)
  [1] "glmnet error"
[1] 11.14839
[1] "s2net error"
[1] 11.16189
[1] "Coefficients"
s0       s2net
cylinders.L   0.00000000  0.02176857
cylinders.Q  -1.12966519 -1.11081728
cylinders.C   0.03962925  0.08926029
cylinders^4  -0.06613103 -0.07240406
displacement -0.98765401 -1.05183911
horsepower    0.11712469  0.10903802
weight       -2.84667192 -2.72983278
acceleration  1.09711179  1.07104828
year          3.76243231  3.70533071