Как получить перехват из линейной модели с lasso (пакет lars R)

Мне сложно найти модель, оцененную пакетом R lars для моих данных.

Например, я создаю поддельный набор данных x и соответствующие значения y следующим образом:

x = cbind(runif(100),rnorm(100))
colnames(x) = c("a","b")
y = 0.5 + 3 * x[,1,drop = FALSE]

Далее я тренирую модель, которая использует лассо-регуляризацию с использованием функции lars:

m = lars(x,y,type = "lasso", normalize = FALSE, intercept = TRUE)

Теперь я хотел бы знать, что такое оценочная модель (that I know to be: y = 0.5 + 3 * x[,1] + 0 * x[,2])

Меня интересуют только коэффициенты, полученные на последнем шаге:

cf = predict(m, x, s=1, mode = "fraction", type = "coef")$coef
cf
a b 
3 0

Это коэффициенты, которые я ожидаю, но я не могу найти способ получить перехват (0.5) от m.

Я попытался проверить код predict.lars, где подстановка выполняется как таковая:

fit = drop(scale(newx, 
 object$meanx, FALSE) %*% t(newbetas)) + object$mu)

Я вижу, что переменные масштабируются и что используется значение y (object $mu), но я не могу найти простой способ получить значение перехвата, который я ищу. Как я могу это получить?

1 ответ

intercept=T в lars влияет на центрирование переменных x и переменной y. Он не включает явный перехватчик с коэффициентом.

При этом вы можете сделать predict(m,data.frame(a=0,b=0),s=2)$fit, чтобы получить предсказанное значение y, когда ковариаты равны 0 (определение традиционного перехвата)

licensed under cc by-sa 3.0 with attribution.