日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

主成分分析R语言实现

發布時間:2023/12/10 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 主成分分析R语言实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

主成分分析是一種常見的降維統計方法,它通過適當的變量替換,使得新變量成為原變量的線性組合,并且新變量間彼此獨立,從而可從錯綜復雜的關系中尋求主要成分信息,揭示變量內在關系。本次主要分享的是該方法的R語言實現。

目錄

      • 數據集展示
      • 一、計算相關系數矩陣
      • 二、確定主成分個數
      • 三、主成分載荷分析
      • 四、主成分得分
      • 全部代碼

數據集展示

31省份的9項家庭支出指標,部分數據如下

一、計算相關系數矩陣

主成分分析法的前提是需要變量具有相關性,因此,我們需要先查看下各個變量的相關程度。

raw_data<-read.csv("data.csv",header=T) new_data<-raw_data[,-1] options(digits=2) cor(new_data)


縱觀整個相關系數矩陣,各個變量之間均存在一定的相關性,可進行后續的主成分分析

二、確定主成分個數

一般地,在計算相關系數矩陣后,通過求出其特征值與特征向量,進而計算方差貢獻率與累計方差貢獻率,這兩步操作均可以由R中的princomp函數一步實現。

確定主成分準則:特征值大于1累計方差貢獻率大于80%(這個值具體需要根據主成分的個數與保留信息綜合考慮確定)

PCA=princomp(new_data,cor=T) summary(PCA) screeplot(PCA,type="lines")

左側為各主成分的標準差方差貢獻率累計方差貢獻率;右側為碎石圖,其為一種確定主成分的可視化圖,將特征值從大到小排列,選擇一個拐點對應的序號,此序號后的特征值全部較小且彼此相差不大,則該序號則可定位主成分的個數。(注意:各個主成分的方差與它對應的特征值是相等的!

按照確定準則,左側顯示兩個主成分即包含了原變量的84%的信息,而右側的碎石圖也顯示出自第二個主成分后,其余主成分的特征值彼此差異不大。因此,最終確定為2個主成分。

三、主成分載荷分析

PCA$loadings[,1:2] #選擇前兩個主成分即可


從載荷矩陣來看,主成分Comp.1在設備、交通、教育、居住、雜項上載荷值較大,可視為非必須消費主成分;主成分Comp.2在食品、衣著、醫療上載荷值很大,可視為反映日常必須消費的主成分

四、主成分得分

(一)計算綜合得分
綜合得分=各主成分的得分*各主成分方差/各主成分的方差和,在本次案例中,可將最終得分PC寫為
PC=(2.3882?Comp.1+1.10142?Comp.2)/(2.3882+1.10142)PC=(2.388^2*Comp.1+1.1014^2*Comp.2)/(2.388^2+1.1014^2)PC=(2.3882?Comp.1+1.10142?Comp.2)/(2.3882+1.10142)
其中,Comp.1為主成分1的得分,Comp.2為主成分2的得分。現通過自編函數,進行綜合得分的求解。

#m為主成分個數 caculate_score<-function(PCA,m){comp_sd<-summary(PCA)$sdev[1:m] #各主成分標準差comp_score_matrix<-PCA$scores[,1:m] #各主成分得分矩陣comp_score<-data.frame(comp_score_matrix)#計算綜合得分comp_score$PC<-as.numeric(comp_score_matrix%*%comp_sd^2/sum(comp_sd^2))#計算排名comp_score$rank<-rank(-comp_score$PC)return(comp_score) } score<-caculate_score(PCA,2) rownames(score)<-raw_data[,1] head(score)

(二)主成分得分圖分析

plot(score$Comp.1,score$Comp.2,xlab='Comp.1',ylab='Comp.2',main='主成分得分圖') abline(h=0,lty=3);abline(v=0,lty=3) text(score$Comp.1,score$Comp.2,rownames(score))


從得分圖可知,在非必需消費主成分上comp.1得分最高的五個地區為上海、北京、廣東、浙江、天津,且上海、北京的絕對值明顯高于其他地區,表明在以設備、交通、教育、居住、雜項為主的非日常必需消費而言,上海、北京的消費水平遠遠高于其他省份。

在日常必需消費comp.2得分上,最高的五個地區為廣東、海南、福建、廣西、上海,可見這部分地區對于食品、衣著、醫療方面的消費較大。

全部代碼

raw_data<-read.csv("data.csv",header=T) new_data<-raw_data[,-1] options(digits=2) cor(new_data)PCA=princomp(new_data,cor=T) summary(PCA) screeplot(PCA,type="lines") #計算綜合得分 caculate_score<-function(PCA,m){comp_sd<-summary(PCA)$sdev[1:m] #各主成分標準差comp_score_matrix<-PCA$scores[,1:m] #各主成分得分矩陣comp_score<-data.frame(comp_score_matrix)#計算綜合得分comp_score$PC<-as.numeric(comp_score_matrix%*%comp_sd^2/sum(comp_sd^2))#計算排名comp_score$rank<-rank(-comp_score$PC)return(comp_score) } score<-caculate_score(PCA,2) rownames(score)<-raw_data[,1] head(score)#繪制得分圖 plot(score$Comp.1,score$Comp.2,xlab='Comp.1',ylab='Comp.2',main='主成分得分圖') abline(h=0,lty=3);abline(v=0,lty=3) text(score$Comp.1,score$Comp.2,rownames(score))

以上就是本次分享的全部內容~

總結

以上是生活随笔為你收集整理的主成分分析R语言实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。