QRGS_JPH {lazy.symbolic} | R Documentation |
X 行列の QR 分解(グラム・シュミットの直交化法)または X の非冗長列の抽出
Description
英語のヘルプファイルは: QRGS
Arguments
X |
サイズ |
orth |
|
zero |
= 1 (未使用) |
epsg |
0 判定の閾値 |
permute |
= 1 の場合、部分ピボット選択を有効化(未対応) |
print |
= 1 の場合、サマリーを表示 |
debug |
= 1 の場合、中間結果を表示 |
Details
X
行列は X = Q %*% R
に分解される。
Q
は nrow(X) x rank(X)
行列、R
は rank(X) x ncol(X)
上三角行列。
Q
は Q = X %*% P
で取得可能。
左から右に向かって削減を行う。X は全ゼロ行や列を含むことがある。
nrow(X) > ncol(X) の場合、ネイティブ qr 関数で Q, R, P を計算可能:
qr=qr(X) Qfromqr=qr.qy(qr,diag(nrow(X)))[,1:ncol(X)][,1:qr$rank,drop=F] Rfromqr=t(Qfromqr) %*% X Pfromqr=t(Rfromqr)%*%solve(Rfromqr%*%t(Rfromqr)) Xhat=Qfromqr%*%Rfromqr QasXP=X%*%Pfromqr
この場合、常に X-Xhat == 0 となる。
Value
以下のリスト
Q n x r 行列(X のランク r の列)
R r x p 上三角行列
P p x r 行列、 Q = X %*% P
を計算するためのもの
rank X のランク(独立列の数)
loczero ゼロピボットの位置ベクトル
maxadX max( abs( X - Q %*% R ) )
maxadQ max( abs( Q - X %*% P ) )
maxadorth max(abs(offdiag(t(Q)%*%Q)))
maxadorthN max(abs(diag(t(Q)%*%Q)-I))
X がフルランクでない場合、以下も返される
Q0 n x p 行列
R0 p x p 上三角行列
P0 p x p 行列、Q0 = X %*% P0
を計算するためのもの
maxadX0 max( abs( X - Q0 %*% R0 ) )
maxadQ0 max( abs( Q0 - X %*% P0 ) )
Examples
X=cbind(demomat(4,3),V4=c(1,3,2,5))
resQRGS <- QRGS(X, print=1)
X - resQRGS$Q %*% resQRGS$R
resQRGS$Q - X %*% resQRGS$P
resQRGS1 <- QRGS(X, orth=1, print=1)
X - resQRGS1$Q %*% resQRGS1$R
resQRGS1$Q - X %*% resQRGS1$P
resQRGS2 <- QRGS(X, orth=2, print=1)
X - resQRGS2$Q %*% resQRGS2$R
resQRGS2$Q - X %*% resQRGS2$P
# フルランクでないデザイン行列
nA <- 2
nB <- 3
XA <- model.matrix(~as.factor(1:nA) - 1)
XB <- model.matrix(~as.factor(1:nB) - 1)
Xab <- cprod( XA, XB )
colnames(Xab) <- c(paste("A",1:nA,sep=""),paste("B",1:nB,sep=""))
XAB <- Reduce( rbind
, lapply( as.data.frame( Xab[,1:nA] )
, function(x) t(matrix(x,nrow(Xab),nB)*Xab[,(1:nB)+nA]) ) )
colnames(XAB) <- paste("AB"
, apply(cprod(1:nA,1:nB),1,paste,collapse=""), sep="")
X <- cbind( mu=1, Xab, XAB )
# 独立な列
qr <- QRGS(X, print=3)