анализ основных компонентов (PCA) в R: какую функцию Использовать?

может ли кто-нибудь объяснить, каковы основные различия между функциями prcomp и princomp?

есть ли какая-то особая причина, почему я должен выбрать один над другим? В случае, если это актуально, тип приложения, на который я смотрю, - это анализ контроля качества для геномных (экспрессионных) наборов данных.

спасибо!

1 ответов


существуют различия между этими двумя функциями w/r / t

  • на параметры функции (что вы можете / должны пройти в когда вы вызываете функция);
  • значения вернулся каждым; и
  • численное техника используется каждым для расчета принципала комплектующие.


численный метод, используемый для расчета PCA

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

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

не только квадрат ковариационной матрицы, но обычно намного меньше исходной матрицы данных (если количество атрибутов меньше количества строк или n

первый (собственный декомп) менее точен (разница часто не материальна), но намного быстрее, потому что вычисление выполняется на матрица ковариации вместо исходной матрицы данных; так, например, если матрица данных имеет обычную форму, такую, что n >> m, т. е. 1000 строк и 10 столбцов, то ковариационная матрица равна 10 x 10; напротив, prcomp вычисляет SVD на исходной 1000 x 10 матрица.

Я не знаю форму матриц данных для данных геномного выражения, но если строки находятся в тысячах или даже сотнях, то prcomp будет заметно медленнее, чем princomp. Я не знаю вашего контекста, например, выполняется ли pca как один шаг в большом потоке данных и вызывает ли чистая производительность (скорость выполнения) беспокойство, поэтому я не могу сказать, действительно ли эта производительность актуальна для вашего варианта использования. Аналогично, это сложно сказать, является ли разница в численной точности между двумя методами значимой и на самом деле зависит от данных.

Возвращаемые Значения

princomp возвращает список, состоящий из семь предметы; prcomp возвращает список пять.

> names(pc1)    # prcomp
    [1] "sdev"     "rotation" "center"   "scale"    "x"       

> names(pc2)    # princomp
    [1] "sdev"     "loadings" "center"   "scale"    "n.obs"    "scores"   "call"    

на princomp, наиболее важными элементами returnd являются component баллы и нагрузки.

значения, возвращаемые двумя функциями, можно согласовать (сравнить) следующим образом: prcomp возвращает, среди прочего, матрицу под названием поворот что эквивалентно матрице нагрузок, возвращенные princomp.

если вы умножите prcomp это поворот матрица по исходной матрице данных результат сохраняется в матрице с ключом x

наконец, prcomp есть участка метод, который дает осыпной участок (показывает относительную и кумулятивную важность каждой переменной / столбца-самая полезная визуализация PCA, на мой взгляд).

Аргументов Функции

prcomp будет масштабироваться (до единицы дисперсии) и означает центр ваших данных для вас, если вы установите значение TRUE доводы scale и center. Это тривиально разница между ними заключается в том, что вы можете масштабировать и центрировать данные в одной строке с помощью