Фон
Канонический корреляционный анализ (CCA) - это метод анализа поисковых данных (EDA), обеспечивающий оценки корреляционных отношений между двумя наборами переменных, собранных в одних и тех же экспериментальных единицах. Как правило, пользователи имеют две матрицы данных, X и Y, где строки представляют экспериментальные единицы, nrow (X) == nrow (Y).
В R базовый пакет предоставляет функцию cancor () для включения CCA. Это ограничено случаями, когда количество наблюдений больше, чем количество переменных (признаков), nrow (X)> ncol (X).
Пакет CCA R - один из нескольких, которые предоставляют расширенные функциональные возможности 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, то есть <= min (ncol (X), ncol (Y)). В идеале столбцы каждой матрицы должны быть линейно независимыми (а не линейными комбинациями других). </p>
* * 1 022 Пример: * 1 023 *
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)
является отличным выбором для исследовательских целей. Если вы собираетесь делать ошибки, вы можете сделать их как можно быстрее.