【问题标题】:Ploting loadings PCA vs Wavenumber绘制载荷 PCA 与波数
【发布时间】:2016-01-23 01:14:43
【问题描述】:

我有矩阵数据

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)与矩阵的波数?

【问题讨论】:

  • 尝试阅读 hyperSpec 包的小插图,IIRC 里面有很好的例子
  • 还有无耻的插件,包ChemoSpec,虽然它使用了基本图形。你会想要plotLoadings
  • @baptiste 我尝试使用 HyperChem 包,但该包最常用于处理红外数据矩阵。另一个 pacocte 是 ChemoSpec,但这个包适用于来自不同数据文件的两类变量和更早的变量。但我需要 PCA 值来制作图表。你知道我该怎么做吗?
  • ChemoSpec 包,但这个包使用两个变量类,它们是不同名称的文件。我没有属于两个或多个变量的文件。我会尝试使用这个包。@BryanHanson

标签: r plot ggplot2 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")

【讨论】:

  • dropbox.com/s/a1mgkdr7cwymid4/matrix.csv?dl=0 。合并所有文件(x,y)后,我以这种方式创建了一个数据数组。第一行波数。 @BryanHanson。
  • 非常感谢。我尝试使用另一个包@BryanHanson。
  • 上面的代码是否同时满足了你的需求?
  • 这工作这个代码。我现在不需要我还在学习语言r。谢谢@BryanHanson
猜你喜欢
  • 2020-08-19
  • 2015-07-28
  • 2018-01-28
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
  • 2022-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多