qr
位於 base
包(package)。 說明
qr
計算矩陣的 QR 分解。
用法
qr(x, ...)
## Default S3 method:
qr(x, tol = 1e-07 , LAPACK = FALSE, ...)
qr.coef(qr, y)
qr.qy(qr, y)
qr.qty(qr, y)
qr.resid(qr, y)
qr.fitted(qr, y, k = qr$rank)
qr.solve(a, b, tol = 1e-7)
## S3 method for class 'qr'
solve(a, b, ...)
is.qr(x)
as.qr(x)
參數
x |
要計算其 QR 分解的數值或複數矩陣。邏輯矩陣被強製轉換為數字。 |
tol |
檢測 |
qr |
由 |
y, b |
方程右側的向量或矩陣。 |
a |
QR 分解或(僅限 |
k |
有效排名。 |
LAPACK |
合乎邏輯的。對於真正的 |
... |
傳遞給其他方法或從其他方法傳遞的進一步參數 |
細節
QR 分解在許多統計技術中發揮著重要作用。特別是,它可用於求解給定矩陣 和向量 的方程 。它對於計算回歸係數和應用 Newton-Raphson 算法很有用。
函數 qr.coef
、 qr.resid
和 qr.fitted
返回通過 QR 分解 qr
將 y
擬合到矩陣時獲得的係數、殘差和擬合值。 (如果使用旋轉,某些係數將為 NA
。) qr.qy
和 qr.qty
返回 Q %*% y
和 t(Q) %*% y
,其中 Q
是(完整) 矩陣。
上述所有函數都保留 x
和 y
(如果有)的 dimnames
(和 names
)。
solve.qr
是 qr
對象的 solve
的方法。 qr.solve
通過 QR 分解求解方程組:如果 a
是 QR 分解,則與 solve.qr
相同,但如果 a
是矩形矩陣,則首先計算 QR 分解。兩者都可以處理超定係統和欠定係統,並在適當的情況下提供最小二乘擬合。
如果 x
是來自 "qr"
的 list
和 inherits
,則 is.qr
返回 TRUE
。
無法將對象強製為 "qr"
模式。對象或者是 QR 分解,或者不是。
LINPACK 接口僅限於元素少於 x
。 的矩陣
qr.fitted
和qr.resid
僅支持LINPACK接口。
底層 LAPACK 代碼的不成功結果將導致錯誤,並給出正錯誤代碼:這些隻能通過詳細研究 FORTRAN 代碼來解釋。
值
由 LINPACK(*) 或 LAPACK 計算的矩陣的 QR 分解。返回值中的分量直接對應於 DQRDC(2)/DGEQP3/ZGEQP3 返回的值。
qr |
與 |
qraux |
長度為 |
rank |
通過分解計算的 |
pivot |
有關分解過程中使用的旋轉策略的信息。 |
LAPACK 計算的非複雜 QR 對象具有屬性 "useLAPACK"
和值 TRUE
。
*)
dqrdc2
代替LINPACK的DQRDC
在(默認)LINPACK 情況 ( LAPACK = FALSE
) 中,qr()
使用 LINPACK DQRDC 的修改版本,稱為“dqrdc2
”。它的不同之處在於使用公差 tol
作為旋轉策略,該策略將具有接近零 2-範數的列移動到 x 矩陣的右側邊。這一策略意味著可以以自然的方式計算連續的degree-of-freedom效應。
注意
要計算矩陣的行列式(您真的需要它嗎?),QR 分解比使用特征值 (eigen
) 更有效。請參閱det
。
使用 LAPACK(包括在複雜的情況下)使用列旋轉並且不會嘗試檢測 rank-deficient 矩陣。
例子
hilbert <- function(n) { i <- 1:n; 1 / outer(i - 1, i, `+`) }
h9 <- hilbert(9); h9
qr(h9)$rank #--> only 7
qrh9 <- qr(h9, tol = 1e-10)
qrh9$rank #--> 9
##-- Solve linear equation system H %*% x = y :
y <- 1:9/10
x <- qr.solve(h9, y, tol = 1e-10) # or equivalently :
x <- qr.coef(qrh9, y) #-- is == but much better than
#-- solve(h9) %*% y
h9 %*% x # = y
## overdetermined system
A <- matrix(runif(12), 4)
b <- 1:4
qr.solve(A, b) # or solve(qr(A), b)
solve(qr(A, LAPACK = TRUE), b)
# this is a least-squares solution, cf. lm(b ~ 0 + A)
## underdetermined system
A <- matrix(runif(12), 3)
b <- 1:3
qr.solve(A, b)
solve(qr(A, LAPACK = TRUE), b)
# solutions will have one zero, not necessarily the same one
來源
對於 qr
,LINPACK 例程 DQRDC
(但修改為 dqrdc2
(*))以及 LAPACK 例程 DGEQP3
和 ZGEQP3
。更多 LINPACK 和 LAPACK 例程用於 qr.coef
、 qr.qy
和 qr.aty
。
LAPACK 和 LINPACK 來自https://netlib.org/lapack/ 和https://netlib.org/linpack/,它們的指南在參考文獻中列出。
參考
Anderson. E. and ten others (1999)
LAPACK Users' Guide. Third Edition. SIAM.
Available on-line at
https://netlib.org/lapack/lug/lapack_lug.html.
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
Dongarra, J. J., Bunch, J. R., Moler, C. B. and Stewart, G. W. (1978) LINPACK Users Guide. Philadelphia: SIAM Publications.
也可以看看
qr.Q
、 qr.R
、 qr.X
用於重建矩陣。 lm.fit
、lsfit
、eigen
、svd
。
det
(使用 qr
)計算矩陣的行列式。
相關用法
- R quit 終止 R 會話
- R file.path 構造文件路徑
- R grep 模式匹配和替換
- R getwd 獲取或設置工作目錄
- R vector 向量 - 創建、強製等
- R lapply 對列表或向量應用函數
- R dump R 對象的文本表示
- R Sys.getenv 獲取環境變量
- R rank 樣本排名
- R getDLLRegisteredRoutines DLL 中 C/Fortran 例程的反射信息
- R pushBack 將文本推回連接
- R strsplit 分割字符向量的元素
- R seq.Date 生成規則的日期序列
- R invisible 將打印模式更改為不可見
- R noquote “無引號”字符串打印類
- R warning 警告信息
- R rapply 遞歸地將函數應用於列表
- R basename 操作文件路徑
- R with 評估數據環境中的表達式
- R formals 訪問和操縱形式參數
- R icuSetCollate 按 ICU 設置整理
- R search 給出 R 對象的搜索路徑
- R Defunct 將對象標記為已失效
- R gzcon 通過連接(解)壓縮 I/O
- R readRenviron 從文件設置環境變量
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 The QR Decomposition of a Matrix。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。