Ошибка в chol.default (Cxx): старший минор порядка не является положительно определенным - PullRequest
0 голосов
/ 27 июня 2018

У меня довольно простой скрипт в 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? Так что я не знаю, как это исправить ..

1 Ответ

0 голосов
/ 27 июня 2018

Ошибка, которую вы видите, возникает, когда некоторые из собственных векторов матрицы, с которыми вы пытаетесь оперировать, не являются положительными (обычно они равны нулю или ниже некоторого очень маленького порога); по сути, это означает, что ваши данные слишком шумные / маленькие, чтобы оценить полную ковариационную матрицу.

Регуляризация означает (приблизительно) добавление штрафного члена, чтобы оттолкнуть ваши оценки от нуля (в этом случае отталкивание ваших матриц от неположительных собственных векторов). Если параметры регуляризации (lambda1, lambda2) слишком малы, вы получите ошибку. Поскольку ваши последовательности grid1 и grid2 начинаются с нуля или очень маленьких значений, rCCA будет подавлять эти слишком малые значения.

Попробуйте настроить последовательности grid1 и grid2 так, чтобы они начинались с большего значения, например

grid1 <- grid2 <- seq(0.05, 0.2, length=5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...