Ответ 1
Фон
Канонический корреляционный анализ (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 package CCA (опубликованная 2014-07-02) актуальна на момент написания.
Возможно, стоит также упомянуть, что пакеты kinship
и accuracy
, упомянутые в более раннем ответе, больше не размещаются в CRAN.
Диагностика
Прежде чем перейти к другим пакетам или применить неизвестные методы к вашим (предположительно трудно выигравшим!) данным, возможно полезно попробовать и диагностировать проблему с данными.
Матрицы, переданные в любую из описанных здесь подпрограмм CCA, в идеале должны быть численно полными (без пропущенных значений). Матрицы, переданные в любую из описанных здесь подпрограмм CCA, в идеале должны быть численно полными (без пропущенных значений). Число канонических коррелятов, оцененное по процедуре, будет равно минимальному рангу столбца X и Y, то есть <= min (ncol (X), ncol (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 х 51 сетки". С 2008 года ситуация немного улучшилась, но сетка по умолчанию 5 х 5, созданная
estim.regul(X,Y,plt=TRUE)
- отличный выбор для поисковых целей. Если вы собираетесь ошибаться, вы можете сделать их как можно быстрее.