# [R] Problems understanding qr. family of functions

Douglas Bates bates at cs.wisc.edu
Wed Oct 13 19:40:35 CEST 2004

```Kjetil Brinchmann Halvorsen wrote:
> Hola!
>
> By my understanding of reading   ?qr
> the following shold result a 3 x 3 matrix:  (rw2000)
>
> x <- matrix( rnorm(12), 4,3)
> y <- matrix( rnorm(12), 4,3)
> xqr <- qr(x)
> yqr <- qr(y)
>
> qr.qty( xqr, qr.Q(yqr) ) # dim (3,3)
>            [,1]       [,2]      [,3]
> [1,]  0.16815466 -0.1970936 0.2351670
> [2,]  0.15667444  0.4939800 0.8443340
> [3,] -0.97096971  0.1029652 0.1456355
> [4,] -0.06629443 -0.8405570 0.4588976
>
> # The following should be equal:
> t( qr.Q(xqr) ) %*% qr.Q(yqr)
>           [,1]       [,2]      [,3]
> [1,]  0.1681547 -0.1970936 0.2351670
> [2,]  0.1566744  0.4939800 0.8443340
> [3,] -0.9709697  0.1029652 0.1456355
>
> but evidently is not.
>
> There is at least one bug:
> 1) in R
> 2) in the help page
> 3) in my reading of the help page
>
> Kjetil

You are assuming that qr.Q produces the complete Q matrix.  By default
it produces only the initial columns of the Q matrix sufficient to
generate the same size matrix as was decomposed.  Use qr.Q(qrx, complete
= TRUE) to generate the complete Q matrix.

> qrx <- qr(matrix(rnorm(12), 4, 3))
> qr.Q(qrx)
[,1]       [,2]        [,3]
[1,] -0.6477697 -0.2925012 -0.68404548
[2,]  0.6645340 -0.3817050 -0.33452846
[3,] -0.1567635  0.7073773  0.01126533
[4,] -0.3379560 -0.5180364  0.64810924
> qr.qy(qrx, diag(4))  ## multiply Q %*% I
[,1]       [,2]        [,3]      [,4]
[1,] -0.6477697 -0.2925012 -0.68404548 0.1640710
[2,]  0.6645340 -0.3817050 -0.33452846 0.5484401
[3,] -0.1567635  0.7073773  0.01126533 0.6891413
[4,] -0.3379560 -0.5180364  0.64810924 0.4442730
> qr.Q(qrx, complete = TRUE)
[,1]       [,2]        [,3]      [,4]
[1,] -0.6477697 -0.2925012 -0.68404548 0.1640710
[2,]  0.6645340 -0.3817050 -0.33452846 0.5484401
[3,] -0.1567635  0.7073773  0.01126533 0.6891413
[4,] -0.3379560 -0.5180364  0.64810924 0.4442730

```