R包tidyLPA的潛剖面分析(LPA)

R包tidyLPA的潛剖面分析(LPA)
潛類別分析Latent Class AnalysisLCA)和潛剖面分析(Latent Profile AnalysisLPA)是旨在從觀測資料中鑑別隱藏組的技術。它們與聚類相似,但更靈活,因為它們基於資料的顯式模式,並提供了對隱藏組確定程度的解釋。如果期望將大量變數減少為幾個子組,則LCALPA很有用。LCALPA均假設資料中存在未觀察到的潛在特徵,這些潛在特徵代表了對指示項的響應模式,二者區別在於LCA用於分類變數,LPA則用於連續變數。
LPA試圖根據一系列連續變數的潛在特徵(或稱潛在類、潛剖面)識別物件響應模式。LPA將連續變數的方差分解為剖面內和剖面間方差,估計變數的不同特徵,並透過潛在類解釋觀測變數間的複雜關係以及實現物件聚類。
本篇簡介RtidyLPALPA方法。
tidyLPA的LPA
tidyLPA包的開發目的在於使R實現LPA變得更容易,它為廣泛使用的mclustMplusAutomation等包(這些是LPA的主流包)提供了一個框架,用於高斯混合建模。因此,tidyLPA並不包含直接執行LPA的程式碼,而是封裝了mclustMplusAutomation等包中的LPA相關函式,使它們的呼叫更方便。
tidyLPA的主要貢獻是:
1)提供指定LPA通用模型的功能;
2)透過更“整潔”的操作,使輸出結果在後續分析中更容易使用:輸入和輸出均為data.frame,便於讀寫、分析及繪圖;使用管道運算子“%>%”組合函式,類似於linux的管道操作,使函式書寫和前後過程更優雅;使用起來較為傻瓜式,可一步獲得多種統計值。
tidyLPA的LPA執行式
然後展示一個示例。
tidyLPA的內建資料集“pisaUSA15”,記錄了2015PISA專案針對美國學生的某項調查資料,包含四項評估內容(變數):
broad_interest:學生興趣的綜合測量;
Enjoyment:學生娛樂的綜合測量;
instrumental_mot:學生工具性動機的綜合測量;
self_efficacy:學生自我效能的綜合測量。
library(tidyLPA)
#資料集,詳情 ?pisaUSA15

data(pisaUSA15)

head(pisaUSA15)

然後期望根據這些指示值,尋找潛在特徵解釋指示值之間的潛在結構,並透過LPA對學生個體進行分層,以及探究變數對學生分層的貢獻。
library(dplyr)
##LPA 分析,詳情 ?estimate_profiles

#選擇了部分資料演示,一是作為示例減少執行時間,二是展示這種管道符操作示例方法

#這裡選擇了前 100 行的觀測物件,以及 3 種觀測變數執行 LPA;劃分 3 個潛在特徵(類,class),並使用模型 1

#本示例未執行變數標準化

m3 <- pisaUSA15[1:100, ] %>%

select(broad_interest, enjoyment, self_efficacy) %>%

single_imputation() %>%

#scale() %>%

estimate_profiles(n_profiles = 3, variances = 'equal', covariances = 'zero', package = 'mclust')
##若不習慣使用管道符,以上就是這樣的結構

#選擇演示用的資料子集

pisaUSA15_select <- pisaUSA15[1:100,c('broad_interest', 'enjoyment', 'self_efficacy')]
#填補資料中的缺失值

pisaUSA15_select <- single_imputation(pisaUSA15_select)
#資料標準化,視實際情況而定;標準化方法可使用 scale()、poms() 等

#pisaUSA15_select <- scale(pisaUSA15_select)
#LPA 分析

m3 <- estimate_profiles(df = pisaUSA15_select, n_profiles = 3, variances = 'equal', covariances = 'zero', package = 'mclust')

由於tidyLPA主要作為其它R包的介面,因此在使用時需指定特定R包名稱(事先確保這些已經安裝),以呼叫它們的LPA方法使用。如這裡呼叫mclust包的方法執行LPA
n_profiles引數用於指定潛在特徵的數量,以便確定最終識別多少潛在特徵以解釋變數間的關係,進而將物件聚為多少類。
tidyLPA目前提供了6種模型方法,對應於常見的不同需求,使用時根據是否以及如何估計變數方差和協方差來指定模型。可透過models引數指定,或者修改variancescovariances引數項指定。
通常,潛在特徵數量的指定以及模型的選擇需要基於多種來源的證據來確定,包括資訊標準、統計檢驗、可解釋性和簡約性等。
以下為tidyLPA6種模型方法:
1)將方差限制為在各個類之間相等,並且協方差固定為0(變數的條件獨立性),即等方差和零協方差的情形(models=1,或variance='equal',covariances='zero');
2)不等方差和零協方差的情形(models=2,或variance='varying',covariances='zero');
3)等方差和等協方差的情形(models=3,或variance='equal',covariances='equal');
4)不等方差和等協方差的情形(models=4,或variance='varying',covariances='equal',無法透過mclust擬合,需使用MplusAutomation);
5)等方差和不等協方差的情形(models=5,或variance='equal',covariances='varying',無法透過mclust擬合,需使用MplusAutomation);
6)不等方差和不等協方差的情形(models=4,或variance='varying',covariances='varying')。
關於這些模型的簡介,以及和其來源RmclustMplusAutomation的關係,可參考:
https://data-edu.github.io/tidyLPA/articles/Introduction_to_tidyLPA.html
就獲得的LPA結果而言,每次結果會有微小的差別。
LPA潛剖面的引數估計
如上示例指定劃分了3個潛在類(class,即潛在特徵、潛剖面),可使用get_estimates()獲取3個潛在class的均值方差估計、顯著性p值等引數估計值。
結果反映了潛在class對於解釋所觀測的變數結構是否是有意義的。
#獲取引數估計

m3_est <- get_estimates(m3)

m3_est

LPA的擬合優度評估
對於擬合優度的評估,tidyLPA可一次生成很多用於反映LPA擬合優度的統計指標。
#檢視擬合統計量

m3_fit <- get_fit(m3)

m3_fit

例如:LogLik,給定模型的資料的對數似然值;AICAikake資訊準則;BIC,貝葉斯資訊準則;BLRT,自舉似然檢驗;等等指示值描述可參考該連結文末:
https://data-edu.github.io/tidyLPA/articles/Introduction_to_tidyLPA.html
例如,AICBIC的值越小代表了擬合度越高,即模型越可靠。存在多個備選模型時,可透過比較它們的AICBIC值,儘可能選擇較低AICBIC值(精度原則)且潛在class更少(簡約性原則)的模型。
當然,選擇時也要綜合考慮結果對於解釋資料是否有意義的問題。
LPA的後驗機率
潛類別分析LCA),LPA在獲得理想的潛在class及其引數估計值後,繼續計算變數反應每種組合分類到各潛在class的後驗機率,然後根據後驗機率的大小決定該組合應歸入的潛在class。即透過觀測變數和潛在class的關係,將觀測物件劃分歸類。
#物件響應估計剖面的後驗機率

m3_class <- get_data(m3)

m3_class
#繪製剖面圖展示物件聚類

plot_profiles(m3)

表格結果中,每一行為一觀測物件,排列順序和輸入資料集中的順序相同;各列的資訊分別表示選擇的模型(本示例選擇使用了模型1)、劃分的class數量(本示例指定了劃分3個潛在class)、資料集中的變數觀測值、各物件響應潛在class的後驗機率即其最終被劃分的class(選擇後驗機率最高的那個)。
圖片橫軸為變數,縱軸為變數的值;各點代表觀測物件,顏色表示了物件劃分的潛在class
如果做LPA的目的還包含實現對個體的聚類,則該過程是很有幫助的。
各類模型的比較執行及評估
此外,tidyLPA允許我們一次執行多種模型,或者設定不同的潛在class數量。在獲得多種結果後,可綜合比較它們以選擇最合適的執行模式。
##多模型比較執行,管道符操作示例

#例如分別設定 1、2、3 個潛在特徵,並選擇兩種模型執行

#最後透過 AIC、BIC 等值,評估擬合優度,並選擇最適方法

pisaUSA15[1:100, ] %>%

select(broad_interest, enjoyment, self_efficacy) %>%

single_imputation() %>%

estimate_profiles(n_profiles = 1:3, variances = c('equal', 'varying'), covariances = c('zero', 'varying')) %>%

compare_solutions(statistics = c('AIC', 'BIC'))

當然這僅為機器自動評估的結果,實際分析中僅可作為參考使用,因為我們分析資料的最終目的是解釋一定的自然/社會現象的,機器自動選擇的“最佳模式”可能不具任何實際意義。
連結

相關文章