作為零計(jì)算機(jī)基礎(chǔ),純生物背景的實(shí)驗(yàn)喵虎敦,有很多技能還不會(huì)游岳,只希望將自己學(xué)習(xí)到的知識(shí)記錄下來,一方面讓自己能夠時(shí)常溫故知新其徙,一方面與大家分享學(xué)習(xí)內(nèi)容和心得胚迫,一起進(jìn)步呀。
主成分分析(principle component analysis擂橘,PCA)是常用的線性數(shù)據(jù)降維方法晌区,通過某種線性投影,將高維的數(shù)據(jù)映射到低維的空間中通贞,并期望在映射到的低維空間中包含的信息量最大朗若,即使用較少的數(shù)據(jù)維度來代表(保留)較多原始數(shù)據(jù)的特性。話句話說昌罩,就是把多個(gè)變量化成少數(shù)幾個(gè)主成分的方法哭懈,這些主成分能夠反映原始變量的大部分信息,為原始變量的線性組合茎用。
以下過程是在Rstudio中進(jìn)行遣总。
R中作為主成分分析最主要的函數(shù)是 princomp() 函數(shù)
princomp() 主成分分析?? 可以從相關(guān)陣或者從協(xié)方差陣做主成分分析
summary() 提取主成分信息
loadings() 顯示主成分分析或因子分析中載荷的內(nèi)容
predict() 預(yù)測(cè)主成分的值
screeplot() 畫出主成分的碎石圖
plot() 畫出數(shù)據(jù)關(guān)于主成分的散點(diǎn)圖和原坐標(biāo)在主成分下的方向
具體的R腳本如下:
##設(shè)置工作路徑
setwd("E:/R practice result")
##查看工作路徑
getwd()
##讀取數(shù)據(jù)
data <- read.csv("E:/R practice file/students_data.csv",header = T)
##進(jìn)行主成分分析
data.pr <- princomp(data,cor = T) ##cor=T的意思是用相關(guān)系數(shù)進(jìn)行主成分分析
##觀察主成分的詳細(xì)情況
summary(data.pr,loadings = T)
##計(jì)算得到各個(gè)樣本主成分的數(shù)據(jù)
pca_data <- predict(data.pr)
##將文件寫出旭斥,進(jìn)行本地保存
write.table(pca_data,file = "E:/R practice result/pca_data.txt",row.names = T,col.names = T,quote = F,sep = "\t")
#畫出主成分碎石圖,主成分方差占總體方差的情況,輔助判斷主成分提取個(gè)數(shù)古涧。當(dāng)折線由陡峭突然變得平穩(wěn)時(shí)垂券,陡峭到平穩(wěn)對(duì)應(yīng)的主成分個(gè)數(shù)即為參考提取主成分個(gè)數(shù)。X軸表示可能的因子數(shù)羡滑。在整個(gè)曲線下降的過程中菇爪,理論上會(huì)存在一點(diǎn),該點(diǎn)處曲線出現(xiàn)明顯的彎折柒昏,該點(diǎn)對(duì)應(yīng)的X軸的數(shù)字即應(yīng)保留的因子數(shù)凳宙。
screeplot(data.pr,type="lines")
#添加劃分成分的參考線
abline (v = 2 ,? ?col = "#900021", lwd = 2, lty = 2)
#計(jì)算前兩個(gè)主成分Comp1和Comp2得分,保存到data.pr2
data_pr2 <- data.pr$score[,1:2]? ? 或者data_pr2 <- pca_data[,1:2]
write.table(data_pr2,file = "E:/R practice result/data_pr2.txt",row.names = F,col.names = T,quote = F,sep = "\t")
plot(data_pr2, main = "after PCA") 或者plot(pca_data[,1:2])