多元统计分析上机题之R语言实现(主成分)
2015-10-31 20:15
681 查看
引言
主成分分析是一门降维的技术,即将多个指标用少数几个综合指标表示出来。主成分分析可以用于变量的降维和数据的解释。本节数据可从多元统计分析上机题之R语言实现(多元正态分布)下载。
主成分分析基本步骤
1.将原始数据标准化,用scale()函数 2.求标准化数据的协方差阵,用cov()函数:或者求数据的相关阵用cor()函数 3.求协方差阵或者相关矩阵的特征值和单位特征向量,用eigen()函数,其中$values是按从达到小对应的特征值,$vectors是对应的单位特征向量 4.主成分分析,用princomp(x,cor...)函数,x为矩阵,cor为确定x是否为相关系数矩阵 5.确定主成分个数,可以用screeplot()函数,用可视化的方法来确定主成分个数,选取一个拐弯点对应的序号 6.解释主成分,用PCA$loadings显示主成分载荷矩阵,PCA为主成分分析赋值的变量。 7.确定各样本的主成分得分,用PCA$scores 来确定,并根据样本各主成分的分值来对样本进行解释。
8.10
data_8.10<-read.table("/home/wangjianlong/files/college/duoyuantongji/JohnsonWichern Data sets/T8-4.DAT") #(a) ##样本协方差矩阵 cov_x<-cov(data_8.10) ##样本主成分 prin_fac<-princomp(cov_x) #(b) lamda<-eigen(cov_x) ##第一主成分占比重 sum(lamda$values[1:3])/sum(lamda$values) ##解释 prin_fac$loadings ##第一主成分中可解释为市场因子,第二主成分可解释为工业因子,第三主成分较难解释 #(c)略 #(d)screeplot(print_fac,type="lines") 由碎石图可知,主成分个数选两个比较合适的值 sum(lamda$values[1:2])/sum(lamda$values) #两个主成分的方差贡献率大于80%,因此认为在小于五维空间可行
8.11
##a data_8.11<-read.table("/home/wangjianlong/files/college/duoyuantongji/JohnsonWichern Data sets/T8-5.DAT") data_8.11$v5<-data_8.11$v5*10 cov_x<-cov(data_8.11)#协方差矩阵 ##(b) lamda<-eigen(cov_x)#特征值和特征向量 prin_fac<-princomp(cov_x,scores=TRUE) spc_mat<-lamda$vectors[,1:2]#前两个特征值对应的单位特征向量 #t(spc_mat)*x#x为变量x1:x5 ##(c) sum(lamda$values[1:2])/sum(lamda$values)#前两个主成分解释的比例为79.8% spc_mat<-lamda$vectors[,1:2]#前两个特征值对应的单位特征向量 prin_y<-t(t(spc_mat)%*%t(data_8.11)) cor_mat<-matrix(0,2,6) #循环比较 for( i in 1:2) { for (j in 1:6) { cor_mat[i,j]<-cor(prin_y[,i],data_8.11[,j]) } } cor_ma#相关系数矩阵 prin_fac$loadings #由载荷矩阵可知,第一主成分由在16岁以上雇佣率和政府雇佣率上的载荷值较大,反映就业情况的主成分 #由载荷矩阵可知,第二主成分由在16岁以上雇佣率和政府雇佣率、家庭收入中位数上的载荷值较大,主要反映社会生活质量的主成分 #我们对未改变单位的数据求解主成分的载荷矩阵,并与这一题的载荷矩阵相比较,发现改变单位对第一样本主成分影响较小,但对主成分影响较大。
8.12
data_8.12<-read.table("/home/wangjianlong/files/college/duoyuantongji/JohnsonWichern Data sets/T1-5.DAT") #协方差矩阵 cov_x<-cov(data_8.12) prin_fac<-princomp(cov_x) screeplot(prin_fac,type='lines')#从碎石图可知选择一个主成分较为合理 lamda<-eigen(cov_x)#特征值和特征向量 sum(lamda$values[1])/sum(lamda$values)#前两个主成分解释的比例为87.3% #相关系数矩阵 cor_x<-cor(data_8.12) prin_fac1<-princomp(cor_x,cor="TRUE") screeplot(prin_fac1,type='lines')#从碎石图可知选择三个主成分较为合理 lamda<-eigen(cor_x)#特征值和特征向量 sum(lamda$values[1:3])/sum(lamda$values)#前两个主成分解释的比例为70.4% prin_fac1$loadings#由于是文科生不能对这些数据做出更多的解释 #比较可得,选择不同矩阵其主成分不太一样。 #这些数据可以由比三维更少的维度来分析,比如由协方差矩阵带来的分析
8.13略(跟前面的做法区别不大)
8.14
data_8.14<-read.table("/home/wangjianlong/files/college/duoyuantongji/JohnsonWichern Data sets/T5-1.DAT") cov_x<-cov(data_8.14) prin_fac<-princomp(cov_x) screeplot(prin_fac,type='lines')#从碎石图可知选择一个主成分较为合理 lamda<-eigen(cov_x)#特征值和特征向量 spc_mat<-lamda$vectors[,1]#前两个特征值对应的单位特征向量 prin_y<-t(t(spc_mat)%*%t(data_8.14)) qqnorm(prin_y) qqline(prin_y) 由Q-Q图可知,在图的右上角,存在可疑点。
注:由于最近时间较为繁忙,先做出小部分题。
相关文章推荐
- swift思维导图2
- Eclipse报错:java.lang.ClassNotFoundException: ContextLoaderListener(Maven工程)
- 人家写代码,我写BUG的日子(2)
- 西城区印象
- apache 与 tomcat 服务器的三种连接配置方式
- VS2010中,使用MySQL在GridView上显示数据
- iOS系统开发:发“彩信”
- swift思维导图
- 欢迎使用CSDN-markdown编辑器
- 最新大陆不能访问谷歌最简单的解决办法
- 0ops CTF/0CTF writeup
- angular-file-upload 中文API
- Oracle OS认证与口令文件认证详解
- 关于编码的问题
- dispatch_barrier_async的作用是什么?
- 课后作业
- throws和throw抛出异常的使用规则
- DB2 SQL 递归实现多行合并
- 控制kobuki底盘(一)
- 《Android开发技术周报》笔记