簡體   English   中英

實施PCA后如何提取行名?

[英]How can extract row names after PCA implementation?

我正在使用PCA(使用FactoMineR庫)通過PCA模型減少測試DataFrame(包含30行和750列)的尺寸:

pca_base <- PCA(test, ncp=5, graph=T)

我使用[FactoMineR中的] dimdesc()函數進行維度描述,以識別具有給定主要成分的最重要的變量,如下所示:

pca_dim<-dimdesc(pca_base)

pca_dim是3個長度的列表。

我的問題是如何從列表[1]和列表[2]中提取pca_dim的行名?

我嘗試以下代碼:

#to select dim 1,2 use axes
pca_dim<-dimdesc(pca_base,axes = c(1,2))

rownames(pca_dim[[1]])

但是結果是NULL。

暫時,我將使用來自factoextra包中的演示數據集decathlon2:data(decathlon2)它包含27個個人(運動員),由13個變量描述。

library(factoextra)
data(decathlon2)


decathlon2.active <- decathlon2[1:23, 1:10]
res.pca <- PCA(decathlon2.active,scale.unit = TRUE, graph = FALSE)

res.desc <- dimdesc(res.pca, axes = c(1,2))

謝謝!

遇到此類問題時,要訪問R對象上的信息,解決它們的最佳方法是首先檢查函數str的輸出。

str(pca_dim)
#List of 2
# $ Dim.1:List of 1
#  ..$ quanti: num [1:8, 1:2] 0.794 0.743 0.734 0.61 0.428 ...
#  .. ..- attr(*, "dimnames")=List of 2
#  .. .. ..$ : chr [1:8] "Long.jump" "Discus" "Shot.put" "High.jump" ...
#  .. .. ..$ : chr [1:2] "correlation" "p.value"
# $ Dim.2:List of 1
#  ..$ quanti: num [1:3, 1:2] 8.07e-01 7.84e-01 -4.65e-01 3.21e-06 9.38e-06 ...
#  .. ..- attr(*, "dimnames")=List of 2
#  .. .. ..$ : chr [1:3] "Pole.vault" "X1500m" "High.jump"
#  .. .. ..$ : chr [1:2] "correlation" "p.value"

因此對象的結構很簡單,它是一個包含兩個列表的列表。 這些子列表中的每個子列表只有一個成員,即設置了dimnames屬性的矩陣。
因此,您可以使用標准訪問器函數來獲取這些屬性。

rownames(pca_dim$Dim.1$quanti)
#[1] "Long.jump"    "Discus"       "Shot.put"     "High.jump"    "Javeline"    
#[6] "X400m"        "X110m.hurdle" "X100m"

rownames(pca_dim$Dim.2$quanti)
#[1] "Pole.vault" "X1500m"     "High.jump"

您必須將dimdesc的結果移動到每個元素的data.frame中,如下所示:

rownames(data.frame(res.desc[1]))
[1] "Long.jump"    "Discus"       "Shot.put"     "High.jump"    "Javeline"     "X400m"        "X110m.hurdle"
[8] "X100m"       
> rownames(data.frame(res.desc[2]))
[1] "Pole.vault" "X1500m"     "High.jump" 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM