R包poLCA的潛類別分析(LCA)

R包poLCA的潛類別分析(LCA)
已識別的潛類別還可用於建模。透過理論上潛在的分類變數對觀測資料進行分層,試圖消除觀測分類變數之間的任何虛假關係。
本篇簡介RpoLCALCA方法。
poLCA的LCA
先看一個簡單示例。
library(poLCA)
#資料集,詳情 ?values

#調查了 216 名受訪者對四個問題(A、B、C、D)的認同傾向,“1”代表不認同,“2”代表認同

#注:poLCA 中,分類變數使用 1、2、3 等數值代替,不同數值表示不同類別

data(values)

head(values)
#執行 LCA 識別資料集變數間的潛類別結構,詳情 ?poLCA

#例如設定潛類別為 2

#從隨機起始值開始,1000 次迭代獲取引數估計值(對數似然值)

#並執行 5 次獨立的 poLCA 獲得可能的全域性最大值

M1 <- poLCA(formula = cbind(A, B, C, D)~1, data = values, nclass = 2, maxiter = 1000, nrep = 5, graph = TRUE)

M1

poLCA()formula書寫為cbind(dv1,dv2,dv3…)的樣式,dv1dv2等代表觀測分類變數。對於沒有協變數的情況,公式為cbind(dv1,dv2,dv3)~1;若考慮協變數,將~1替換為所需的預測變數函式,例如cbind(dv1,dv2,dv3)~iv1
poLCA()使用區域性獨立性假設估計潛在多向表(latent multi-way tables)的混合模式,其數量(nclass)需手動指定。估計的引數包括每個外顯變數的條件機率,“混合”比例表示與每個潛在多向表相對應的觀測值的population share,以及在公式中指定的任何分類預測協變數的係數(存在協變數時)。
poLCA()使用期望最大化(Expectation MaximizationEM)和Newton-Raphson演算法獲得潛類別的最大對數似然(log-likelihood)引數估計值。受起始值(引數probs.start預設NULL,每次計算將使用不同的隨機初始值)和迭代次數(引數maxiter預設1000,即迭代1000次)的影響,它可能僅定位區域性最大值,而非全域性最大值,並隨nclass設定值的增加更可能出現問題。因此建議多次執行poLCA,直到相對確定找到了全域性最大值的可能性,例如將引數nrep的值設定為大於1(預設1),可以透過一次計算多次估計LCA的引數值並自動選擇全域性最大值。
條件機率和類別機率
結果概要如下所示。
首先透過5次計算結果的引數估計值可知,已經獲得了全域性最大值,所獲得的兩個潛類別是有代表性的。
Conditional item response probabilities中,列出了各分類變數中各外顯變數在潛類別中的條件機率(每一行的機率之和為1),可據此判斷哪些潛類別主要與哪些外顯變數有關。
Estimated class population shares,為本示例所獲得的兩個潛類別的估計機率,可以將潛類別機率可近似理解為因子分析中的解釋方差比例,以評估潛類別的重要程度。
透過擬合所獲得的潛類別至原資料,獲得AICBIC等適配檢驗指標,可以用於幫助評估潛類別是否合適。例如,分別比較nclass=nnclass=mn<m)的結果,綜合考慮AICBIC值更低且潛類別更少的情形。
#提取主要結果,例如

summary(M1) #物件中的各元素所記錄的內容,詳情 ?poLCA
M1$probs #Conditional item response probabilities

M1$P #Estimated class population shares

#可以透過柱形圖,每個變數類別在潛類別中的條件反應機率

#即 Conditional item response probabilities 中的值

library(reshape2)

library(ggplot2)
M1_probs <- melt(M1$probs, level = 2)
ggplot(M1_probs,aes(x = L2, y = value, fill = Var2)) +

geom_bar(stat = 'identity', position = 'stack', width = 0.5) +

facet_grid(Var1~.) +

scale_fill_brewer(type = 'seq', palette = 'Greys') +

theme_bw() +

labs(x = '', fill = 'probabilities') +

guides(fill = guide_legend(reverse = TRUE))

後驗類別機率
潛類別分析還可用於實現物件聚類。
在找到理想的潛類別並獲得引數估計後,繼續使用上述兩類機率值(外顯變數的條件機率和潛類別機率)計算外顯變數反應每種組合分類到各潛類別的後驗機率,然後根據後驗機率的大小決定該組合應歸入的潛類別,即創造一個新類別變數說明觀察值的後驗類別屬性。
#後驗類別機率

M1$posterior
#物件歸類

M1$predclass
#作圖

library(ggplot2)

library(ggrepel)
posterior <- data.frame(M1$posterior)

posterior$label <- rownames(values)

posterior$class <- as.character(M1$predclass)

names(posterior)[1:2] <- c('class1_probabilities', 'class2_probabilities')
ggplot(posterior, aes(class1_probabilities, class2_probabilities, color = class)) +

geom_point() +

geom_text_repel(aes(label = label, color = class), size = 3, show.legend = FALSE)

結果用於表示物件屬於某一類別的機率,並根據物件後驗機率的最大值將其歸入特定類別。例如上述顯示物件1(對應於原資料集,即第一位受試者)在class2中的後驗機率最大,因此將它歸類為class2類,其它同理。
帶協變數的LCA
以下再展示一例考慮協變數時的LCA示例。
帶協變數時,LCA也可稱為“帶協變數的潛類別分析”(latent class analysis with covariates),或“伴隨變數潛類別分析”(concomitant-variable latent class analysis),其中潛類別的可能性由一個或多個協變數預測。
## Three-class model with a single covariate.

data(election)
nes2a <- poLCA(formula = cbind(MORALG, CARESG, KNOWG, LEADG, DISHONG, INTELG, MORALB,

CARESB, KNOWB, LEADB, DISHONB, INTELB) ~ PARTY, data = election, nclass = 3, nrep = 5)

nes2a
pidmat <- cbind(1, c(1:7))

exb <- exp(pidmat %*% nes2a$coeff)
matplot(c(1:7),(cbind(1,exb)/(1+rowSums(exb))), ylim = c(0,1), type = 'l',

main = 'Party ID as a predictor of candidate affinity class',

xlab = 'Party ID: strong Democratic (1) to strong Republican (7)',

ylab = 'Probability of latent class membership',

lwd = 2, col = 1)
text(5.9, 0.35, 'Other')

text(5.4, 0.7, 'Bush affinity')

text(1.8, 0.6, 'Gore affinity')

此時在poLCA()formula中,將cbind(dv1,dv2,dv3)~1(無協變數情況)替換為cbind(dv1,dv2,dv3)~iv1(協變數iv1)之類的形式。更復雜的其它情況,如cbind(dv1,dv2,dv3)~iv1+iv2*iv3,考慮iv2iv3互動作用。
與上述相比,結果輸出中還給出了類別預測協變數的係數等值,可幫助進一步評估協變數對預測潛在類別成員的影響。
連結

相關文章