R語言 PCA主成分分析

2022-01-09 生信小知識

微信公眾號:生信小知識
關注可了解更多的教程及生信知識。問題或建議,請公眾號留言;

R語言 PCA主成分分析

前言統計學背景知識協方差相關係數函數總結實例講解1.載入原始數據2.作主成分分析3.結果解讀4.畫主成分的碎石圖並預測5.PCA結果繪製後記

前言

PCA分析大家肯定經常看到,但是你真的懂PCA分析的結果嗎?

圖我也會看,我只是不是很清楚PCA背後輸出結果的解讀而已。正好看到一篇不錯的博客,就把主要的知識點記錄下 。

reference:

統計學背景知識協方差

可以通俗的理解為:兩個變量在變化過程中是同方向變化?還是反方向變化?同向或反向程度如何?

從數值來看,協方差的數值越大,兩個變量同向程度也就越大。反之亦然。

從公式出發來理解一下:

公式簡單翻譯一下是:如果有X,Y兩個變量,每個時刻的「X值與其均值之差」乘以「Y值與其均值之差」得到一個乘積,再對這每時刻的乘積求和並求出均值(其實是求「期望」,但就不引申太多新概念了,簡單認為就是求均值了)。

具體例子可以去知乎詳細查看:

https://www.zhihu.com/question/20852004

相關係數

對於相關係數,我們從它的公式入手。一般情況下,相關係數的公式為:

翻譯一下:就是用X、Y的協方差除以X的標準差和Y的標準差。

所以,相關係數也可以看成協方差:一種剔除了兩個變量量綱影響、標準化後的特殊協方差。

既然是一種特殊的協方差,那它:

1、也可以反映兩個變量變化時是同向還是反向,如果同向變化就為正,反向變化就為負。

2、由於它是標準化後的協方差,因此更重要的特性來了:它消除了兩個變量變化幅度的影響,而只是單純反應兩個變量每單位變化時的相似程度

具體例子可以去知乎詳細查看:

https://www.zhihu.com/question/20852004

函數總結

注意:這裡的輸入數據,rownames是樣本名,colnames是樣本的特徵。(與正常數據正好相反,需要用t()來轉置數據

princomp()主成分分析  可以從相關陣或者從協方差陣做主成分分析

fviz_pca_ind對princomp()結果進行展示

summary()提取主成分信息

loadings()顯示主成分分析或因子分析中載荷的內容

predict()預測主成分的值

screeplot()畫出主成分的碎石圖

biplot()畫出數據關於主成分的散點圖和原坐標在主成分下的方向

實例講解

現有30名中學生身高、體重、胸圍、坐高數據,對身體的四項指標數據做主成分分析。

1.載入原始數據

# 清空環境
rm(list = ls())
options(stringsAsFactors = F)

# 準備數據
if (T) {
  test<-data.frame(
    X1=c(148, 139, 160, 149, 159, 142, 153, 150, 151, 139,
         140, 161, 158, 140, 137, 152, 149, 145, 160, 156,
         151, 147, 157, 147, 157, 151, 144, 141, 139, 148),
    X2=c(41, 34, 49, 36, 45, 31, 43, 43, 42, 31,
         29, 47, 49, 33, 31, 35, 47, 35, 47, 44,
         42, 38, 39, 30, 48, 36, 36, 30, 32, 38),
    X3=c(72, 71, 77, 67, 80, 66, 76, 77, 77, 68,
         64, 78, 78, 67, 66, 73, 82, 70, 74, 78,
         73, 73, 68, 65, 80, 74, 68, 67, 68, 70),
    X4=c(78, 76, 86, 79, 86, 76, 83, 79, 80, 74,
         74, 84, 83, 77, 73, 79, 79, 77, 87, 85,
         82, 78, 80, 75, 88, 80, 76, 76, 73, 78)
  )
  rownames(test) <- paste0("student_",1:30)
  colnames(test) <- c("height","weight","chest","sit-h")
}

2.作主成分分析

# PCA分析
if (T) {
  test.pr<-princomp(test,cor=TRUE)
  summary(test.pr,loadings=TRUE)
}

# Importance of components:
#                           Comp.1     Comp.2     Comp.3     Comp.4
# Standard deviation     1.8817805 0.55980636 0.28179594 0.25711844
# Proportion of Variance 0.8852745 0.07834579 0.01985224 0.01652747
# Cumulative Proportion  0.8852745 0.96362029 0.98347253 1.00000000

# Loadings:
#        Comp.1 Comp.2 Comp.3 Comp.4
# height  0.497  0.543  0.450  0.506
# weight  0.515 -0.210  0.462 -0.691
# chest   0.481 -0.725 -0.175  0.461
# sit-h   0.507  0.368 -0.744 -0.232

結果解讀:

Standard deviation 標準差  其平方為方差=特徵值

Proportion of Variance 方差貢獻率

Cumulative Proportion 方差累計貢獻率

由結果顯示:前兩個主成分的累計貢獻率已經達到96.36%,可以捨去另外兩個主成分,達到降維的目的。

因此可以得到函數表達式:

注意要點:

cor是邏輯變量,當cor=TRUE表示用樣本的相關矩陣R做主成分分析,當cor=FALSE表示用樣本的協方差陣S做主成分分析

loading是邏輯變量,當loading=TRUE時表示顯示loading 的內容,loadings的輸出結果為載荷是主成分對應於原始變量的係數,即Q矩陣

3.結果解讀

這裡我們可以看一看得到的test.pr變量的結構:

sdev是標準偏差

center是每列計算是減去的均值

scores即降維之後的結果

我們可以利用函數來驗證下scores的結果到底是什麼意思:

library(factoextra)
# PCA結果圖
fviz_pca_ind(test.pr)
# 手動畫散點圖
ggplot(as.data.frame(test.pr$scores),aes(Comp.1,Comp.2)) + geom_point()

PCA結果圖:

手動畫散點圖:

可以看到,這兩者的結果圖是一樣的!

4.畫主成分的碎石圖並預測

screeplot(test.pr,type="lines")

5.PCA結果繪製

主要用到的函數是fviz_pca_ind,這個函數來自factoextraR包,所以需要先安裝&加載才可使用,下面記錄下關於這個函數最常用的幾個選項:

Usage

fviz_pca_ind(X, axes = c(1, 2), geom = c("point", "text"),
      geom.ind = geom, repel = FALSE, habillage = "none", palette = NULL,
      addEllipses = FALSE, col.ind = "black", fill.ind = "white",
      col.ind.sup = "blue", alpha.ind = 1, select.ind = list(name = NULL, cos2
      = NULL, contrib = NULL), ...)

Arguments
# geom——指定圖形上是只顯示點,還是同時也顯示標籤。默認同時顯示。
# palette——自行指定顏色
# addEllipses——加95%置信橢圓
# col.ind——每個點的顏色
# legend.title——指定legend的名字

下面看實例:

fviz_pca_ind(test.pr,
             geom.ind = "point",
             col.ind = as.character(c(rep("Normal",15),rep("Tumor",15))),
             palette = c("red", "black"),
             addEllipses = T, 
             legend.title = "Groups")

是有點醜了,不過也是為了方便理解這個函數每個參數的意義。

後記

稍微整理了下,感覺對PCA怎麼畫有了更多了解,雖然之前畫過,但是都是跑流程,從沒有關注具體結果,所以,看似簡單,但是卻不熟悉。

相關焦點

  • R做PCA主成分分析
    PCA(Principal Component Analysis)是一種常用的數據分析方法。
  • 主成分分析(PCA)在R 及 Python中的實戰指南
    統計技術,比如,因子分析,主成分分析有助於解決這樣的困難。在本文中,我詳細地解釋了主成分分析的概念。我一直保持說明簡要而詳實。為了操作上的理解,我也演示了在R使用這個技術並帶有解釋。注意:要理解本文的內容,需要有統計學的知識。 什麼是主成分分析?
  • 初見|-PCA分析原理及R語言實現
    這裡一個指標就可以對應在利用主成分的基向量構建的坐標系中的點,這個點在不同基向量(代表了一個主成分)上的投影,就稱之為主成分對這個指標的因子負載。也就是該主成分對這個指標的解釋程度。19.                   PC120.  SS loadings   10.1321.  ProportionVar  0.9222.   23.  Mean itemcomplexity =  124.
  • PCA主成分分析
    這就有了PCA的最初思想,PCA是principal components analysis首字母的縮寫,中文名字叫主成分分析,顧名思義是對所有變量分清主次然後把主要成分抽取出來從而達到降維的效果,同時考慮降維的會帶來哪些好處,又會帶來哪些後果。
  • R語言給PCA加個小圈圈
    所以這種分析要求,最好的方法是提交給分析。另外我們公司R語言培訓中也有專門的PCA的圖形繪製。其中也涉及了用ggplot2來繪製PCA加圈的圖。例如我們這篇文章的封面圖片就是用ggplot2畫的。但是ggplot功能強大,也就意味著參數多啊,所以還是我們的ggord簡單易上手,另外還可以加入變量的」小線條「。所以老師如果想自己動手,豐衣足食的話。
  • R語言繪圖--PCA圖
    在生物信息分析中,PCA常用於分析不同樣本之間的相互關係,可以基於表達量或者SNP突變類型進行分析。R語言是一門專門針對統計繪圖等需求設計的程式語言,在R語言中,內置了PCA分析的函數prcomp。直接調用這個函數可快速針對一組數據進行PCA分析。配合ggplot2等繪圖包,可以方便的生成PCA分析可視化結果。
  • 用R語言畫三維PCA圖
    代碼來源於論壇貼,樓主自學的R語言,並把代碼貼出來共享,膩害~----代碼開始了----setwd("/Users/pca/")#設置工作目錄,windows可能不一樣,應該是C:/pca:這個樣子吧library(plot3D)#加載R包,沒有的話自己安裝一下library(scatterplot3d)#加載R包,沒有的話自己安裝一下
  • 【R技能】PCA在R語言中的實現
    PCA,主成分分析是一種有效的降維方法,常用於高維數據的處理,如基因表達譜數據。本教程主要展示 PCA 在 R 語言中的實現和可視化。數據準備所用數據為 iris 數據集。# datadata(iris)str(iris)# partition data # 將數據劃分成訓練集和測試集,一般的分析不用劃分set.seed(111)ind = sample(2, nrow(iris),replace = T, prob = c(.8,.2))train
  • 無監督機器學習算法:主成分分析
    無監督機器學習算法的兩種主要類型分別是使用主成分分析的降維算法和聚類算法(包括K-Means和層次聚類算法)。下面將依次介紹這些內容。主成分分析降維是一種重要的無監督學習方法,在實踐中得到了廣泛的應用。當數據集中有許多特徵時,可視化地表示數據或將模型擬合到數據中可能會變得非常複雜。
  • R語言 | 回歸分析(四)
    R: The R Project for Statistical Computinghttps://www.r-project.org/RStudio:https://rstudio.com/今天是我們最後一期R語言入門系列。從去年11月份到今天,中間也因學業停更了很久,好在堅持了下來。
  • 【R語言】遙感影像Theil Sen趨勢分析MK檢驗
    01按以下形式將影像預處理好,起名字可以根據自己的需要,但是你要是不了解R語言,就按我的格式改名字吧
  • 基於 R 的 PCA 在線分析工具
    PCA 分析應用很廣,但是很多情況下要生成可讀的報告是要費一番功夫的,這裡不會編程又想快速分析結果的盆友們的福音來了,下面推薦的內容是完全不需要編程並生成基於
  • R語言|路徑分析SEM的構建、解釋以及實際應用
    (參考譯文:路徑分析使用理論模型中由P區分技術生成的數據來區分一個變量對其他變量的直接和間接影響,這些相互關係被評估為變量之間的偏相關性,但是,與考慮單個因變量的常規多元回歸分析不同,路徑分析進行了多元多元回歸分析,其中多個因變量同時對一個或多個因變量進行回歸分析)。這段話其實很難懂,不懂也不影響,其實最主要的是看作者如何建模和做出解釋的即可。
  • R語言數據實戰 | 文本分析
    處理文本數據時,主要難點在應該如何將不規則的文本結構化,並進行描述或建模分析,從而更好地回答我們所研究的目標問題。例如,該如何從一個旅遊產品的名稱中提取和產品等級相關的變量,甚至於如何通過分析小說文本來了解作者的人物情節安排等。為了進一步了解文本分析、對難點各個擊破,接下來的三節內容將分別介紹如何對簡單詞語類文本進行建模、如何從長難句中提取有效信息、如何分析長篇小說中的人物關係。
  • R語言處理在線CRU氣候數據
    0 CRU數據集官網:https://crudata.uea.ac.uk/cru/data/hrg/1 R語言處理CRU數據集1《R語言處理CRU數據集1》2 R語言處理在線CRU高解析度網格化氣候數據2.1 繪製1901年1月溼度的示例
  • 「語言藝術小課堂」正音訓練——聲母r
    聲母 r01理論內容聲母r發音要領:發音時,舌尖上翹,靠近硬顎前部,留出窄縫,嗓子用力發聲,氣流從窄縫中擠出,摩擦成音,聲帶顫動。r r r02單音節練習容 繞 肉 若 熱 然 入 惹03雙音節練習揉揉 融入 容忍 軟弱
  • R語言數據實戰 | R中的數據類型
    第一章介紹了R語言的概貌,下面將以一個簡單的電影票房實際數據為例,介紹在實際數據處理中R語言中的基本類型、基本操作。在電影的宣傳期,往往能看到其主演、導演頻頻現身各大頭條,吸引看客眼球,最後的落腳點往往是「祝***電影票房大賣」。
  • 統計學最常用的「數據分析方法」清單(二)
    通過正交變換將一組可能存在相關性的變量轉換為一組線性不相關的變量,轉換後的這組變量叫主成分。 主成分分析首先是由K.皮爾森(Karl Pearson)對非隨機變量引入的,爾後H.霍特林將此方法推廣到隨機向量的情形。信息的大小通常用離差平方和或方差來衡量。 1.
  • R語言數據科學工具包:creditmodel-1.3版本發布
    2 開源creditmodel包的動機和意義creditmodel是一個免費開源的R語言數據科學工具包,旨在幫助沒有數據科學背景的人能夠在短時間內完成建模和數據分析工作,讓他們更多地關注業務問題本身,並將更多的時間分配給制定決策。