


(Abdi et al, 2013)
MFA已被廣泛用於多種領域,例如:
調查分析,物件為被調查的個體,變數為調查問題,問題可按主題劃分為變數集;
感官分析,物件是食品,第一組變數包括味覺變數(甜,苦等),第二組包括化學變數(pH值、葡萄糖速率等);
生態學分析,物件為觀測地域,第一組變數描述了環境特性,第二組描述物種數量;
多組學分析,物件是樣本,不同的變數集可以為轉錄組、蛋白組、代謝組等測量資料;
時間序列,可以將各變數集定義為每個變數在不同時間的測量值;
本篇簡介R包FactoMineR的MFA方法,以及結合factoextra包實現視覺化。分析中將展示如何揭示重要的變數,這些變數對解釋資料集的方差起最大的作用。
資料集
FactoMineR包的內建資料集wine,記錄了21種葡萄酒的資訊。
library(FactoMineR)
#資料集,詳情 ?wine
data(wine)
head(wine[1:6])
該資料集中,每一行代表一種葡萄酒,共21行。
每一列代表了葡萄酒的屬性資訊,共31列。其中前2列是分類變數,label(Saumur、Bourgueil或Chinon)代表了葡萄酒的產地,soil(Reference、Env1、Env2或Env4)代表了植物的土壤環境;第3-31列是定量變數,代表了葡萄酒各類品質特徵的打分。

整體而言,對於資料集中所有代表葡萄酒屬性的變數,可將它們組合為6組變數集,包含1組分類變數和5組定量變數:
第1-2列,共2列,包括葡萄酒產地等屬性,該變數集代表葡萄酒“來源屬性”(origin);
第3-7列,共5列,包括搖動前的氣味強度、香氣質量、果味等屬性,該變數集代表葡萄酒“搖動前的氣味屬性”(odor before shaking);
第8-10列,共3列,包括視覺上的區分度等屬性,該變數集代表葡萄酒“視覺屬性”(visual);
第11-20列,共10列,包括搖動後的氣味強度、香氣質量、果味等屬性,該變數集代表葡萄酒“搖動後的氣味屬性”(odor after shaking);
第21-29列,共9列,包括酸度等屬性,該變數集代表葡萄酒“味覺屬性”(taste);
第30-31列,共2列,包括質量等屬性,該變數集代表葡萄酒“質量屬性”(quality)。
接下來期望根據這些組合屬性,對21種葡萄酒的品質進行綜合評價,以及尋找它們之間的共同特徵或差異,即可透過MFA來完成。
R包FactoMineR的MFA
FactoMineR中,MFA透過MFA()函式執行。
#執行 MFA,詳情 ?MFA
#其中,搖動前後的氣味、視覺和味覺作為 active groups,來源和質量作為 supplementary groups
res.mfa <- MFA(wine, group = c(2, 5, 3, 10, 9, 2), type = c('n', 's', 's', 's', 's', 's'),
name.group = c('origin', 'odor_before_shaking', 'visual', 'odor_after_shaking', 'taste', 'quality'),
num.group.sup = c(1, 6), graph = TRUE)
summary(res.mfa)
其中,group指定列的集合作為變數集(資料集的列需要提前按組排列好)。
type指定變數標準化方法,與各變數集一一對應。MFA的目標是整合描述相同觀察物件的不同變數集,由於各變數的量綱不一致,為了平衡每組變數的影響(或者說為了使各變數集具有可比性),需對各變數集執行標準化處理。對於定量變數集(將用於PCA),通常透過將每個變數除以其標準差進行標準化(即Z-scores);對於分類變數集(將用於MCA),每組透過將其所有元素除以稱為其第一奇異值(該值是標準差矩陣等效項)的量進行標準化。type引數中,n即用於這種對分類變數的標準化,s用於定量變數的標準化,詳情參閱幫助文件。
name.group為變數集指定名稱。

結果概要顯示,前兩軸承載了68.87%的總方差,具有較高的代表性。
接下來對於物件(葡萄酒)和變數(屬性)間的關係,以及變數對排序空間的貢獻等,可主要透過排序圖評估。
graph = TRUE引數,可在計算過程中自動輸出圖形。不過我們有更便捷的視覺化方法,見下文。
同樣地,對於MFA主要資訊的提取,除了可直接在結果中提取外,也和排序圖的展示一樣使用其它工具輔助完成,見下文。
#提取主要資訊,例如
res.mfa
res.mfa$eig #各軸特徵值
R包factoextra的視覺化方法
接下來展示使用factoextra包來幫助解釋和視覺化MFA結果。
儘管下述方法並非全部來自factoextra包。
特徵值/方差
首先檢視MFA的特徵值概況。
#藉助 factoextra 包更好地提取資料和視覺化
library(factoextra)
#提取每個維度(軸)的特徵值/承載的方差
eig.val <- get_eigenvalue(res.mfa)
head(eig.val)
#視覺化各軸特徵值/方差
fviz_screeplot(res.mfa)


eigenvalue為各MFA軸的特徵值,即各軸承載的方差;variance.percent為各軸特徵值與所有軸特徵值總和的比例,即各軸的方差貢獻率;cumulative.variance.percent為累積貢獻率。
變數集整體間的關係及其對排序空間的貢獻
MFA結果中,可首先觀測各變數集整體之間的關係。
#變數集結果,用於反映變數集整體對 MFA 排序空間的貢獻
group <- get_mfa_var(res.mfa, 'group')
group

#檢視細節部分,例如
#各變數集作為整體,計算了它們與各 MFA 軸的相關性
head(group$correlation)
#排序座標也可用於反映各變數集與各 MFA 軸的相關程度,前兩軸為例展示
head(group$coord)
fviz_mfa_var(res.mfa, 'group', axes = 1:2)

對應MFA命令列引數,搖動前後的氣味、視覺和味覺作為active groups,圖中紅色顯示;來源和質量作為supplementary groups,圖中綠色顯示。
根據變數集在排序圖中的位置,可以評估各變數集與MFA軸之間的相關性及相對貢獻。第一軸上4個active groups的座標幾乎相同,意味著它們對第一維的貢獻相似;對於第二軸,搖動前後的氣味具有相對較大的座標,表明它們對第二維的貢獻最大。
#直接顯示了各變數集對各排序軸的貢獻度
head(group$contrib)
#視覺化各變數集對前兩軸的貢獻度
fviz_contrib(res.mfa, 'group', axes = 1)
fviz_contrib(res.mfa, 'group', axes = 2)

#變數集之間的相關性透過 RV 係數衡量
#變數集之間的相關性矩陣
res.mfa$group$RV
#相關圖
library(corrplot)
corrplot(res.mfa$group$RV, method = 'number', number.cex = 0.8, diag = FALSE, tl.cex = 0.8)
corrplot(res.mfa$group$RV, add = TRUE, type = 'upper', method = 'pie', diag = FALSE, tl.pos = 'n', cl.pos = 'n')
#這種相關性可透過置換檢驗確定重要性
#例如搖動前的氣味(原始資料集的 3-7 行)和搖動後的氣味(原始資料集的 11-20 行)之間的相關性的置換檢驗
#記得執行 Z-scores 標準化變數集
coeffRV(scale(wine[3:7]), scale(wine[11:20]))$p.value

各變數間的關係及其對排序空間的貢獻
上述查看了變數集整體間的關係,接下來可以檢視各變數間的關係。
#各具體變數對排序空間的貢獻,資料結構同上述“變數集整體”
quanti.var <- get_mfa_var(res.mfa, 'quanti.var')
quanti.var
#例如同樣以排序圖視覺化各變數與 MFA 軸的關係,前兩軸為例展示
head(quanti.var$coord) #排序座標
fviz_mfa_var(res.mfa, 'quanti.var', axes = 1:2, palette = 'jco', col.var.sup = 'violet', repel = TRUE)

圖中顏色代表了變數所屬的變數集,定量變數展示為向量。相關圈(correlation circle)代表所有定量變數範數標準化向量。
兩個變數之間的夾角為銳角,則二者存在正相關;鈍角為負相關;趨於正交則相關性很低。變數與哪個軸的夾角越小,表明其越作用於哪個軸;變數在某軸的投影長度越長,則表明其對該軸的貢獻越大。
#直接顯示了各變數對各排序軸的貢獻度
head(quanti.var$contrib)
#展示 top20 變數對前兩軸的貢獻度
fviz_contrib(res.mfa, choice = 'quanti.var', axes = 1, top = 20, palette = 'jco')
fviz_contrib(res.mfa, choice = 'quanti.var', axes = 2, top = 20, palette = 'jco')

紅色虛線表示平均貢獻值,便於觀測哪些變數大於平均貢獻。
#可選使用漸變色,在排序圖中按變數貢獻對 active groups 變數上色
#這裡方便觀測資料,將所有變數以點展示
fviz_mfa_var(res.mfa, 'quanti.var', axes = 1:2, col.var = 'contrib', geom = c('point', 'text'),
gradient.cols = c('#00AFBB', '#E7B800', '#FC4E07'), col.var.sup = 'violet', repel = TRUE)

#變數太多了,評估最具典型的一些變數
select_val <- dimdesc(res.mfa, axes = 1:2, proba = 0.001)
summary(select_val)
#保留最具典型的一些變數的排序圖
varsig <- res.mfa$quanti.var$cor
varsig <- subset(varsig, rownames(varsig) %in% unique(c(rownames(select_val$Dim.1$quanti), rownames(select_val$Dim.2$quanti))))
plot(varsig[ ,1:2], asp = 1, type = 'n', xlim = c(-1, 1), ylim = c(-1, 1))
abline(h = 0, lty = 3)
abline(v = 0, lty = 3)
symbols(0, 0, circles = 1, inches = FALSE, add = TRUE)
arrows(0, 0, varsig[,1], varsig[,2], length = 0.08, angle = 20)
for (v in 1:nrow(varsig)) {
if (abs(varsig[v,1]) > abs(varsig[v,2])) {
if (varsig[v,1] >= 0) pos <- 4 else pos <- 2
} else {
if (varsig[v,2] >= 0) pos <- 3 else pos <- 1
}
text(varsig[v,1], varsig[v,2], labels=rownames(varsig)[v], pos = pos)
}

物件間以及物件和變數間的關係
觀測物件(葡萄酒)在排序空間中的位置及相互關係,以及物件和變數的關係。
#檢視排序物件,資料結構類上上述
ind <- get_mfa_ind(res.mfa)
ind
#例如檢視物件排序座標
head(ind$coord)
#展示物件在前兩軸中的排序圖
#如果不想在圖中展示分類變數,可使用引數 invisible = 'quali.var'
fviz_mfa_ind(res.mfa, axes = 1:2, palette = c('#00AFBB', '#E7B800', '#FC4E07'),
habillage = 'Label', addEllipses = TRUE, ellipse.type = 'confidence', repel = TRUE)

分類變數將預設和物件一起展示在該圖中。分類變數顯示為黑色,Env1、Env2、Env3代表變數集中的土壤類別,Saumur、Bourgueuil和Chinon代表酒的產地。在該圖中,物件(葡萄酒)按其產地著色顯示。
若兩種葡萄酒的品質較為相似,則它們在排序圖中的位置相互接近。
可結合上文中變數集或變數對各排序軸的貢獻,評價葡萄酒特徵。例如,葡萄酒T1和T2在第二軸上對應較高的數值,而葡萄酒搖動前後的氣味兩組變數集對第二軸具有較高的貢獻,那麼可知T1和T2應當屬於更為“芳香濃郁”型別。
以及評估分類變數和物件以及定量變數間的關係。例如,分類變數Env4在第二軸上具有較高座標值,靠近葡萄酒T1和T2,暗示改土壤環境中的葡萄更具香甜品質。
#其它可選視覺化方案,例如分別按兩組分類變數特徵,在圖中對代表葡萄酒的點標註顏色
fviz_ellipses(res.mfa, axes = 1:2, c('Label', 'Soil'), repel = TRUE)

在排序圖中展示MFA的全域性PCA與各組變數集PCA中物件得分的關係。
#MFA 圖中物件位置與各組變數集 PCA 中的物件位置,前兩軸為例展示
fviz_mfa_ind(res.mfa, axes = 1:2, partial = 'all')
#可選擇部分物件展示
fviz_mfa_ind(res.mfa, axes = 1:2, partial = c('1DAM', '1VAU', '2ING'))

圖中黑點代表MFA排序空間內的物件座標;與物件點相連的不同顏色的線則代表了各變數集各自的PCA中物件的座標,它們的形心即為MFA中物件座標。
偏軸圖
偏軸(partial axes)代表了所有變數集各自PCA(或MCA)所得特徵向量(排序軸)投影到MFA排序空間中的情況,圖中圓圈的半徑(等於1)代表標準化偏軸最大的長度。
#偏軸圖,前兩軸為例展示
fviz_mfa_axes(res.mfa, axes = 1:2)

透過該圖可評估哪些變數集的特徵對MFA排序空間具有更高的貢獻,這些變數集的前兩軸與MFA的前兩軸是否高度相關,MFA的各維度主要受哪種型別的屬性集支配等。
參考資料



