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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。