Я ищу, чтобы реализовать биплот для анализа основных компонентов (PCA) в JavaScript. Мой вопрос, как мне определить координаты стрелок из выходных данных сингулярного векторного разложения (SVD) матрицы данных?
Вот пример биплота R:
biplot(prcomp(iris[,1:4]))
Я попытался найти его в статье в Википедии о биплоте, но это не очень полезно. Или правильно. Не уверен, какой.
biplot()
. Кроме того, зачем использовать интеграцию с R-JS для чего-то, что требует всего несколько строк кода.Ответы:
Существует много разных способов создания биплота PCA, и поэтому нет однозначного ответа на ваш вопрос. Вот краткий обзор.
Мы предполагаем, что матрица данных имеет n точек данных в строках и центрирована (т. Е. Все значения столбцов равны нулю). На данный момент мы не предполагаем, что он был стандартизирован, т.е. мы рассматриваем PCA на ковариационной матрице (не на корреляционной матрице). PCA сводится к разложению по единственному значению X = U S V ⊤ , мой ответ вы можете увидеть здесь для получения подробной информации: Отношения между SVD и PCA. Как использовать SVD для выполнения PCA?Икс N
В биплоте PCA два первых главных компонента изображены в виде диаграммы рассеяния, то есть первый столбец нанесен относительно его второго столбца. Но нормализация может быть другой; например, можно использовать:U
Кроме того, исходные переменные изображены в виде стрелок; то есть координат точки я -м стрелка конечной точки задаются я -му значения в первом и втором столбце V . Но опять же, можно выбрать разные нормализации, например:( х , у) я я В
Вот как все это выглядит для набора данных Fisher Iris:
[Какую бы комбинацию ни использовали, может потребоваться масштабировать стрелки по некоторому произвольному постоянному коэффициенту, чтобы и стрелки, и точки данных выглядели примерно в одном масштабе.]
biplot
biplot
biplot
СПС на корреляционной матрице
Дальнейшее чтение:
источник