赞
踩
这个系列就讨论应用基础,争取一条公式都不用写。当原始数据集比较庞大,并且不同变量之间存在一些相关性时,我们希望可以用更少的变量来表示原始数据集,用到的变量越少的同时,能够表示的原始数据集中的信息越多自然就更好。主成分分析就可以实现这样的目标,在主成分分析中用来表示原始数据集中的信息的变量被称为主成分。下面我们用一个例子说明R语言中进行简单的主成分分析的方法。
数据
使用HSAUR2
包中的美国城市污染数据,代码如下
install.packages("HSAUR2")
data("USairpollution", package = "HSAUR2")
这个数据集有七个变量,分别是代表空气污染的SO2
(空气中的二氧化硫浓度)、代表人类活动的popul
、manu
以及代表天气情况的wind
、temp
、precip
、 predays
,这个数据集可以用多元线性回归来分析代表人类活动与天气情况的六个变量对二氧化硫浓度的影响,但现在我们尝试用PCA对六个解释变量进行分析。
数据的定性分析
首先分析一下这六个解释变量之间的相关性,使用cor
函数,代码为
cor(USairpollution[,-1])
代码输出如下
temp manu popul wind precip predays
temp 1.00000000 -0.19004216 -0.06267813 -0.34973963 0.38625342 -0.43024212
manu -0.19004216 1.00000000 0.95526935 0.23794683 -0.03241688 0.13182930
popul -0.06267813 0.95526935 1.00000000 0.21264375 -0.02611873 0.04208319
wind -0.34973963 0.23794683 0.21264375 1.00000000 -0.01299438 0.16410559
precip 0.38625342 -0.03241688 -0.02611873 -0.01299438 1.00000000 0.49609671
predays -0.43024212 0.13182930 0.04208319 0.16410559 0.49609671 1.00000000
可以发现代表人类活动的popul
与manu
的相关性系数高达0.9553,代表天气情况的四个变量之间也存在一定的相关性,这说明如果直接用多元线性回归分析这个数据集可能存在多重共线性的问题。
接下来我们画出这六个变量两两之间的散点图,代码如下
panel.hist <- function(x, ...) {
usr <- par("usr"); on.exit(par(usr))
par(usr = c(usr[1:2], 0, 1.5) )
h <- hist(x, plot = FALSE)
breaks <- h$breaks; nB <- length(breaks)
y <- h$counts; y <- y/max(y)
rect(breaks[-nB], 0, breaks[-1], y, col="grey", ...)
}
USairpollution$negtemp <- USairpollution$temp * (-1)
USairpollution$temp <- NULL
pdf("Lot0.pdf") #将图片以pdf形式导出到当前工作路径
pairs(USairpollution[,-1], diag.panel = panel.hist,
pch = ".", cex &#
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。