2016-08-03 10 views
2

rich.main3はRの線形モデルです。リストの残りの要素はわかりますが、qrauxは何も得られません。ドキュメントは、それが「{Q} \大胆に関する追加情報が含まれている長さのNcoI(X)のベクトルlm():QR分解によってLINPACK/LAPACKで返されたqraxとは

であると述べている。

それはどのような追加情報を意味するのでしょうか?

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関数は、ハウスホルダ反映を計算する。


ハウスホルダリフレクション行列

enter image description here

ハウスホルダ変換

enter image description here

ハウスホルダQR factorizatio N

enter image description here

QRのコンパクト貯蔵及び再スケーリング

enter image description here


LAPACK(旋回せず)の補助ルーチンdlarfgは、ハウスホルダ変換を行っています。私もデモのために、次のおもちゃの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 
関連する問題