2016-08-03 46 views
2

rich.main3 ist ein lineares Modell in R. Ich verstehe den Rest der Elemente der Liste, aber ich verstehe nicht, was qraux ist. Die Dokumentation besagt, dass eslm(): Was ist qraux durch QR-Dekomposition in LINPACK/LAPACK zurückgegeben

ein Vektor der Länge ncol (x) ist, die auf \ fett {Q} enthält weitere Informationen“.

Welche zusätzlichen Informationen ist das?

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" 

Antwort

2

Vermutlich wissen Sie nicht, wie die QR-Faktorisierung berechnet wird.Ich habe in LaTeX Folgendes geschrieben, das Ihnen helfen könnte, dies zu verdeutlichen: Auf einer Programmierseite muss ich Ihnen etwas Code zeigen.Am Ende biete ich Ihnen ein Spielzeug an R-Funktion zur Berechnung der Haushälterreflexion.


Householder-Reflexionsmatrix

enter image description here

Householder-Transformation

enter image description here

Householder QR factorizatio n (ohne Verschwenkung)

enter image description here

Compact Speicherung von QR und Neuskalierung

enter image description here


LAPACK Die Hilfsroutine dlarfg ausführt Householder-Transformation. Ich habe auch die folgende Spielzeug R-Funktion zur Demonstration geschrieben:

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 
    } 

Angenommen wir einen Eingangsvektor

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

meine Funktion gibt haben:

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