Ефективне оновлення лінійної регресії при додаванні спостережень та / або предикторів в R


15

Мені було б цікаво знайти шляхи в R для ефективного оновлення лінійної моделі при додаванні спостереження чи прогноктора. biglm має можливість оновлення при додаванні спостережень, але мої дані досить малі, щоб залишатися в пам'яті (хоча я маю велику кількість примірників для оновлення). Існують способи зробити це голими руками, наприклад, оновити QR-факторизацію (див. "Оновлення QR-факторизації та проблеми найменших квадратів", Hammarling та Lucas), але я сподіваюся на існуючу реалізацію.

Відповіді:


6

Якщо алгоритм, який ви шукаєте, справді щось на зразок прикладної статистики 274 , 1992, т. 41 (2), ви можете просто використовувати biglm, оскільки це не вимагає від вас збереження даних у файлі.


Дякую, але чи можна оновити biglm у кількості прогнозів? Я думав, що це оновлено лише спостереження.
гаппі

Чи існує рішення закритої форми для додавання предикторів? Вам потрібен еквівалент inv (X'X), чи існує для додавання стовпця? У будь-якому випадку, чи не ваші проблеми "маленькі", як, скажімо, кілька (десять) тисяч на кілька сотень? Це насправді має значення?
Дірк Еддельбуеттель

2
Існують прості закриті форми для оновлення SVD та більше залучаються формули для QR. Обчислювальна економія може бути значною при вирішенні тисяч моделей. Вони можуть бути реалізовані в R, але це вимагає трохи роботи. Це приємний проект.
гаппі

2
Ну я розумію, що у вашому магазині є здібна ІТ-команда. Я впевнений, що вони можуть реалізовувати щось для вас.
Дірк Еддельбуеттель

4

Існує функція рангу один QR оновлення в MATLAB тут , що економить чинникp

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

Оновлення : спробуйте у джерелі пакета "стрибки". У R-джерелі ви знайдете функцію "leaps.forward", яка викликає процедуру FORTRAN "forwrd", розташовану в / src пакету, який, схоже, реалізує оновлення QR рангу 1.


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


3
Є дві речі, які не працюють із оновленням (прим.: Оновлення.lm застаріле). По-перше, він використовує формули. Це саме по собі робить виконання на 400% повільніше, ніж lm.fit () По-друге, воно переоцінює всю модель. Тут немає підвищення ефективності.
гаппі

Дякую за те, що я використовував оновлення для середніх моделей. Мабуть, це не корисно у вашому випадку.
deps_stats

1

Я також давно шукаю еквівалент оновлення matlab qr, стрибки здаються приємним способом!

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

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