I'm just trying to replicate a claim made in the following paper, Finding Correlated Biclusters from Gene Expression Data, which is:
Proposition 4. If $X_{IJ}=R_{I}C^{T}_{J}$. then we have:
i. If $R_{I}$ is a perfect bicluster with additive model, then $X_{IJ}$ is a perfect bicluster with correlation on columns;
ii. If $C_J$ is a perfect bicluster with additive model, then $X_{IJ}$ is a perfect bicluster with correlation on rows;
iii. If both $R_I$ and $C_J$ are perfect biclusters with additive model, then $X_{IJ}$ is a perfect correlated bicluster.These propositions can be easily proved...
... but of course, they don't prove it.
I'm using some of the simple examples in the paper plus base + custom R code to see if I can demonstrate this Proposition.
corbic <- matrix(c(0,4,-4,2,2,-2,6,0,4,-8,16,-2,-2,10,-14,4), ncol=4)
(from Table 1F)
some custom code to convert standard X = $UdV^T$ svd form to $X=RC^{T}$ as described in the paper:
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])))
}
apply this function to the dataset:
> 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
Unless I'm hallucinating, this matrices are not additive, even though corbic exhibits perfect correlation between rows and columns. It seems strange that the example they provide does exhibit the property they said it should... unless I'm missing some kind of pre- or post- svd transformation step?