2016-01-23 100 views
-2

我有矩陣數據Ploting負荷PCA VS波數

Wavenumber 450.000000 451.00000 
Sample 1.977876 1.977388 1.976533 
Sample2 1.803184 1.802537 1.802181 ... 
... 
Sample29 1.929462 1.928509 1.927309 

我除去與下面的命令的第一行只與樣品來繪製圖形,讀取文件的csv後。

s<- as.data.frame(t, nrow.names =1) 
s.pca <- prcomp(s[-c(1),], center = TRUE, scale. = TRUE) 
sd <- s.pca$sdev 
loadings <- s.pca$rotation 
rownames(loadings) <- colnames(s) 
scores <- s.pca$x 
library(ggplot2) 
scores=as.data.frame(s.pca$x) 
###---Plot Components PC1 and PC2 
p<- ggplot(data = scores, obs.scale = .8, var.scale = 1, show.names=TRUE, aes(x = PC1, y = PC2, label = rownames(scores))) 
p<- p + geom_hline(yintercept = 0, colour = "gray65") 
p<- p + geom_vline(xintercept = 0, colour = "gray65") 
p<- p + geom_text(colour = "black", alpha = 0.8, size = 4) 
p<- p + ggtitle("PCA plot Samples") 
p<- p + theme(axis.title = element_text(family = "Arial", color="#666666", face="bold", size=16)) 
p<- p + theme(axis.text.x = element_text(face="bold", color="#993333", size=14,angle=0)) 
p<- p + theme(axis.text.y = element_text(face="bold", color="#993333", size=14, angle=0)) 
p<- p + xlab("PC1") 
p<- p + ylab("PC2") 
print(p) 

我刪除了第一線,我不知道我怎樣才能使一個負載(PC1和PC2)與基體的波數?

+1

嘗試閱讀hyperSpec軟件包的小插曲,IIRC裏面有很好的例子 – baptiste

+0

和無恥的插件,包'ChemoSpec',雖然它使用了基本的圖形。你會想'plotLoadings'。 –

+0

@baptiste我嘗試使用HyperChem軟件包,但該軟件包最常用於處理紅外數據矩陣。另一種方法是ChemoSpec,但是該程序包適用於來自不同數據文件的兩類變量和更老的變量。但我需要PCA值來製作圖表。你有什麼想法我該怎麼做? –

回答

1

由於我們沒有您的數據,下面是一個使用chemometrics數據包的簡單示例。它是分類數據,但您可以擴展該示例以將波數用作x座標。

library("ggplot2") 
library("chemometrics") 
data(glass) 
glass.pca <- prcomp(glass) 
loadings <- as.data.frame(glass.pca$rotation) 
# add in the element info: 
loadings <- data.frame(element = colnames(glass), loadings) 
qplot(x = element, y = PC1, data = loadings, main = "Loadings for PC1", xlab = "Compound/Element") 

或者,如果你想要的分數:

scores <- as.data.frame(glass.pca$x) 
qplot(x = PC1, y = PC2, data = scores, main = "Score Plot") 

編輯:使用你的數據(不是在一個方便的形式,你應該學會使用hyperSpecChemoSpec

Wave <- read.csv("matrix.csv", nrows = 1) 
Int <- read.csv("matrix.csv", skip = 1) 
SampNames <- Int[,1] 
Int <- Int[,-1] 
Fabio <- prcomp(Int) 

scores <- Fabio$x 
rownames(scores) <- SampNames 
scores <- as.data.frame(scores) 
qplot(x = PC1, y = PC2, data = scores, geom = "point") 

loadings <- Fabio$rotation 
rownames(loadings) <- Wave 
loadings <- cbind(wave = unlist(Wave), loadings) 
loadings <- as.data.frame(loadings) 
qplot(x = wave, y = PC1, data = loadings, geom = "line") 
+0

https://www.dropbox.com/s/a1mgkdr7cwymid4/matrix.csv?dl=0。合併所有文件(x,y)後,我創建了一個數據數組。第一行波數。 @BryanHanson。 –

+0

非常感謝。我嘗試了另一個包@BryanHanson。 –

+0

上面的代碼是否同時滿足您的需求? –