Для приложения нейровизуализации я пытаюсь подогнать многие линейные модели методом наименьших квадратов в R (стандартный вызов lm
). Представьте, что у меня есть матрица дизайна X. Эта матрица дизайна будет одинаковой для всех моделей. Подходящие данные (Y) изменятся, и в результате изменятся все подходящие параметры (например, бета, p-значения, остатки и т. д.).
В настоящее время я просто втыкаю его в цикл for, поэтому он выполняет сотни тысяч вызовов lm
. Кажется, должен быть лучший способ.
Я считаю, что самая затратная в вычислительном отношении часть — это обращение матрицы. Похоже, это обрабатывается вызовом Fortran в lm.fit.
Если бы я выполнял эту регрессию вручную, я бы сделал инверсию матрицы, а затем просто умножил ее на различные наборы данных. На самом деле, я написал функцию для этого, когда у меня есть хорошо работающие матрицы дизайна (например, все непрерывно оцениваемые ковариаты). Тем не менее, мне очень нравится вся работа, которую делает lm
, например, правильное перекодирование моих факторов и т. д., и вывод lm
тоже очень хорош.
Есть ли способ получить мой торт и съесть его тоже? А именно, получить удобство lm, но использовать эту мощь для вычислительной эффективности множества моделей с идентичными матрицами проектирования?