关于R中的PCA?

时间:2013-11-22 16:50:45

标签: r pca

我在R中使用了caret包来预处理数据,如:

> trans <- preProcess(data, method  = "pca").
> transformedData <- predict(trans, data)

这是我的问题,之后原始数据的预测者名称被遗漏,但是PC列表。如何找到这些PC与我的原始预测器之间的关系,你知道,这些预测器有一些负载或系数。

有人可以给我一个提示,更好地使用插入方法。谢谢!

3 个答案:

答案 0 :(得分:3)

我对插入符号并不熟悉,但你不能使用princompprcomp吗?

例如:

# some random data
x   <-data.frame(a=1:25+rnorm(25),
                 b=3:27+rnorm(25,mean=1), 
                 c=25:1 + rnorm(25,mean=2,sd=2))
pca <- prcomp(x, retx = TRUE, center = TRUE, scale. = TRUE)
transformedData <- pca$x
loadings        <- pca$rotation
eigenvalues     <- pca$sdev

另请参阅"5 functions to do Principal Components Analysis in R"上的此资源。

答案 1 :(得分:3)

我不确定我100%理解你的问题,但我猜你有一个缺少名字的数据集,你想快速确定变量之间的关系(线性可能),确定'主要组件'?

这是一个非常棒的cross validated post,向您展示了PCA和SVD的一些知识。

这是一个非常简单的示例,通过prcomp函数显示它是如何工作的:

>library(ggplot2)
>data(mpg)
>data <- mpg[,c("displ", "year", "cyl", "cty", "hwy")]
# get the numeric columns only for this easy demo
>prcomp(data, scale=TRUE)

Standard deviations:
  [1] 1.8758132 1.0069712 0.5971261 0.2658375 0.2002613

Rotation:
  PC1         PC2        PC3         PC4         PC5
displ  0.49818034 -0.07540283  0.4897111  0.70386376 -0.10435326
year   0.06047629 -0.98055060 -0.1846807 -0.01604536  0.02233245
cyl    0.49820578 -0.04868461  0.5028416 -0.68062021  0.18255766
cty   -0.50575849 -0.09911736  0.4348234  0.15195854  0.72264881
hwy   -0.49412379 -0.14366800  0.5330619 -0.13410105 -0.65807527

以下是解释结果的方法:

(1)标准偏差,即应用奇异值分解时中间的对角矩阵。解释每个“主成分”的差异程度? / layer / transparency解释了矩阵中的整个方差。 例如,

70 % = 1.8758132^2 / (1.8758132^2 + 1.0069712^2 + 0.5971261^2 + 0.2658375^2 + 0.2002613^2)

这表明第一列本身已经解释了整个矩阵中70%的方差。

(2)现在让我们看一下旋转矩阵中的第一列/ V:

          PC1       
displ  0.49818034 
year   0.06047629
cyl    0.49820578
cty   -0.50575849
hwy   -0.49412379

我们可以看到:displcyl呈正相关,与ctyhwy呈负相关。在这个主导层中,year并不那么明显。

有道理,你车内的排量或气缸越多,它可能具有非常高的MPG。

以下是仅为您提供信息的变量之间的关系图。

pairs(data)

enter image description here

答案 2 :(得分:2)

您想要查看结果列表的rotation变量:

> trans <- preProcess(data, method  = "pca").
> transformedData <- predict(trans, data)
> trans$rotation

如果您想查看特定的PC,请先说两个:

> trans$rotation[,c(1,2)]