层次分析模型的代码
O<-matrix(c(1,1,1,6,9,6,1,1,1,6,9,5,1,1,1,4,9,4,1/6,1/6,1/4,1,3,1,1/9,1/9,1/9,1/3,1,1,1/6,1/5,1/4,1,1,1),6,6,byrow = T)#基于目标的准则层判断矩阵O AHP<-function(mydata,O){
RI<-c(0,0,0.58,0.90,1.12,1.24,1.32,1.41,1.45,1.49,1.51)#随机一致性指标RI向量 U0<-matrix(0,nrow=ncol(mydata),ncol=ncol(mydata)) V0<-vector(length=ncol(mydata)) U0<-eigen(O)$vectors
V0<-as.numeric(eigen(O)$values)
lambda0<-max(V0) #找出最大特征值
u0<-U0[,which.max(V0)] #最大特征值对应的特征向量 w0<-u0/sum(u0) #特征向量归一化
CI0<-(lambda0-max(nrow(O),ncol(O)))/(max(nrow(O),ncol(O))-1) #计算判断一致性指数 CR0<-CI0/(RI[max(nrow(O),ncol(O))]) #计算判断一致率 C<-array(0,dim=c(nrow(mydata),nrow(mydata),ncol(mydata)))
for(i in 1:ncol(mydata)){for(j in 1:nrow(mydata)){C[,j,i]<-mydata[,i]/mydata[j,i]}} n<-length(C[1,1,])
U<-array(0,dim=c(length(C[,1,1]),length(C[1,,1]),n)) V<-matrix(0,nrow=ncol(U[,,1]),ncol=n) lambda<-vector(length=ncol(V))
u<-matrix(0,nrow=nrow(U[,,1]),ncol=n) w<-matrix(0,nrow=nrow(u),ncol=n) CI<-vector(length=n) CR<-vector(length=n) for(i in 1:n){
#-----基于目标的准则层判断矩阵C(i)---- #计算判断矩阵C(i)的特征向量和特征值 U[,,i]<-eigen(C[,,i])$vectors V[,i]<-eigen(C[,,i])$values
lambda[i]<-V[1,i] #最大特征值
u[,i]<-U[,which.max(V[1,i]),i] #最大特征值对应的特征向量 w[,i]<-u[,i]/sum(u[,i]) #特征向量归一化
CI[i]<-(lambda[i]-max(nrow(C[,,i]),ncol(C[,,i])))/(max(nrow(C[,,i]),ncol(C[,,i]))-1) #计算判断一致性指数
CR[i]<-CI[i]/(RC[max(nrow(C[,,i]),ncol(C[,,i]))]) #计算判断一致率 }
#计算方案组合权重
A<-w #准则单权重合并 W<-A%*%w0 #计算组合权重
list(w0=w0,A=A,W=W,lambda0=lambda0,lambda=lambda,CR0=CR0,CR=CR) }
AHP(mydata,O)
层次分析模型的代码



