Получить остаточные стандартные ошибки объекта "mlm", возвращаемого функцией "lm()"

Я использовал lm() чтобы соответствовать множественным регрессионным моделям, для множественных (~1 миллиона) переменных отклика в R. Например.

allModels <- lm(t(responseVariablesMatrix ~ modelMatrix)

Это возвращает объект класса "mlm", который похож на огромный объект, содержащий все модели. Я хочу получить Остаточную сумму квадратов для каждой модели, которую я могу сделать, используя:

summaries <- summary(allModels)
rss1s <- sapply(summaries, function(a) return(a$sigma))

Моя проблема в том, что я думаю, что функция "итоги" вычисляет целую кучу других вещей, и, следовательно, довольно медленно. Мне интересно, есть ли более быстрый способ извлечения только Остаточной суммы квадратов для модели?

Спасибо!

2 ответа

Решение

Есть компонент остатков в выходе lm объект, так что вы получите остаточную сумму квадратов по sum(output$residuals^2),

редактировать: вы на самом деле вынимаете сигма из резюме, которое sqrt(sum(output$residuals^2)/output$df.residuals)

Для всех моделей используйте

sapply(allModels, function(a) sqrt(sum(a$residuals^2)/a$df.residuals)))

Редко известная многим, универсальная функция deviance может вычислить остаточную сумму квадратов для моделей "lm" и "mlm". Позволять fit будьте подходящей моделью, вы можете сделать

sqrt(deviance(fit) / fit$df.residual)

Здесь есть два преимущества:

  1. универсальная функция полностью "векторизована" (используя colSums), а не на основе петель (например, решение через sapply);
  2. универсальная функция знает, как обращаться со случаем взвешенной регрессии.
residuals(summary(allModels))) 

даст вам матрицу остатков

Другие вопросы по тегам