主成分分析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的得分。現通過自編函數,進行綜合得分的求解。
(二)主成分得分圖分析
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语言实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在线问题反馈模块实战(十七):实现exc
- 下一篇: solidworks——铝型材画法