【问题标题】:About PCA in R?关于 R 中的 PCA?
【发布时间】:2013-11-22 16:50:44
【问题描述】:

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

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

这是我的问题,之后原始数据上的预测变量名称被遗漏,而是 PC 列表。我怎样才能找到这些 PC 与我的原始预测变量之间的关系,你知道,这些预测变量有一些负载或系数。

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

【问题讨论】:

  • 你在问什么?什么是电脑?你看过双标图吗?每台电脑解释了多少变化?

标签: r pca


【解决方案1】:

我不确定我是否 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)

【讨论】:

    【解决方案2】:

    我对插入符号不是很熟悉,但你不能使用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】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2015-08-06
        • 2012-07-24
        • 2014-08-08
        • 2017-10-10
        • 1970-01-01
        • 1970-01-01
        • 2016-07-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多