2016-10-28 2 views
0

세 개의 클래스 (즉, 총 60 개의 관측치)에서 20 개의 관측치를 가진 시뮬레이션 된 데이터 세트를 생성 한 후, 첫 번째 두 가지 주요 구성 요소 점수 벡터, 세 가지 고유 한 클래스를 나타내는 다른 색을 사용합니다.3 개의 고유 한 클래스를 나타내는 다른 색을 사용하여 두 개의 주성분 점수 벡터 플로팅

나는 시뮬레이트 된 데이터 세트를 만들 수 있다고 믿는다. 그러나 나는 클래스와 플롯에 색을 칠하는 방법을 찾는데 문제가있다. 3 개의 클래스가 플롯에서 분리되어 나타나는지 확인해야합니다 (그렇지 않으면 시뮬레이션 된 데이터를 다시 실행해야합니다).

#for the response variable y (60 values - 3 classes 1,2,3 - 20 observations per class) 
y <- rep(c(1,2,3),20) 

#matrix of 50 variables i.e. 50 columns and 60 rows i.e. 60x50 dimensions (=3000 table cells) 
x <- matrix(rnorm(3000), ncol=50) 

xymatrix <- cbind(y,x) 
dim(x) 
[1] 60 50 
dim(xymatrix) 
[1] 60 51 
pca=prcomp(xymatrix, scale=TRUE) 

위에서 설명한 바와 같이 주성분 분석을 올바르게 플롯하고 색상을 지정해야합니까? 고맙습니다.

+0

당신은 당신이 가지고있는 현재의 플롯을 생성하는 코드를 제공 할 수 있습니까? – BLT

+0

@BLT 이것은 biplot 일 필요가 없다. (더 좋은 방법이있을 수있다.)하지만 아래 코드는 내가 시도한 코드이다 :'biplot (pca, scale = 0, col = c ("orange", " 빨간색 ","파란색 "))' – Kyle

+0

이 데이터는 실제 데이터와 함께 사용할 수 있습니까? http://rpubs.com/sinhrks/plot_pca – BLT

답변

2

질문을 올바르게 이해하면 ggparcoordGally 패키지가 도움이 될 것입니다.

library(GGally) 
y <- rep(c(1,2,3), 20) 

# matrix of 50 variables i.e. 50 columns and 60 rows 
# i.e. 60x50 dimensions (=3000 table cells) 
x <- matrix(rnorm(3000), ncol=50) 

xymatrix <- cbind(y,x) 
pca <- prcomp(xymatrix, scale=TRUE) 

# Principal components score and group label 'y' 
pc_label <- data.frame(pca$x, y=as.factor(y)) 

# Plot the first two principal component scores of each samples 
ggparcoord(data=pc_label, columns=1:2, groupColumn=ncol(pc_label)) 

그러나, 나는 그것이 오히려 대상 y을 포함 xymatrix보다 x에 PCA을 더 의미가 생각합니다. 따라서 다음 코드가 귀하의 경우에 더 적절해야합니다.


먼저 두 개의 주요 구성 요소 점수의 산포도를 원하는 경우

pca <- prcomp(x, scale=TRUE) 

pc_label <- data.frame(pca$x, y=as.factor(y)) 

ggparcoord(data=pc_label, columns=1:2, groupColumn=ncol(pc_label)) 

, 당신은 ggplot을 사용 할 수 있습니다.

library(ggplot2) 

ggplot(data=pc_label) + 
    geom_point(aes(x=PC1, y=PC2, colour=y)) 
1

어떻게하면이 작업을 수행 할 수 있는지 간단히 알 수 있습니다. 먼저 x 행렬에서만 PCA를 수행하고 결과 객체에서 PCs이라고하는 변환 된 변수의 행렬을 얻습니다.

x <- matrix(rnorm(3000), ncol=50) 
pca <- prcomp(x, scale=TRUE) 
PCs <- as.matrix(pca$x) 

이제 우리는 라벨에 대한 y에 따라 색 이름의 벡터를 만들 수 있습니다.

col.labs <- rep(c("Green", "Blue", "Red"), 20) 

지금 바로 col에 색 벡터를 통과, 분산으로 플롯.

plot(PCs[, 1], PCs[, 2], col=col.labs, pch=19, xlab = "Scores on PC1", ylab="Scores on PC2") 

enter image description here

관련 문제