用R語言做主成分分析

2021-02-19 計算表觀遺傳學

前言

主成分分析(PCA)是一種經典的線性維歸約方法,基於高維空間的數據尋找主成分將其轉換至低維空間,並保證低維空間下每個維度具有最大方差且不相關性。主成分分析,就是一種降維的分析方法,其考察多個變量間相關性的一種多元統計方法,研究如何通過少數幾個主成分來揭示多個變量間的內部結構,即從原始變量中導出少數幾個主成分,使它們儘可能多地保留原始變量的信息,且彼此間互不相關。

舉個例子來說明:拿到一個生物信息系的本科生期末考試成績單,裡面有三列,一列是對學科的興趣程度,一列是複習時間,還有一列是考試成績。我們知道要學好相關內容,需要有濃厚的興趣,所以第二項與第一項強相關,第三項和第二項也是強相關。那是不是可以合併第一項和第二項呢?

那麼為什麼要降維呢?

(1)多重共線性-預測變量之間存在一定程度的相關性。

多重共線性會導致解空間的不穩定,從而可能導致結果的不連貫。

(2)高維空間本身具有稀疏性。

(3)過多的變量會妨礙查找規律的建立。

(4)僅在變量層面上分析可能會忽略變量之間的潛在聯繫。

例如幾個預測變量的綁定才可以反映數據某一方面特徵。

主成分計算過程及數據模型

1.  將原始數據標準化,用scale()函數;

2. 求標準化數據的協方差矩陣,用cov()函數,或求數據的相關矩陣,用cor()函數;

3. 求協方差矩陣或相關矩陣的特徵值和單位特徵向量,用eigen()函數,其中$values是按從大到小對應的特徵值,$vectors是對應的單位特徵向量。

4. 主成分分析,用princomp(x,cor..)函數,x是矩陣,cor確定x是否為相關係數矩陣;

5. 確定主成分個數,用screeplot()函數,用可視化方法來確定主成分個數,選取一個拐點對應的序號;

6. 解釋主成分,用PCA$loadings顯示主成分載荷矩陣,PCA為主成分分析賦值變量;

7. 確定各樣本的主成分得分,用PCA$scores來確定,並根據樣本各主成分的分值來對樣本進行解釋。

1 函數總結

R中作為主成分分析最主要的函數是princomp()函數

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

summary()提取主成分信息 

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

predict()預測主成分的值 

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

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

1 案例演示

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

(1)載入原始數據

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))

(2)做主成分分析並顯示分析結果

test.pr<-princomp(test,cor=TRUE) 

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

summary(test.pr,loadings=TRUE) 

#loading是邏輯變量,當loading=TRUE時表示顯示loading 的內容

#loadings的輸出結果為載荷,是主成分對應於原始變量的係數即Q矩陣

(3)分析結果含義

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

Proportion of Variance  方差貢獻率

Cumulative Proportion  方差累計貢獻率

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

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

Z1=-0.497X1-0.515X2-0.481X3-0.507X4

Z1=0.543X1-0.210X2-0.725X3-0.368X4

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

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

由圖可以看出,第二個主成分之後圖線變化趨於平穩,因此可以選擇前兩個主成分做分析

p<-predict(test.pr)

# predict函數根據主成分生成最後的新變量(即將原始數據矩陣X與主成分係數矩陣A結合,生成最後的主成分新變量,用這個生成的新變量代替原始變量)

通訊郵箱:ad.cepi@edbc.org

投稿郵箱:scw.cepi@edbc.org

往期「精彩內容」,點擊回顧

DNA測序歷史 | CircRNA資料庫 | Epigenie表觀綜合 | 癌症定位

BWA介紹  |  源碼安裝R包 | CancerLocator  | lme4 | 450K分析

乳腺癌異質性 |  BS-Seq  | 隱馬模型 | Circos安裝 |  Circos畫圖

KEGG標記基因 |  GDSC  |  Meta分析  |   R線性回歸和相關矩陣

精彩會議及課程,點擊回顧

計算表觀遺傳學大數據前沿學術論壇會議記實

哈爾濱醫科大學2017年全國生物信息學暑期學校

2017龍星課程系列(一)

2017龍星課程系列(二)
2017龍星課程系列(三)

2017龍星課程系列(四)

2017龍星課程系列(五)

CEPI感謝您的支持!

(IOS系統用戶專用通道)

    讚賞    

相關焦點

  • R語言主成分分析方法的運用
    因子分析 典型相關分析,三種方法的共同點主要是用來對數據降維處理的從數據中提取某些公共部分,然後對這些公共部分進行分析和處理。#R中作為主成分分析最主要的函數是princomp()函數#princomp()主成分分析   可以從相關陣或者從協方差陣做主成分分析#summary()提取主成分信息 #loadings()顯示主成分分析或因子分析中載荷的內容#predict()預測主成分的值 #screeplot()畫出主成分的碎石圖 #biplot()畫出數據關於主成分的散點圖和原坐標在主成分下的方向
  • R語言實戰(14)——主成分分析和因子分析
    基本圖形R語言實戰(7)——基本統計分析R語言實戰(8)——回歸R語言實戰(9)——方差分析R語言實戰(10)——功效分析R語言實戰(11)——中級繪圖R語言實戰(12)——重抽樣與自助法R語言實戰(13)——廣義線性模型本期是我們推出
  • R語言 PCA主成分分析
    問題或建議,請公眾號留言;R語言 PCA主成分分析前言統計學背景知識協方差相關係數函數總結實例講解1.載入原始數據2.作主成分分析3.結果解讀4.畫主成分的碎石圖並預測5.PCA結果繪製後記前言PCA分析大家肯定經常看到,但是你真的懂PCA分析的結果嗎?圖我也會看,我只是不是很清楚PCA背後輸出結果的解讀而已。
  • 如何用R語言進行探索性因子分析(EFA)
    導入數據大家一般在進行探索性因子分析時都會使用SPSS,今天教大家如何在R語言中實現EFA。打開R studio,將數據導入R中點擊import Dataset,選擇From SPSS。因為本次分析的數據是以SPSS的sav格式保存的,所以這裡選擇從SPSS中導入。
  • 基於R語言的主成分和因子分析
    >)3)提取主成分4)主成分旋轉,當提取多個主成分時,對它們進行旋轉可使結果更具解釋性5)解釋結果6)計算主成分得分應用主成分分析使用psych包中的principal()函數,以下是該函數中參數的解釋:principal(r, nfactors
  • RStudio|用R Markdown生成你的R語言數據分析報告
    個人公眾號:數據科學家養成記 (微信ID:louwill12)R Markadown 作為一款通過R語言創建動態文檔的寫作排版工具,為數據科學提供了現成的寫作框架。通過 R Markdown 不僅可以運行和保存R代碼,還可以生成高質量的數據分析報告並以HTML、PDF或者word的形式分享。
  • 如何正確應用SPSS 軟體做主成分分析
    如何正確應用SPSS 軟體做主成分分析 作者:李小勝  陳珍珍
  • R 語言之數據分析高級方法「主成分分析」和「因子分析」
    本節主要總結「數據分析」的「主成分分析」和「因子分析」的思想。通過學習《 R 語言實戰 》關於這兩種方法的解釋,我們很容易理解這兩種方法其存在的意義。——降維。主成分分析與因子分析的不同主成分分析 ( PCA ) 是指,用一組較少的不相關變量代替大量相關變量,同時儘可能保留初始變量的信息。值得注意的是,主成分是初始變量的線性組合。因子分析 ( EFA ) 是指, 通過發掘隱藏在數據下的一組較少的、更為基本的無法觀測的變量,來解釋一組可觀測變量的相關性。
  • R語言從入門到精通:Day14(PCA & tSNE)
    主成分分析(Principle component analysis, PCA)前面我們已經用兩期教程跟大家講過理論和實際繪圖(在線主成分分析Clustvis和主成分分析繪圖)。今天,我們就從PCA的數理統計層面入手,去講講完整的PCA應該怎麼操作。
  • R學習用R語言做分析(3)——統計分布
    在R中各種概率函數都有統一的形式,即一套統一的前綴+分布函數名:      d 表示密度函數(density);      p 表示累積分布函數,(cumulative distribution function,CDF);      q 表示分位數函數,能夠返回特定分布的分位數(quantile);      r
  • 技術貼 | R語言:組學關聯分析和pheatmap可視化
    舉例展示R語言組學關聯分析的方法。宏基因組數據以KO-樣品豐度表為例。代謝組數據以metabolite-樣品豐度表為例。基本方法是用R語言psych包corr.test函數進行兩組數據的相關分析,結果經格式化後用pheatmap可視化得熱圖。一、模擬輸入 1.
  • 數據分析系列(3) | 如何用R語言進行相關係數與多變量的meta分析
    本文主體部分來自《全哥的學習生涯》,如需轉載請聯繫公眾號後臺。本
  • R語言和Python實現回歸分析
    r的取值範圍是[-1,1],r=1表示完全正相關!r=-1表示完全負相關!r=0表示完全不相關。為什麼要對相關係數進行顯著性檢驗?一元回歸不存在多重共線性的問題;而多元線性回歸要摒棄多重共線性的影響;所以要先對所有的變量進行相關係數分析,初步判定是否滿足前提---多重共線性時間序列數據會自發呈現完全共線性問題,所以我們用自回歸分析方法;出現多重共線性如何改善:1. 刪除變量對去除多重共線性最為顯著。2.
  • 一文了解R語言數據分析 ----主成分分析
    三、使用R語言進行主成分分析在R中有很多方法可以實現主成分分析,基礎的prcomp函數,psych包中的principal函數都可以構建主成分分析。然後,使用第二種方式進行主成分分析:com <- principal(r = Thurstone,nfactors = 1)com## Principal Components Analysis## Call: principal(r = Thurstone, nfactors = 1)
  • R語言之主成分分析
    主成分分析(Principal Component Analysis,PCA),就是將多個變量通過 線性變換以選出較少個數重要變量的一種多元統計分析方法
  • R語言從入門到精通:Day12--R語言統計--回歸分析
    關注  從許多方面來看,回歸分析都是統計學的核心。它其實是一個廣義的概念,通指那些用一個或多個預測變量(也稱自變量)來預測響應變量(也稱因變量) 的方法。通常,回歸分析可以用來挑選與響應變量相關的預測變量,可以描述兩者的關係,也可以生成一個等式,通過預測變量來預測響應變量。
  • R語言對接高級語言Fortran
    (1)Fortran是當之無愧的性能之王,在本文的測試中可以看到Fortran代碼的效率是Rcpp的2倍、Julia的4倍、python的30倍、R語言的90倍。在for循環密集的代碼中,Fortran可以輕鬆達到R語言的200倍;(2)很多古老的、但專業上通用的模型採用Fortran語言編寫,翻譯成其他語言,人力所不能及。為何對接到R語言?
  • 手把手教你用 R 語言分析歌詞
    來自:AI研習社翻譯 | 劉朋  Noddleslee  程思婕  餘杭     整理 |  凡江基於 R 語言對 Prince 的音樂的歌詞研究:用文本挖掘和探索性數據分析(EDA)來了解這位藝術家的生涯。這是由三部分組成的系列輔導教程的第一部分,在這個系列裡,你將會使用 R 語言對傳奇藝術家 Prince 的歌詞通過各種分析任務進行實例研究。
  • R語言時間序列分析
    - 趨勢:是時間序列在長時期內呈現出來的持續向上或持續向下的變動;- 季節變動:是時間序列在一年內重複出現的周期性波動。它是諸如氣候條件、生產條件、節假日或人們的風俗習慣等各種因素影響的結果;- 循環波動:是時間序列呈現出的非固定長度的周期性變動。
  • R語言-stringr-字符串處理
    對大部分常規商業數據分析工作者的面對的表格數據而言,字符處理可能僅僅只是合併、剔除、刪除空格、倒敘等基礎操作。單雙引號R語言中字符串輸入時,可以使用單引號,也可以使用雙引號。r_left <- function(str,num){  str_sub(string = str,start = 1,end = num)}r_left('我是R語言學習者',3)