主成分分析 主成分分析法spss教程
>?princomp
而如果想了解prcomp具体的算法,可以通过如下命令进行(了解princomp的算法的方法与此相似。)。
> methods(princomp)
[1] princomp.default* princomp.formula*
Non-visible functions are asterisked
> getS3method("prcomp","default")
注意,直接使用>prcomp.default不能看到源代码。
在R中,有一个数据叫做USArrests,可以使用?USArrests看这个数据框中的各变量的含义。如果想对这数据中所有的变量进行主成分分析,则:
>pc.cr<-princomp(USArrests))
>pc.cr
>summary(pc.cr)
这个分析中,并没有对数据进行标准化,因此结果会受到测量量纲的影响。结果不是很恰当。这里只是先给大家一个印象。
##什么时候需要对数据进行标准化?
一般情况下,建议用标准化的数据进行主成分分析,以避免结果受到测量量纲的影响(也就是说,如果各变量的测量不具有可比性,那么最好作标准化处理。)。当然,如果认为各个变量的重要性不一样的时候,可以使用加权技术处理。在这种情况下,如果不标准化,则前面几个主成分可能只是反映了方差较大的变量的情况,而不是反应所有变量的情况。但是,如果是以下情况,可以不标准化:比如使用likert量表测量,各个问题都是0-10分,这种测量具有可比性,并且,如果一个问题的答案变异性很小,说明这个变量包含的信息比较少,给以比较小的权重也是合理的,所以不用标准化。(如果不标准化,各个变量在主成分分析中的影响和其方差成比例。)
##接上面的例子,正确的分析方法是对数据进行标准化处理。
> fit.pca<- prcomp(USArrests, scale = TRUE)
上面的命令中增加了scale=T表示对数据进行标准化。
> fit.pca
Standard deviations:
[1] 1.5748783 0.9948694 0.5971291 0.4164494
这几个是各个主成分的标准差。可以看到其大小以此减少。这是主成分分析中要求。另外,还有一个要求就是各个主成分之间是不相关的(正交的)。
Rotation:
PC1 PC2 PC3 PC4
Murder -0.5358995 0.4181809 -0.3412327 0.64922780
Assault -0.5831836 0.1879856 -0.2681484 -0.74340748
UrbanPop -0.2781909 -0.8728062 -0.3780158 0.13387773
Rape -0.5434321 -0.1673186 0.8177779 0.08902432
这是主成分负荷系数。(principal component loadings)他们表示的是各个成分和原来变量之间的相关程度。值得注意的是,在分析求解的过程中限定每个成分的各个负荷的平方之和为1(0.5358995^2+0.5831836^2+0.2781909^2+0.5434321^2=1),因此如果一个成分中是接近0的负荷较多,那么其系数就比较大,因此不同成分之间的负荷不能直接比较。如果要比较,要使用个主成分的标准差加权。(因为主成分的各个标准差可以衡量主成分含有的原数据中信息的多少。)
上面提到的这种限制可以通过如下命令看到:
> t(fit.pca$ro)%*%fit.pca$ro
PC1 PC2 PC3 PC4
PC1 1.000000e-00 9.400710e-17 2.978845e-17 -2.497223e-16
PC2 9.400710e-17 1.000000e-00 -1.856696e-18 -2.355853e-17
PC3 2.978845e-17 -1.856696e-18 1.000000e-00 1.376937e-17
PC4 -2.497223e-16 -2.355853e-17 1.376937e-17 1.000000e-00
如果觉得这个东西太难看,可以对于对小数点后面的东西四舍五入,则:
> round(t(fit.pca$ro)%*%fit.pca$ro)
PC1 PC2 PC3 PC4
PC1 1 0 0 0
PC2 0 1 0 0
PC3 0 0 1 0
PC4 0 0 0 1
成分符合也可以这样得到:
>fit.pca$rota
> summary(fit.pca)
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 1.57 0.995 0.5971 0.4164
Proportion of Variance 0.62 0.247 0.0891 0.0434
Cumulative Proportion 0.62 0.868 0.9566 1.0000
这里可以看到各个成分可以解释原来数据中的多少变异,以及累计解释变异。比如pc2就可以解释24.7%,pc1和pc2累计解释86.8%。可以说,前面两个成分基本上可以传递来原来数据中(原来四个变量)的信息。
如果你说,我的数据框中有很多变量,我不希望所有变量进入主成分分析,那么怎么办?
可以使用以下命令:
> names(USArrests)
[1] "Murder" "Assault" "UrbanPop" "Rape"
先看看数据框中有那些变量。
>fit2.pca<-prcomp(~ Murder + Assault + Rape, data = USArrests, scale = TRUE)
prcomp中可以使用公式(公式的详细表述?formula)的形式作为输入参数。其中公式中左边是没有东西的,~后面你数据你想要进入分析的变量名字(区分大小写的),各个变量之间用+好连接。data=这个是告诉R这个变量来自哪个数据框,scale=T是表示要对数据进行标准化。
>fit2.pca
>summary(fit2.pca)
可以发现这些结果和上面的是一样的。
>plot(fit2.pca)或者plot(fit2.pca,type="l")
这个图呈现了各个成分能解释原数据变异的百分比。前面的命令使用柱状图呈现,后者时候线图呈现。这个图也叫做screeplot.可以使用这个图来决定在后续的分析中要使用多少个主成分。
其实plot()是一个类命令,他实际上是调用了screeplot()这个命令,因此可以使用如下命令达到同样的效果。(推荐使用plot命令)
>sceeplot(fit2.pca)
##主成分得分
主成分得分是各个变量的一总线性组合(linear combination),可以理解为各个主成分的取值。在处理共线性的时候,就是把前面的少数几个成分得分代替原来的数据引入回归模型中的。如果想看出成分,则可以:
>fit.pca$x
还有一个比较有用的图是biplot,这个图可以把成分负荷,因子得分都反应在一个图上面。
>biplot(fit2.pca,c(1,2))
c(1,2)这个是指定所要呈现的成分,因为是平面图,因此只能指定两个成分。比如想呈现2,4成分,可以使用:
>biplot(fit2.pca,c(2,4))
图中两个坐标对应各自的成分。红色的箭头的长度表示负荷的长度,方向表示符合的符号是正还是负,而各个点是各个个案对应的成分得分。(详细的说明,可以到splus的主页现在说明文档。)
如果明白了prcomp命令的各种用法,那么再说princomp也就比较简单了。
princomp(USArrests, cor = TRUE) 相当于 prcomp(USArrests, scale=TRUE),但是结果不是完全一模一样的。具体的可以看help文档。下面用=^=表示相当,但不是完全一模一样。
princomp(USArrests) =^= prcomp(USArrests)
princomp(USArrests)$loadings =^= prcomp(USArrests)$rota
上面是成分负荷
princomp(USArrests)$score =^= prcomp(USArrests)$x
上面是成分得分。
如果使用了princomp,那么成分得分可以用predict命令来获得。
>fit3.pca<-princomp(USArrests, cor = TRUE)
>predict(fit3.pca)
获得成分得分。
如果有新的结构相同的数据(比如叫做valid.data),还可以用下面命令获得新数据相应的成分得分。
>predict(fit3,newdata="valid.data")
其他用来作图的命令和summary命令的用法是一样的。
更多阅读
常用的精神分析法有哪些? 精神分析法文学作品
常用的精神分析法有哪些?——简介心理治疗的常用方法里有一类是精神分类法,那么常用的精神分析法有哪些?常用的精神分析法有哪些?——方法/步骤常用的精神分析法有哪些? 1、
spss教程:单因素方差分析
spss教程:单因素方差分析——简介用来测试某一个控制变量的不同水平是否给观察变量造成显著差异和变动。方差分析前提:不同水平下,各总体均值服从方差相同的正态分布。所以方差分析就是研究不同水平下各个总体的均值是否有显著的差异
spss教程:线性回归分析
spss教程:线性回归分析——简介回归分析是一种应用很广的数量分析方法,用于分析事物间的统计关系,侧重数量关系变化。回归分析在数据分析中占有比较重要的位置。一元线性回归模型:指只有一个解释变量的线性回归模型,用来揭示被解释变量
社会网络分析法的分析角度 社会网络分析
社会网络分析法可以从多个不同角度对社会网络进行分析,包括中心性分析、凝聚子群分析、核心一边缘结构分析以及结构对等性分析等,这里仅介绍前3种。 2.1 中心性分析 “中心性”是社会网络分析的重点之一。个人或组织在其社会
市场营销中的波士顿矩阵分析法 市场营销5c分析法
波士顿矩阵(BCG Matrix), 又称市场增长率-相对市场份额矩阵、波士顿咨询集团法、四象限分析法、产品系列结构管理法等,是由美国著名的管理学家、波士顿咨询公司创始人布鲁斯·亨德森于1970年首创的一种用来分析和规划企业产品组合的方法