Многомерная линейная регрессия с лассо по 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

Выбор функций, которые соответствуют ВСЕМ целям одновременно

kmace
источник
Непонятно, о чем вы спрашиваете, кроме последнего пункта. Пакет называется glmnetи имеет тщательную виньетку.
generic_user
Что вы подразумеваете под «каждый раз»? Вы используете это на подмножествах ваших данных? Перекрестная проверка? Разные образцы?
Shadowtalker
Каждый раз я имею в виду, что в настоящее время я запускаю glmnet для одной зависимой переменной за раз и перебираю все из них
kmace
Или, другими словами, мой у всегда вектор, а не матрица
kmace
1
@ Firebug абсолютно. Я не знал, что термин был более общим. Извините за это
kmace

Ответы:

11

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

Пакет lsgl является альтернативой, которая обеспечивает более гибкий штраф.

С -мерным ответом пакет glmnet реализует штраф где - вектор коэффициентов для го предиктора. На странице справки вы можете прочитать:k

j=1pβj2

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

Первый [ family = "mgaussian"] позволяет подгонять гауссову модель с несколькими ответами, используя штраф «group -lasso» на коэффициенты для каждой переменной. Связывание ответов вместе, как это, называется «многозадачным» обучением в некоторых областях.

Это наказание является примером группового штрафа Лассо, который группирует параметры для разных ответов, которые связаны с одним и тем же предиктором. Это приводит к выбору одних и тех же предикторов во всех ответах для заданного значения параметра настройки.

Пакет 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"является группировкой параметров по ответам. Результатом такой группировки является объединение оценки параметров по откликам, что является хорошей идеей, если все отклики можно прогнозировать из примерно одного и того же набора предикторов. Общая идея объединения нескольких задач обучения, которые, как ожидается, будут иметь некоторую структуру, известна как многозадачное обучение .

NRH
источник