QRGS_JPH {lazy.symbolic}R Documentation

X 行列の QR 分解(グラム・シュミットの直交化法)または X の非冗長列の抽出

Description

英語のヘルプファイルは: QRGS

Arguments

X

サイズ n x p の入力行列。 rank(X)=r

orth


orth = 0 の場合、Q は X の非冗長列を含む
orth = 1 の場合、グラム・シュミット法で Q を直交化(t(Q)%*%Q=diagonal
orth = 2 の場合、グラム・シュミット法で Q を正規直交化(t(Q)%*%Q=I)して QR 分解を行う

zero

= 1 (未使用)

epsg

0 判定の閾値

permute

= 1 の場合、部分ピボット選択を有効化(未対応)

print

= 1 の場合、サマリーを表示
= 2 の場合、Q, R, P を表示
= 3 の場合、zero=1 の場合に Q0, P0, R0 を表示

debug

= 1 の場合、中間結果を表示

Details

X 行列は X = Q %*% R に分解される。
Qnrow(X) x rank(X) 行列、Rrank(X) x ncol(X) 上三角行列。
QQ = 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)


[Package lazy.symbolic version 1.0.0.20250830 ]