R語言3種數據分析方法,搬好板凳,記筆記了!

R語言多元分析系列之一:主成分分析R語言3種數據分析方法,搬好板凳,記筆記了!

主成分分析(principal components analysis, PCA)是一種分析、簡化數據集的技術。它把原始數據變換到一個新的座標系統中,使得任何數據投影的第一大方差在第一個座標(稱為第一主成分)上,第二大方差在第二個座標(第二主成分)上,依次類推。主成分分析經常用減少數據集的維數,同時保持數據集的對方差貢獻最大的特徵。這是通過保留低階主成分,忽略高階主成分做到的。這樣低階成分往往能夠保留住數據的最重要方面。但是在處理觀測數目小於變量數目時無法發揮作用,例如基因數據。

R語言中進行主成分分析可以採用基本的princomp函數,將結果輸入到summary和plot函數中可分別得到分析結果和碎石圖。但psych擴展包更具靈活性。

1 選擇主成分個數

選擇主成分個數通常有如下幾種評判標準:

  • 根據經驗與理論進行選擇

  • 根據累積方差貢獻率 ,例如選擇使累積方差貢獻率達到80%的主成分個數。

  • 根據相關係數矩陣的特徵值,選擇特徵值大於1的主成分。

另一種較為先進的方法是平行分析(parallel analysis)。該方法首先生成若干組與原始數據結構相同的隨機矩陣,求出其特徵值並進行平均,然後和真實數據的特徵值進行比對,根據交叉點的位置來選擇主成分個數。我們選擇USJudgeRatings數據集舉例,首先加載psych包,然後使用fa.parallel函數繪製下圖,從圖中可見第一主成分位於紅線上方,第二主成分位於紅線下方,因此主成分數目選擇1。

fa.parallel(USJudgeRatings[,-1], fa=”pc”,n.iter=100, show.legend=FALSE)

2 提取主成分

 pc=principal(USJudgeRatings[,-1],nfactors=1)
PC1 h2 u2

從上面的結果觀察到,PC1即觀測變量與主成分之間的相關係數,h2是變量能被主成分解釋的比例,u2則是不能解釋的比例。主成分解釋了92%的總方差。注意此結果與princomp函數結果不同,princomp函數返回的是主成分的線性組合係數,而principal函數返回原始變量與主成分之間的相關係數,這樣就和因子分析的結果意義相一致。

3 旋轉主成分

旋轉是在保持累積方差貢獻率不變條件下,將主成分負荷進行變換,以方便解釋。成分旋轉這後各成分的方差貢獻率將重新分配,此時就不可再稱之為“主成分”而僅僅是“成分”。旋轉又可分為正交旋轉和斜交旋轉。正交旋轉的流行方法是方差最大化,需要在principal中增加rotate=’varimax’參數加以實現。也有觀點認為主成分分析一般不需要進行旋轉。

4 計算主成分得分

主成分得分是各變量的線性組合,在計算出主成分得分之後,還可以將其進行迴歸等做進一步分析處理。但注意如果輸入數據不是原始數據時,則無法計算主成分得分。我們需要在principal中增加score=T的參數設置,結果將存放在結果的score元素中。

R語言多元分析系列之二:探索性因子分析

探索性因子分析(Exploratory Factor Analysis,EFA)是一項用來找出多元觀測變量的本質結構、並進行處理降維的技術。 因而EFA能夠將具有錯綜複雜關係的變量綜合為少數幾個核心因子。EFA和PCA的區別在於:PCA中的主成分是原始變量的線性組合,而EFA中的原始變量是公共因子的線性組合,因子是影響變量的潛在變量,變量中不能被因子所解釋的部分稱為誤差,因子和誤差均不能直接觀察到。進行EFA需要大量的樣本,一般經驗認為如何估計因子的數目為N,則需要有5N到10N的樣本數目。

雖然EFA和PCA有本質上的區別,但在分析流程上有相似之處。下面我們用ability.cov這個心理測量數據舉例,其變量是對人的六種能力,例如閱讀和拼寫能力進行了測驗,其數據是一個協方差矩陣而非原始數據。R語言中stats包中的factanal函數可以完成這項工作,但這裡我們使用更為靈活的psych包。

一、選擇因子個數

一般選擇因子個數可以根據相關係數矩陣的特徵值,特徵值大於0則可選擇做為因子。我們仍使用平行分析法(parallel analysis)。該方法首先生成若干組與原始數據結構相同的隨機矩陣,求出其特徵值並進行平均,然後和真實數據的特徵值進行比對,根據交叉點的位置來選擇因子個數。根據下圖我們可以觀察到特徵值與紅線的關係,有兩個因子都位於紅線上方,顯然應該選擇兩個因子。

library(psych)

二、提取因子

psych包中是使用fa函數來提取因子,將nfactors參數設定因子數為2,rotate參數設定了最大化方差的因子旋轉方法,最後的fm表示分析方法,由於極大似然方法有時不能收斂,所以此處設為迭代主軸方法。從下面的結果中可以觀察到兩個因子解釋了60%的總方差。Reading和vocabulary這兩個變量於第一項因子有關,而picture、blocks和maze變量與第二項因子有關,general變量於兩個因子都有關係。

fa = fa(correlations,nfactors=2,rotate="varimax",fm="pa" )
PA1 PA2 h2 u2
general 0.49 0.57 0.57 0.432

如果採用基本函數factanal進行因子分析,那麼函數形式應該是factanal(covmat=correlations,factors=2,rottion=’varimax’),這會得到相同的結果。此外,我們還可以用圖形來表示因子和變量之間的關係

factor.plot(fa,labels=rownames(fa$loadings))

三、因子得分

得到公共因子後,我們可以象主成分分析那樣反過來考察每個樣本的因子得分。如果輸入的是原始數據,則可以在fa函數中設置score=T參數來獲得因子得分。如果象上面例子那樣輸入的是相關矩陣,則需要根據因子得分系數來回歸估計。

fa$weights

PA1 PA2

R語言多元分析系列之三:多維標度分析

多維標度分析(MDS)是一種將多維空間的研究對象簡化到低維空間進行定位、分析和歸類,同時又保留對象間原始關係的數據分析方法。

設想一下如果我們在歐氏空間中已知一些點的座標,由此可以求出歐氏距離。那麼反過來,已知距離應該也能得到這些點之間的關係。這種距離可以是古典的歐氏距離,也可以是廣義上的“距離”。MDS就是在儘量保持這種高維度“距離”的同時,將數據在低維度上展現出來。從這種意義上來講,主成分分析也是多維標度分析的一個特例。

一、距離的度量

多元分析中常用有以下幾種距離,即絕對值距離、歐氏距離(euclidean)、馬氏距離(manhattan)、 兩項距離(binary)、明氏距離(minkowski)。在R中通常使用disk函數得到樣本之間的距離。MDS就是對距離矩陣進行分析,以展現並解釋數據的內在結構。

在經典MDS中,距離是數值數據表示,將其看作是歐氏距離。在R中stats包的cmdscale函數實現了經典MDS。它是根據各點的歐氏距離,在低維空間中尋找各點座標,而儘量保持距離不變。

非度量MDS方法中,“距離”不再看作數值數據,而只是順序數據。例如在心理學實驗中,受試者只能回答非常同意、同意、不同意、非常不同意這幾種答案。在這種情況下,經典MDS不再有效。Kruskal在1964年提出了一種算法來解決這個問題。在R中MASS包的isoMDS函數可以實現這種算法,另一種流行的算法是由sammon函數實現的。

二、經典MDS

下面我們以HSAUR2包中的watervoles數據來舉例。該數據是一個相似矩陣,表示了不同地區水田鼠的相似程度。首先加載數據然後用cmdscales進行分析。

library(ggplot2)
下面計算前兩個特徵值在所有特徵值中的比例,這是為了檢測能否用兩個維度的距離來表示高維空間中距離,如果達到了0.8左右則表示是合適的。
sum(abs(voles.mds$eig[1:2]))/sum(abs(voles.mds$eig))

然後從結果中提取前兩個維度的座標,用ggplot包進行繪圖。

x = voles.mds$points[,1]

三、非度量MDS 第二例子中的數據是關於新澤西州議員投票行為的相似矩陣,這裡我們用MASS包中的isoMDS函數進行分析

library("MASS")

A Handbook of Statistical Analyses Using R

多元統計分析及R語言建模


分享到:


相關文章: