Багатовимірна лінійна регресія з ласо в r


9

Я намагаюся створити зменшену модель, щоб передбачити багато залежних змінних (DV) (~ 450), які сильно корелюються.

Мої незалежні змінні (IV) також численні (~ 2000) і сильно корелюються.

Якщо я використовую ласо для вибору зменшеної моделі для кожного виводу окремо, я не гарантую, що я отримаю той самий підмножина незалежних змінних, як я перетинаю кожну залежну змінну.

Чи існує багатоваріантна лінійна регресія, яка використовує ласо в R?

Це не групове ласо. групові ласо-групи IV. Я хочу багатовимірної лінійної регресії (тобто DV - матриця, а не вектор скалярів), яка також реалізує ласо. (Примітка. Як зазначає NRH, це неправда. Груповий ласо - це загальний термін, що включає стратегії, що групують IV, але також включає стратегії, що групують інші параметри, такі як DV)

Я знайшов цей папір, який потрапляє в щось, що називається Набори рідкого перекриття Лассо

Ось деякий код, який робить багатоваріантну лінійну регресію

> dim(target)
[1] 6060  441
> dim(dictionary)
[1] 6060 2030
> fit = lm(target~dictionary)

Ось код, який робить ласо на одному DV

> fit = glmnet(dictionary, target[,1])

І ось що я хотів би зробити:

> fit = glmnet(dictionary, target)
Error in weighted.mean.default(y, weights) : 
  'x' and 'w' must have the same length

Вибір функцій, які відповідають ВСІМ цілям одразу


Незрозуміло, про що ви питаєте, окрім останнього пункту. Пакет називається, glmnetі він має ретельну віньєтку.
generic_user

Що ви маєте на увазі під "кожен раз"? Ви це виконуєте на підмножинах даних? Перехресне підтвердження? Різні зразки?
shadowtalker

Кожен раз, я маю на увазі, що я зараз запускаю glmnet по одній залежній змінній за один раз, і переглядаю їх усі
kmace

Або іншими словами, мій y - це завжди вектор, а не матриця
kmace

1
@Firebug абсолютно. Я не знав, що термін був більш загальним. Вибачте з цього приводу
kmace

Відповіді:


11

Для багатоваріантних відповідей (кількість залежних змінних більша за 1) вам потрібно family = "mgaussian"при виклику glmnet.

Пакет lsgl - це альтернатива, яка передбачає більш гнучку пеню.

За допомогою -вимірної відповіді пакет glmnet реалізує штраф де - вектор коефіцієнтів для го прогноктора. На сторінці довідки ви можете прочитати:k

j=1pβj2

βj=(βj1,,βjk)Tjglmnet

Перша [ family = "mgaussian"] дозволяє встановити гауссову модель з багатовідповідними характеристиками, використовуючи покарання "група -ласо" на коефіцієнти для кожної змінної. Зв'язування відповідей у ​​такий спосіб називається навчанням у кількох завданнях у деяких областях.

Це покарання є прикладом групового штрафу за ласо, який групує параметри для різних відповідей, пов'язаних з одним і тим же прогноктором. Це призводить до вибору одних і тих же предикторів для всіх відповідей для заданого значення параметра настройки.

Пакет lsgl реалізує певні групові штрафні санкції форми де та - певні ваги, вибрані для збалансування внесків з різних умов. За замовчуванням - і . Параметр є параметром настройки. З (і ) покарання еквівалентно штрафу, використовуваному за допомогою . З (і

αj=1pl=1kξjl|βjl|+(1α)j=1pγjβj2

ξjlγjξjl=1γj=kα[0,1]α=0γj=1glmnetfamily = "mgaussian"α=1ξjl=1) штраф дає звичайне ласо. Реалізація lsgl також дозволяє додаткове групування предикторів.

Записка про групове ласо. Термін " груповий ласо" часто асоціюється з групуванням предикторів. Однак, з більш загальної точки зору, групове ласо - це просто групування параметрів у штрафному. Угруповання використовується glmnetз family = "mgaussian"являє собою угруповання параметрів по всій реакції. Ефект такого угруповання полягає в поєднанні оцінки параметрів у відповідях, що виявляється гарною ідеєю, якщо всі відповіді можна передбачити приблизно з однакового набору прогнозів. Загальна ідея поєднання декількох проблем навчання, які, як очікується, поділять певну структуру, відома як багатозадачне навчання .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.