R大作业2

本文通过读取Excel数据,首先对指标进行预处理,转化为正向指标,并解释其合理性。接着进行主成分分析,探讨保留主成分的依据。随后,利用主成分对样本进行聚类,并结合因子分析解读公因子。最后,通过K-均值聚类和判别分析对剔除企业进行分类预测。
摘要由CSDN通过智能技术生成
library(readxl)
x<-read_excel("F:/桌面/classR/第二次实验课_for student/原始数据表.xls")
x=data.frame(x)

rownames(x)=x[,1]  # 第一列为行名
x=x[,-1]
head(x)


#1.对指标进行预处理(转换成正向指标,指标取值越大越好,并说明合理性!)
x[,1]=1/abs(x[,1]-2)
x[,2]=1/abs(x[,2]-1)
x[,3]=1/abs(x[,3]-50)
x[,4]=1/abs(x[,4]-3)

head(x)


#2.对整理的数据进行主成分分析,并说明保留主成分的合理性(累计贡献率,共同度,碎石图)。

cor(x)
View(cor(x))  #相关系数矩阵

#进行主成分分析
res.pc=princomp(x,cor=T)
summary(res.pc,loadings=T,cutoff=0.1)  #累计贡献率-保留5个主成分

load=res.pc$loadings
c= 1.7972539^2*load[,1]^2+1.3900560^2*load[,2]^2+1.1340875^2*load[,3]^2+1.0229337^2*load[,4]^2+0.96075433^2*load[,5]^2
c                                # 共同度 

screeplot(res.pc,type="line")   #碎石图


#3.利用保留的前两个主成分对样本和指标聚类(图法),并分析聚类结果。

score=predict(res.pc)
plot(score,type='n')
text(score,labels=row.names(x),cex=0.7)

load2=res.pc$loadings[,1:2]
plot(load2,type="n")
text(load2,labels=names(x)[-c(2)],cex=0.7)


#4.对整理的数据进行因子分析。说明保留公因子的合理性和公因子含义。

x1=x[,1:8]
x2=x1[,-4]
fa=factanal(~.,factors = 3,data=x2)
fa


#5.利用因子综合得分排序,并给出最终的排序结果(应有综合评价公式)。
fa=factanal(~.,factors = 3,data=x2,scores = "regression")
fa
Factor=fa$scores  #每个企业的公因子得分

Score=0.405*Factor[,1]+0.374*Factor[,2]+0.154*Factor[,3] #综合评价公式
Score   
sort(Score,decreasing=T)   # 最终排序结果


#6.剔除最后一个企业的因子得分(用于问题7),利用其余企业的因子得分进行k-均值聚类(类别数的确定、K-均值聚类结果),并说明(建议多考虑同类企业)每类的特征。

Factor0=cbind(Factor,scale(x[,4]),scale(x[,9]),scale(x[,10]))
colnames(Factor0)=c("Factor1","Factor2","Factor3","存货周转率","营业收入增长率","总资产增长率")
Factor1=Factor0[1:34,]
Factor1                  # 加上之前提出的指标(标准化后),并剔除最后一个企业的信息

library(factoextra)
fviz_nbclust(Factor1,kmeans,method='wss')  # wss曲线
km=kmeans(Factor1,2)     # k均值聚类
km

fviz_cluster(km,data=Factor1)   # 绘图


#7.基于6得到的分类,选择一种判别分析方法进行判别分析,给出判别精度,并对上面6中剔除的企业进行分类预测。

Factor2=cbind(Factor1,km$cluster)
colnames(Factor2)=c("Factor1","Factor2","Factor3","存货周转率","营业收入增长率","总资产增长率","cluster")
Factor2        #把聚类结果添加到数据

#距离判别法

#分到第一、二组的公司
Factor2.1=Factor2[Factor2[,7]==1,1:6]   # 分到第一组的公司
Factor2.2=Factor2[Factor2[,7]==2,1:6]   # 分到第二组的公司

# 预测结果——用马氏距离分别预测分到第一、二组的公司距离一、二组的距离
pre_dist1=mahalanobis(Factor1,colMeans(Factor2.1),cov(Factor2.1))  
pre_dist2=mahalanobis(Factor1,colMeans(Factor2.2),cov(Factor2.2))

pre=max.col(-cbind(pre_dist1,pre_dist2))  # 输出预测结果

table(Factor2[,7],pre)  # 由此计算判别精度

 # 第三十五家公司
company35=c(Factor1=0.27952752,Factor2=-0.24693469,Factor3=-0.389799108,存货周转率=-0.36629952,营业收入增长率=-0.22178920,总资产增长率=-0.34897194)

dist1=mahalanobis(company35,colMeans(Factor2.1),cov(Factor2.1))
dist2=mahalanobis(company35,colMeans(Factor2.2),cov(Factor2.2))
  
which.min(c(dist1,dist2))  #对第35家公司的分类预测

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值