2013-11-22 28 views
4

我用插入符包中的R预处理数据,如:关于PCA in R?

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

这里是我的问题,即在预测对原始数据的名字被错过后,但电脑的列表。我如何找到这些PC与我的原始预测变量之间的关系,我知道,这些预测变量有一些负载或系数。

有人能给我一个提示,更好地使用脱字符号方法。谢谢!

+0

你在问什么?什么是PC的?你看过biplot以及每台电脑有多少变化? – cianius

回答

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"这一资源。

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)标准差,这是对角线当应用奇异值分解时,矩阵位于中间。解释每个“主要组件”有多少差异? /层/透明度解释矩阵的整体方差。 例如,

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

你想要的是看结果列表的rotation变量:

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

如果你想看看在一个特定的PC,说这两个首当其冲:

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