您的位置:首页 > 其它

多元统计分析上机题之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图可知,在图的右上角,存在可疑点。




注:由于最近时间较为繁忙,先做出小部分题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: