2016-08-03 52 views
2

rich.main3是R.中的一個線性模型。我理解列表中的其餘元素,但我沒有得到什麼qraux是。該文件指出,這是lm():什麼是QR分解在LINPACK/LAPACK中返回的qraux

它包含了\大膽{Q}」附加信息長度的NcoI(X)的向量。

它的意思更多的信息?

str(rich.main3$qr) 

qr : num [1:164, 1:147] -12.8062 0.0781 0.0781 0.0781 0.0781 ... 


..- attr(*, "dimnames")=List of 2 
    .. ..$ : chr [1:164] "1" "2" "3" "4" ... 
    .. ..$ : chr [1:147] "(Intercept)" "S2" "S3" "x1" ... 
    ..- attr(*, "assign")= int [1:147] 0 1 1 2 3 4 5 6 7 8 ... 
    ..- attr(*, "contrasts")=List of 3 
    .. ..$ S : chr "contr.treatment" 
    .. ..$ ID : chr "contr.treatment" 
    .. ..$ Block: chr "contr.treatment" 
$ qraux: num [1:147] 1.08 1.06 1.16 1.21 1.27 ... 
$ pivot: int [1:147] 1 2 3 4 5 6 7 8 10 11 ... 
$ tol : num 1e-07 
$ rank : int 21 
- attr(*, "class")= chr "qr" 

回答

2

大概你不知道QR分解是如何計算的我在LaTeX中寫了以下內容,可以幫助你澄清這一點當然,在一個編程站點上,我需要給你看一些代碼,最後給你一個玩具R函數計算Householder反射。


住戶反射矩陣

enter image description here

Householder變換

enter image description here

的Householder QR factorizatio N(無轉動)

enter image description here

QR的緊湊型存儲和重新縮放

enter image description here


的LAPACK輔助例程dlarfg正在執行的Householder變換。我也寫了下面的玩具一個R函數用於演示:

dlarfg <- function (x) { 
    beta <- -1 * sign(x[1]) * sqrt(as.numeric(crossprod(x))) 
    v <- c(1, x[-1]/(x[1] - beta)) 
    tau <- 1 - x[1]/beta 
    y <- c(beta, rep(0, length(x)-1L)) 
    packed_yv <- c(beta, v[-1]) 
    oo <- cbind(x, y, v, packed_yv) 
    attr(oo, "tau") <- tau 
    oo 
    } 

假設我們有一個輸入向量

set.seed(0); x <- rnorm(5) 

我的函數給出:

dlarfg(x) 
#    x   y   v packed_yv 
#[1,] 1.2629543 -2.293655 1.00000000 -2.29365466 
#[2,] -0.3262334 0.000000 -0.09172596 -0.09172596 
#[3,] 1.3297993 0.000000 0.37389527 0.37389527 
#[4,] 1.2724293 0.000000 0.35776475 0.35776475 
#[5,] 0.4146414 0.000000 0.11658336 0.11658336 
#attr(,"tau") 
#[1] 1.55063