Канонический корреляционный анализ в R

Я через Р (и пакет ОАС) и пытается проанализировать урегулирован канонический корреляционный анализ с двух наборов переменных (видовой состав и питание обилия хранимых как две матрицы Y и X, соответственно), в которых число единиц (П=15) меньше числа переменных в виде матриц, которое составляет >400 (большинство из них-потенциальные "толковый" переменные, только с 12-13 "ответ" переменные). Гонсалес и др. (2008, http://www.jstatsoft.org/v23/i12/paper) обратите внимание, что пакет "включает в себя регуляризованную версию CCA для работы с наборами данных с большим количеством переменных, чем единиц", что, безусловно, у меня есть только с 15 "единицами."Таким образом, я пытаюсь выполнить регуляризованный канонический корреляционный анализ с использованием пакета CCA, чтобы посмотреть на отношения в моих наборах переменных. Я следил за процессом, который Gonzalez et al (2008) проходят в своей статье. Тем не менее, я получаю сообщение об ошибке Error in chol.default(Bmat) : the leading minor of order 12 is not positive definite и я не знаю, что это значит и что делать об этом. Вот код, и любые идеи или знания по этому вопросу будут оценены по достоинству.

library(CCA)
correl <- matcor(X, Y)
img.matcor(correl, type = 2)
res.regul <- estim.regul(X, Y, plt = TRUE,
    grid1 = seq(0.0001, 0.2, l=51),
    grid2 = seq(0, 0.2, l=51))

Error in chol.default(Bmat) : the leading minor of order 12 is not positive definite

(Примечание: estim.regul() занимает много времени (~30-40 мин) для завершения при использовании образца данных nutrimouse из CCA).

какие-либо советы? Кто-нибудь знает, что делать с этой ошибкой? Это потому, что в некоторых моих колонках есть NA? Может быть, это из-за столбцов со слишком большим количеством 0? Заранее спасибо за любую помощь, которую вы можете предложить этому совместному новичку stats & R.

2 ответов


фон

Canonical Correlation Analysis (CCA) - это метод исследовательского анализа данных (EDA), обеспечивающий оценки корреляционной связи между двумя наборами переменных, собранных на одних и тех же экспериментальных единицах. Как правило, пользователи будут иметь две матрицы данных, X и Y, где строки представляют экспериментальные единицы, nrow(X) == nrow(Y).

в R базовый пакет предоставляет функцию cancor () для включения CCA. Это ограничивается случаями, когда число наблюдений больше числа переменных (признаков), nrow(X) > ncol(X).

пакет R CCA является одним из нескольких, которые обеспечивают расширенную функциональность CCA. Пакет CCA предлагает набор функций оболочки вокруг cancor (), которые позволяют рассматривать случаи, когда количество функций превышает количество экспериментальных единиц, ncol(X) > nrow (X). Gonzalez et al (2008) CCA: пакет R для расширения канонического корреляционного анализа, описание работы в некоторых деталях. Версия 1.2 пакет CCA (опубликовано 2014-07-02) является текущим на момент написания.

вероятно, также стоит упомянуть, что пакеты kinship и accuracy упомянутые в более раннем ответе больше не размещаются на CRAN.

Диагностика

перед прыжками в другие пакеты или применением неизвестных методов к вашему (предположительно с трудом выигранному!) данные, возможно, полезно попробовать и диагностировать, что может быть проблемой данных.

матрицы, переданные любой из упомянутых здесь подпрограмм CCA, в идеале должны быть численно полными (без пропущенных значений). Матрицы, переданные любой из упомянутых здесь подпрограмм CCA, в идеале должны быть численно полными (без пропущенных значений). Количество канонических коррелятов, оцененных процедурой, будет равно минимальному рангу столбца X и Y, то есть

пример:

library(CCA)
data(nutrimouse)
X <- as.matrix(nutrimouse$gene[,1:10])
Y <- as.matrix(nutrimouse$lipid)

cc(X,Y) ## works

X[,1] <- 2 * X[,9] ## column 9 no longer provides unique information

cc(X,Y)

Error in chol.default(Bmat) :
  the leading minor of order 9 is not positive definite

это симптом, замеченный в исходном сообщении. Один простой тест-попытаться установить без этого столбца

cc(X[,-9],Y) ## works

Итак, хотя это может расстраивать в том смысле, что вы удаляете данные из анализа, эти данные все равно не предоставляют информацию. Ваш анализ может быть только таким же хорошим, как данные, которые вы предоставляете.

кроме того, иногда численная нестабильность может быть решена с помощью стандартные (см. ?scale) переменные для одной (или обеих) входных матриц:

X <- scale(X)

пока мы здесь, возможно, стоит отметить, что регуляризованный CCA-это, по сути, двухэтапный процесс. Для оценки параметров регуляризации (используя estim.regul()), и эти параметры затем используются для выполнения регуляризованного CCA (с rcc()).

пример, приведенный в статье (аргументы, используемые дословно в оригинальный пост)

res.regul <- estim.regul(X, Y, plt = TRUE,
                               grid1 = seq(0.0001, 0.2, l=51),
                               grid2 = seq(0, 0.2, l=51))

вызывает перекрестную проверку на сетке ячеек 51*51 = 2601. Хотя это дает хорошую графику для бумаги, это не разумные настройки для начальных тестов на ваших собственных данных. Как утверждают авторы, " вычисления не очень требовательны. Он длился менее полутора часов на компьютере "текущего использования" для сетки 51 x 51". Вещи немного улучшились с 2008 года, но по умолчанию сетка 5 x 5 производится

estim.regul(X,Y,plt=TRUE) 

отлично подходит для исследовательских целей. Если вы собираетесь делать ошибки, вы можете сделать их как можно быстрее.


ваша матрица дисперсии-ковариации X не является положительно определенной, следовательно, ошибка при внутреннем вызове fda::geigen.

существует аналогичная функция для регуляризованного CCA в mixOmics пакет, но я думаю, что это приведет к тому же сообщению об ошибке, потому что он в основном использует тот же подход (за исключением того, что они подключили