相关矩阵的 SVD 应该是相加的,但似乎不是

机器算法验证 相关性 多元分析 svd
2022-01-28 04:27:20

我只是想复制以下论文中的声明,即从基因表达数据中找到相关的双簇,即:

命题 4. 如果XIJ=RICJT. 那么我们有:

一世。如果RI是具有加性模型的完美双聚类,则XIJ是具有列相关性的完美双聚类;
ii. 如果CJ是具有加性模型的完美双聚类,则XIJ是具有行相关性的完美双聚类;
iii. 如果两者RICJ是具有加法模型的完美双簇,则XIJ是一个完全相关的双簇。

这些命题很容易证明...

...但当然,他们没有证明这一点。

我正在使用论文中的一些简单示例加上 base + 自定义 R 代码,看看我是否可以演示这个 Proposition。

corbic <- matrix(c(0,4,-4,2,2,-2,6,0,4,-8,16,-2,-2,10,-14,4), ncol=4)

(来自表 1F)

一些自定义代码来转换标准 X =UdVTsvd 格式为X=RCT如论文所述:

svdToRC <- function(x, ignoreRank = FALSE, r = length(x$d), zerothresh=1e-9) {
#convert standard SVD decomposed matrices UEV' to RC' form
#x -> output of svd(M)
#r -> rank of matrix (defaults to length of singular values vector)
            # but really is the number of non-zero singular values
#ignoreRank -> return the full decomposition (ignore zero singular values)
#zerothresh -> how small is zero?

    R <- with(x, t(t(u) * sqrt(d)))
    C <- with(x, t(t(v) * sqrt(d)))

    if (!ignoreRank) {
        ind <- which(x$d >= zerothresh)
    } else {
        ind <- 1:r
    }

    return(list(R=as.matrix(R[,ind]), C=as.matrix(C[,ind])))
}

将此函数应用于数据集:

 > svdToRC(svd(corbic))
$R
           [,1]       [,2]
[1,]  0.8727254 -0.9497284
[2,] -2.5789775 -1.1784221
[3,]  4.3244283 -0.7210346
[4,] -0.8531261 -1.0640752

$C
          [,1]       [,2]
[1,] -1.092343 -1.0037767
[2,]  1.223860 -0.9812343
[3,]  3.540063 -0.9586919
[4,] -3.408546 -1.0263191

除非我产生幻觉,否则这个矩阵不是相加的,即使 corbic 在行和列之间表现出完美的相关性。他们提供的示例确实展示了他们所说的属性,这似乎很奇怪......除非我错过了某种前或后 svd 转换步骤?

1个回答

请注意,本文中的“双簇”指的是矩阵的子集,“在列子集上表现出相似行为的行子集,反之亦然。” 双簇的识别通常在数据挖掘算法中完成。作者正在提出一种新的“相关双聚类模型”,该模型不同于以前用于识别这些子集的模型。我对遗传学一无所知,但这里的混乱似乎很清楚,并且来自两个来源:

1. 使用“添加剂”这个词

本文中没有任何内容暗示函数输出中给出的两个矩阵应该是“加法的”,如果通过“加法”,加法逆矩阵就是 OP 的意思。在这个意义上,作者没有使用添加剂这个词。他们指的是使用加法模型获得双簇,“其中每一行或每一列都可以通过将一个常数添加到另一行或另一列来获得。”

2. 误读命题 4.3

根据@StumpyJoePete 的评论,该提议说,如果两者RICJ是具有加法模型的完美双聚类,则XIJ是一个完全相关的双簇。作者并没有说相反的情况。作者并不认为如果XIJ是一个完全相关的双聚类,那么RICJ将是加法的——在“加法”这个词的任何一种意义上。他们不是这么说的RICJ应该是反相加的,或者它们应该能够与加法模型相匹配。

*此外,示例数据来自论文中与问题中讨论的命题完全不同的部分。