QR-разложение и разложение Холецкого в R

Недавно я прочитал о том, как R-матрица QR-разложения может быть рассчитана с использованием разложения Холецкого. Отношение:

R = разложение Холецкого (A ^ TA)

Пример:

> A=matrix(c(1,2,3,2,3,5,1,3,2), nrow=3)
> A
     [,1] [,2] [,3]
[1,]    1    2    1
[2,]    2    3    3
[3,]    3    5    2

> AtA = t(A)%*%A
> AtA
     [,1] [,2] [,3]
[1,]   14   23   13
[2,]   23   38   21
[3,]   13   21   14

Теперь вычисляем QR и разложение Холецкого:

> chol(AtA)
         [,1]     [,2]       [,3]
[1,] 3.741657 6.147009  3.4743961
[2,] 0.000000 0.462910 -0.7715167
[3,] 0.000000 0.000000  1.1547005

> qr_A = qr(A)
> qr.R(qr_A)
          [,1]      [,2]       [,3]
[1,] -3.741657 -6.147009 -3.4743961
[2,]  0.000000  0.462910 -0.7715167
[3,]  0.000000  0.000000 -1.1547005

Как видно, значения R-матрицы, рассчитанные на основе разложения Холецкого и QR, не совпадают. Первая и третья строки chol(AtA) инвертируются относительно qr.R(qr_A). Это почему? Является ли отношение, которое я предполагаю, неправильным?


person Prateek Kulkarni    schedule 23.10.2013    source источник


Ответы (1)


QR-разложение матрицы не единственно! Есть QR-разложение с R=chol(AtA), но есть и другие, и qr не обязательно дает этот. В вашем примере

qr.Q(qr_A)%*%qr.R(qr_A) 

и

(qr.Q(qr_A)%*%diag(c(-1,1,-1)))%*%chol(AtA)

оба являются действительными QR-разложениями A.

person shadow    schedule 23.10.2013
comment
Точно. И для получения дополнительной информации см. этот отличный ответ, учитывая, что точно такой же вопрос был задан в бета-версии Computational Science SO. - person Josh O'Brien; 23.10.2013
comment
Здорово. Спасибо! Существуют ли реализации декомпозиции QR в R, которые точно дадут мне положительную диагональ? - person Prateek Kulkarni; 23.10.2013
comment
@PrateekKulkarni -- Как обсуждалось здесь, R пакет biglm, похоже, использует реализацию, которая делает то, о чем вы просите. - person Josh O'Brien; 23.10.2013