При прогнозировании линейной статистической модели у нас обычно есть матрица модели X
предикторов, соответствующих точкам, в которых мы хотим делать прогнозы; вектор коэффициентов beta
; и матрица дисперсии-ковариации V
. Вычисление прогнозов просто X %*% beta
. Самый простой способ вычисления дисперсий прогнозов - это
diag(X %*% V %*% t(X))
или чуть эффективнее
diag(X %*% tcrossprod(V,X))
Однако, это очень неэффективно, потому что оно строит матрицу n * n, когда все, что мы действительно хотим, это диагональ. Я знаю, что мог бы написать какую-нибудь Rcpp-петлю, которая бы вычисляла только диагональные члены, но мне интересно, есть ли существующий трюк с линейной алгеброй в R, который будет хорошо делать то, что я хочу ... (если кто-то хочет написать Rcpp-loopy для меня в качестве ответа я бы не стал возражать, но я бы предпочел решение на основе чистого R)
FWIW predict.lm
, кажется, делает что-то умное, умножая X
на инверсию R-компонента QR-разложения lm
; Я не уверен, что это всегда будет доступно, но это может быть хорошей отправной точкой (см. здесь )