我在R中有一个非常简单的脚本。它加载两个数据帧,然后对rCCA
执行mixOmics
:
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了?所以我不知道如何解决这个问题。
答案 0 :(得分:0)
当您尝试操作的矩阵的某些特征向量不是正数(通常为零或在很小的阈值以下)时,会发生错误。从本质上讲,这意味着您的数据太嘈杂/太小而无法估计完整的协方差矩阵。
正则化意味着(大约)添加一个惩罚项以使您的估计值远离零(在这种情况下,使矩阵远离具有非正特征向量的矩阵)。如果您的正则化参数(lambda1
,lambda2
)太小,则会出现错误。由于您的grid1
和grid2
序列从零或很小的值开始,因此rCCA
将阻塞这些太小的值。
尝试将grid1和grid2序列设置为以较大的值开始,例如
grid1 <- grid2 <- seq(0.05, 0.2, length=5)