2010-10-11 20 views
2

我有一个名为data的104属性数据集。我想用prcomp功能属性的数量减少到20 R.如何使用R中的prcomp将属性数量减少到20?

我这样做:

pr = prcomp(data) 

pr只包含prcomp类的一个实例。如何将原始数据集中的属性数量减少到20?

+0

您是试图将数据减少到20个主要组件,还是只想在(最终)分析中使用20个变量? – 2010-10-11 12:10:03

+0

我只想要20个变量。但有人告诉我,主要组件代表了所有不同的数据可以改变的方式。所以我想,不妨用它来减少维度。 – louzer 2010-10-11 13:26:01

+0

http://stats.stackexchange.com/questions/1576/what-are-the-differences-between-factor-analysis-and-principal-component-analysis – 2010-10-11 17:37:58

回答

5

首先,prcomp进行主成分分析。主成分分析可以生成与变量一样多的成分。什么你要找的,是一个因素分析:

ff <- factanal(data,20) 

看到?factanal

如果你想只保留前20种主成分作为新的数据集,你可以很容易地从预测选择它们( )功能。甚至自己计算它们:

x <- prcomp(USArrests, scale = TRUE) 

tt <- predict(x) # the standard way 

# below the matrix way 
tt2 <- scale(USArrests,x$center,x$scale) %*% x$rotation 

# with only 3 components instead of 4 
tt3 <- predict(x)[,1:3] 
tt4 <- scale(USArrests,x$center,x$scale) %*% x$rotation[,1:3] 

但要注意的是,因子分析减少数据集,以20个因素是不一样的保持PCA的前20种主成分。

+0

在'prcomp'函数调用中,如果我设置了' tol'变量,只有20个主要组件被选中,并且如果我将'retx'设置为TRUE,并访问返回对象的'x'成员,那么它是否也可以工作?我已经完成了这项工作,并获得了20个属性,而不是104个。 – louzer 2010-10-11 13:16:27

+0

@louzer:在公差级别中没有自动化的方法来获取特定数量的主要组件。它是用低于特定值的sd切出PC。 Tol通常设置为1.除此之外,这不会改变PC,这与'factanal'相反。所以你没有得到20个组件,你得到了104个,而忽略了最后的84个。这是完全不同的。请首先阅读主要组成部分和因素分析之间的差异。如果你使用retx = T,那么你可以忘记tol,只是做'pr $ x [,1:20]',类似于我的例子中的tt3。 – 2010-10-11 13:24:43

+0

我明白了。谢谢。我也会尝试因子分析。我只想要20个维度而不是104个,以便以计算上可行的方式进行近似k-最近邻搜索。我在我的数据集的每个成员上使用该技术来查找与真正的正数最相似的真正负数。这是因为我的原始数据集的真实负数比真正数据多100倍。我希望正数据集和负数据集中的实例数相同,以便在桌面上进行SVM培训。 – louzer 2010-10-11 13:35:10