我在R中有一个非常简单的脚本。它在两个数据框中加载,然后使用mixOmics
执行rCCA
:
system('defaults write org.R-project.R force.LANG en_US.UTF-8')
## install.packages("mixOmics")
library(mixOmics)
TCIA <- read.csv("/Users/kimrants/Desktop/Data_for_R/TCIA",
header=TRUE,
sep=",",
stringsAsFactors=FALSE)
TCGA <- read.csv("/Users/kimrants/Desktop/Data_for_R/TCGA",
header=TRUE,
sep=",",
stringsAsFactors=FALSE)
# Remove first column (of ID)
df_TCGA <- TCGA[,-1] df_TCIA<- TCIA[,-1]
data.shrink <- rcc(X=df_TCIA, Y=df_TCGA, ncomp = 5, method = 'shrinkage')
plot(data.shrink, scree.type = "barplot")
grid1 <- seq(0, 0.2, length = 5)
grid2 <- seq(0.0001, 0.2, length = 5)
cv <- tune.rcc(df_TCIA, df_TCGA,
grid1 = grid1, grid2 = grid2, validation = "loo")
result <- rcc(df_TCIA, df_TCGA, ncomp = 5,
lambda1= cv$opt.lambda1, lambda2 = cv$opt.lambda2)
但是,在执行倒数第二行时,我收到此错误:
chol.default(Cxx( 中的错误:4 阶的前导小调不是正定的
我已经访问了类似错误的文档:http://mixomics.org/faq/parameters-tuning/
在这里,它说:"这最有可能发生在遇到奇异矩阵时,其中来自两个数据集的变量总数远大于样本数量。我们建议使用正则化 CCA" ...但是我已经在使用 rCCA?所以我不知道如何解决这个问题..
当您尝试操作的矩阵的某些特征向量不为正(通常它们为零或低于某个非常小的阈值(时,就会发生您看到的错误;这意味着,从本质上讲,您的数据太嘈杂/太小,无法估计完整的协方差矩阵。
正则化意味着(大约(添加一个惩罚项,以使您的估计值远离零(在这种情况下,使您的矩阵远离非正特征向量(。如果你的正则化参数(lambda1
、lambda2
(太小,那么你就会得到错误。由于grid1
和grid2
序列从零或非常小的值开始,因此rCCA
会因为这些太小的值而阻塞。
尝试将 grid1 和 grid2 序列设置为从较大的值开始,例如
grid1 <- grid2 <- seq(0.05, 0.2, length=5)