Как получить перехват от линейной модели с помощью лассо (пакет 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 (объект $ mu), но я не могу найти простой способ получить значение перехвата, который я ищу. Как я могу получить это?

1 ответ

Решение

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

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

Другие вопросы по тегам