Эффективное обновление линейной регрессии при добавлении наблюдений и / или предикторов в R

15

Мне было бы интересно найти пути в R для эффективного обновления линейной модели при добавлении наблюдения или предиктора. У biglm есть возможность обновления при добавлении наблюдений, но мои данные достаточно малы, чтобы находиться в памяти (хотя у меня есть большое количество экземпляров для обновления). Есть способы сделать это голыми руками, например, обновить факторизацию QR (см. «Обновление факторизации QR и проблема наименьших квадратов», Hammarling and Lucas), но я надеюсь на существующую реализацию.

с промежутками
источник

Ответы:

6

Если алгоритм, который вы ищете, действительно похож на Applied Statistics 274 , 1992, Vol 41 (2), то вы можете просто использовать biglm, так как он не требует хранения ваших данных в файле.

Дирк Эддельбюттель
источник
Спасибо, но может ли biglm обновить число предикторов? Я думал, что это только обновленные наблюдения.
gappy
Есть ли закрытое решение для добавления предикторов? Вам нужен эквивалент для inv (X'X), существует ли он для добавления столбца? В любом случае, не являются ли ваши проблемы «маленькими», как, скажем, несколько (десять) тысяч на несколько сотен? Это действительно имеет значение?
Дирк Эддельбюттель
2
Существуют простые закрытые формы для обновления SVD и более сложные формулы для QR. Экономия вычислений может быть значительной при решении тысяч моделей. Они могут быть реализованы в R, но это требует немного работы. Это хороший проект.
gappy
2
Ну, я понимаю, что в вашем магазине есть способная ИТ-команда. Я уверен, что они могут реализовать что-то ужасное для вас.
Дирк Эддельбюттель
4

п

Несмотря на то, что пару месяцев назад я искал несколько дней назад, мне не удалось найти эквивалент в R (остерегайтесь, в кране есть много функций qr.update, но когда вы заглядываете под капот, они просто фальшивые - то есть они вызывают lm.updateвсе так же).

Обновление : попробуйте в исходном пакете «скачки». В R-источнике вы найдете функцию 'leaps.forward', которая вызывает процедуру FORTRAN 'forwrd', расположенную в / src пакета, который, кажется, реализует QR-обновление ранга 1.

user603
источник
3

Почему бы вам не попробовать возможность обновления объекта линейной модели

update.lm( lm.obj, formula, data, weights, subset, na.action)

Взгляните на эту ссылку

  • Для общего объяснения функции обновления:

http://stat.ethz.ch/R-manual/R-devel/library/stats/html/update.html

  • Для конкретного объяснения об update.lm:

http://www.science.oregonstate.edu/~shenr/Rhelp/update.lm.html

deps_stats
источник
3
Есть две вещи, которые не работают с обновлением (примечание: update.lm устарела). Во-первых, он использует формулы. Это само по себе делает выполнение на 400% медленнее, чем lm.fit (). Во-вторых, он переоценивает всю модель. Здесь нет повышения эффективности.
gappy
Спасибо за то, что я использую обновление для моделей среднего размера. Это, вероятно, не полезно в вашем случае.
deps_stats
1

Я также долго искал эквивалент обновления Matlab qr, прыжки кажутся отличным способом!

В R вы можете посмотреть на функцию recresid () в strucchange пакетов, которая даст рекурсивные остатки, когда вы добавляете наблюдение (не переменное!). Я предполагаю, что это потребует небольшой модификации для получения рекурсивных бета-версий (бетар в коде?).

Matifou
источник