2016-03-01 3 views
-1

У меня есть следующий код в R. Вкратце, я начинаю с данных диафрагмы от https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data. Затем я хочу выполнить анализ основных компонентов в этом наборе данных, чтобы в итоге получить двумерный набор данных, который я могу в конце сделать диаграммой рассеяния конечных данных. Я использую функцию prcomp, чтобы получить главный компонент, и принимая от этого поворот.Использование PCA в R - Изменение осей для удаления столбцов

irisdat <- read.csv('iris.data', header=FALSE) 
library(lattice) 
library(stats) 
numiris=irisdat[,c(1,2,3,4)] 
pr=prcomp(numiris, center=TRUE, scale=TRUE) 
newdata = as.matrix(numiris) %*% pr$rotation 
pr2=prcomp(newdata, center=TRUE, scale=TRUE) 
newdata2 = as.matrix(newdata) %*% pr2$rotation 

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

Кроме того, у меня возникла проблема, когда мои результаты инвертированы от исходных данных, поэтому, если я распечатаю матрицу рассеянного экрана с помощью splom, диаграммы рассеяния меняются на противоположные.

Любые мысли?

+0

Если вам нужна помощь или статистическая консультация по проведению анализа СПС, то вы должны спрашивать на [stats.se]. Это не вопрос программирования. Пожалуйста, задайте один четкий вопрос одновременно. Также, вероятно, было бы проще для вашего примера, если бы вы использовали встроенный набор данных 'iris', а не требовали отдельной загрузки для запуска вашего примера. – MrFlick

ответ

0

Я немного не понимаю, о чем вы спрашиваете ... но я дам ему шанс.

PCA сам по себе не удаляет столбцы; в большинстве случаев вы получите то же количество компонентов, что и функции. Разница в том, что каждый из основных компонентов представляет собой линейную комбинацию входных признаков и является ортогональным (и, следовательно, некоррелированным) для каждого из других компонентов. Компоненты расположены по убыванию, объясняя изменчивость. Обычно обычно сохраняются первые N компонентов, которые кумулятивно объясняют ~ 70% изменчивости. Вы можете получить процент объясненной дисперсии, как это:

numiris = iris[,1:4] ## iris is built-in 
pr = prcomp(numiris, center=TRUE, scale=TRUE) 
> cumsum(pr$sdev^2/sum(pr$sdev^2)) 
[1] 0.7296245 0.9581321 0.9948213 1.0000000 

Таким образом, вы бы сохранить первый компонент в вашем случае:

reduced = as.matrix(pr$rotation[,1]) 

Однако, если вы абсолютно установлен на сохранении двух :

reduced = as.matrix(pr$rotation[,1:2]) 

Кроме того, вы можете построить prcomp объект с помощью screeplot.

-1

Некоторые методы (например, irlba) позволяют указать количество возвращаемых векторов. В противном случае вы, вероятно, можете воспользоваться тем фактом, что возвращаемые столбцы имеют меньшее значение слева направо. Попробуйте использовать newdata[,1:2]. И MrFlick прав, набор данных iris встроен в R.

Смежные вопросы