5

次のようなマトリックスがあります。

 1 1 1 1 1 1 1 1 1  1  1  1
 1 1 1 1 1 1 0 0 0  0  0  0
 0 0 1 1 0 0 0 0 1  1  0  0
 1 1 0 0 0 0 1 1 0  0  0  0
 0 0 1 1 0 0 0 0 0  0  0  0
 1 1 0 0 0 0 0 0 0  0  0  0

2 つの列がすべて同一であり、計画行列の「グループ メンバーシップ」を示していることがわかります。ここで私の質問は、 R でこのランク落ち行列 (ランク = 6) をフルランク行列に自動的に変換するにはどうすればよいかということです。このケースは少し特殊かもしれません。つまり、重複する列を手動で削除できます。「より一般的に」問題を解決するアプローチがあるかどうか、私はただ興味があります。ありがとう!

4

3 に答える 3

11

RがQR分解を行う方法はこれが機能すると思います(機能とは、一連の独立した列を残すことを意味します):

m[, qr(m)$pivot[seq_len(qr(m)$rank)]]

OPの例:

m = structure(c(1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 
1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 
0L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 
1L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 
0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L), .Dim = c(6L, 12L
))

m[, qr(m)$pivot[seq_len(qr(m)$rank)]]
#     [,1] [,2] [,3] [,4] [,5] [,6]
#[1,]    1    1    1    1    1    1
#[2,]    1    1    1    0    0    0
#[3,]    0    1    0    0    1    0
#[4,]    1    0    0    1    0    0
#[5,]    0    1    0    0    0    0
#[6,]    1    0    0    0    0    0
于 2013-09-30T19:01:34.787 に答える
1

試す:

X[,duplicated(cor(X))]

cor(x) は、x の相関行列を計算します。2 つの列が互いに線形従属関係にある場合、相関行列には同じ列が含まれます。

これにより、他の単一の列の線形変換である列が削除されます。

代わりに、列が他の複数の列の線形結合であるかどうかを示す行削減階層形式を探している場合は、次の回答を確認してください。

削減された列のエシュロン形式

于 2013-09-30T18:10:26.023 に答える