我有一个看起来像这样的矩阵:
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
Run Code Online (Sandbox Code Playgroud)
您可以看到每两列是相同的,表示设计矩阵的"组成员资格".现在我的问题是,如何在R中自动将这个等级缺陷矩阵(rank = 6)转换为满秩矩阵?这种情况可能有点特殊,即我可以手动删除重复的列.我只是好奇是否有一种方法能够"更普遍地"解决问题.谢谢!
edd*_*ddi 10
我认为R对QR进行分解的方式是有效的(并且通过工作我的意思是留下一组独立的列):
m[, qr(m)$pivot[seq_len(qr(m)$rank)]]
Run Code Online (Sandbox Code Playgroud)
关于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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1453 次 |
| 最近记录: |