今日代码(200714)--主客观求指标权重及求城市得分
生活随笔
收集整理的這篇文章主要介紹了
今日代码(200714)--主客观求指标权重及求城市得分
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
代碼記錄
主客觀求指標(biāo)權(quán)重及求城市得分
前言
有22個(gè)指標(biāo)和71個(gè)城市的10年數(shù)據(jù),現(xiàn)在利用主成分分析法求出客觀權(quán)重,并結(jié)合主管權(quán)重得出總權(quán)重,最后利用權(quán)重與標(biāo)準(zhǔn)化數(shù)值求出10年的得分。
前期準(zhǔn)備
設(shè)置工作路徑,讀取數(shù)據(jù)
workL = "C:/Users/goatbishop/Desktop/data" setwd(workL) getwd()library(magrittr)data <- read.csv("data0710.csv", stringsAsFactors = F) mendW <- read.table("weight2.txt") %>% c() %>% unlist() mendW <- mendW/sum(mendW)方法區(qū)
myStand是計(jì)算權(quán)重用的正向指標(biāo)標(biāo)準(zhǔn)化化, downStand是計(jì)算權(quán)重用的負(fù)向指標(biāo)的標(biāo)準(zhǔn)化,upStand2是計(jì)算用的正指標(biāo)標(biāo)準(zhǔn)化方法,upStand2是計(jì)算用的負(fù)指標(biāo)標(biāo)準(zhǔn)化方法, weightDemo是提取權(quán)重,相當(dāng)于提取前10個(gè)主成分,再進(jìn)行計(jì)算,這里沒有依據(jù)特征值大小或者累計(jì)貢獻(xiàn)率提取主成分?jǐn)?shù),僅僅是較為隨意的選取前10個(gè)主成分,請(qǐng)注意排查錯(cuò)誤!
####方法區(qū)#### myStand <- function(x) {newx = (x-mean(x))/sd(x)return(newx) }downStand <- function(x) {newx = myStand(-x)return(newx) }upStand2 <- function(x) {newx = (x-min(x) + 0.01)/(max(x)-min(x))return(newx) }downStand2 <- function(x) {newx = (max(x)-x + 0.01)/(max(x)-min(x))return(newx) }weightDemo <- function(x) {#這個(gè)問題以后再解決R <- (t(x) %*% x)/ dim(x)[1]e <- eigen(R, symmetric=T)pcMa <- abs(e$vectors)sqrtValue <- e$values^(0.5)pcVa <- e$values[1:10]/sum(e$values[1:10])#print(pcVa)weightTemp <- t(t(pcMa) / sqrtValue)[, 1:10]weight <- weightTemp %*% pcVaweight <- weight/sum(weight)return(weight) }求權(quán)重以及得分
構(gòu)造權(quán)重和得分矩陣,并求得權(quán)重和得分
#構(gòu)造權(quán)重矩陣 weight <- matrix(0 , ncol = 10, nrow = 22) colnames(weight) <- c(2018:2009)weightObj <- matrix(0 , ncol = 10, nrow = 22) colnames(weightObj) <- c(2018:2009)#構(gòu)造得分矩陣 score <- matrix(0 , ncol = 10, nrow = 71) colnames(score) <- c(2018:2009)count = 0 for (y in c(2018:2009)) {count = count + 1tempdata <- subset(data, year == y)tempdata = tempdata[, -c(1:3)]tempData_up <- apply(tempdata[, -c(7, 10, 12, 17, 18)], 2, myStand)#正向tempData_down <- apply(tempdata[, c(7, 10, 12, 17, 18)], 2, downStand)#負(fù)向newData <- cbind(tempData_up, tempData_down)tempData_up2 <- apply(tempdata[, -c(7, 10, 12, 17, 18)], 2, upStand2 )tempData_down2 <- apply(tempdata[, c(7, 10, 12, 17, 18)], 2, downStand2)newData2 <- cbind(tempData_up2, tempData_down2)## 計(jì)算權(quán)重w <- weightDemo(newData)#print(w)wave <- (w + mendW)/2#print(wave)#列中的所有行加總weightObj[, count] <- wweight[, count] <- wave#print(wave)##計(jì)算得分s <- newData2 %*% wavescore[, count] <- s }rownames(weightObj) <- colnames(newData) rownames(weight) <- colnames(newData) rownames(score) <- data[c(1:71), "city"]寫出數(shù)據(jù)
write.csv(weight, "weightP.csv") write.csv(weightObj, "weightObj.csv") write.csv(score, "scoreP.csv")
總結(jié)
以上是生活随笔為你收集整理的今日代码(200714)--主客观求指标权重及求城市得分的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 正式获批,首届亚洲通用航空展将于今年 1
- 下一篇: 再降就有点不礼貌了:爱国者 2TB 固态