潜在剖面分析:一种潜变量的分析方法
根据外显变量和对应的潜在变量的类型,可以采用相应的潜在变量建模方法对数据进行建模。当外显变量是连续变量,潜在变量为类别变量时,可以采用潜在剖面分析(latent profile model)建立测量模型,其基本思想是通过多个可观测的连续变量将测量对象划分为几个潜在的不同类别。
潜在剖面分析与聚类分析在目的上是一致的,即将个体分成不同的群组。
潜在剖面分析是在潜在类别分析的基础上进行的拓展,后者是当外显变量是类别变量,且外显变量也是类别变量时采用的潜变量建模方法。
潜在剖面分析在心理学中被广泛用于研究个体心理间的质性差异。个体心理不仅存在水平上的不同,还可能存在结构上的不同,因此潜在剖面分析可以用来对心理与行为问题进行诊断与分类。
潜在剖面分析能够做出所有个体属于某一心理 健康风险类型群体的可能性估计,借助拟合信息等统计学指标确定最合理的分类,从而保证分类结果的准确性。在潜在剖面分析中常用的拟合信息有艾凯克信息准则( AIC ) 和贝叶斯信息准则( BIC )、罗梦戴尔鲁本校似然比(LMRT)、信息熵(Entropy)等。一般说来一个模型如果有更高的 Entropy、更低的AIC 和 BIC、LMRT 达到显著性,则说明这个模型的拟合程度高(张洁婷等,2009)。
方法应用举例-《大学生心理行为问题的识别:基于潜在剖面分析》
以被试在 大学生人格问卷(UPI) 因素分析得出的五个维度上的得分作为外显变量( 已将第 25 题“想轻生”归入精神症状维度) 建立潜在剖面模型,对大学生的心理行为问题特征进行潜在剖面分析的模型拟合性估计。
表 2 显示了三类别模型在不同年份下类别划分良好的稳定性。在不同类别的人数分布上,第三类人群比例维持在 9. 35% ~ 9. 86% 之间,在 UPI 量表总分及各分量表得分上均显现出较高的一致性,第三类人群的 UPI 总分比第一类人群在两年间均高出
至少 1. 5 个标准差,在精神症状维度上的得分均比其他人群高出 2. 6 个标准差。
如图 1 所示,在三种类型中,第一类人群在五个症状维度的得分都很低,可命名为健康组,占总体的70. 99% ;第二类人群具有较高的认知症状和情绪症,状,躯体症状和人际敏感症状维度也略高于普通人群,反映了该群体学生存在认知和情绪方面的心理
困惑,命名为困扰组,该类占 19. 15% ;第三类人群存在突出的认知症状和精神症状,躯体症状、情绪症状和人际敏感症状维度上得分也较高,说明这一群体学生存在严重心理问题的风险很高,需要重点关注及进一步排查其患有严重心理疾病的风险,及时干预,可命名为风险组,它的比例为 9. 86% 。
R语言实现LPA
libaray('tidyLPA')
estimate_profiles(
df,
n_profiles,
models = NULL,
variances = "equal",
covariances = "zero",
package = "mclust",
select_vars = NULL,
...
)
参数说明
df: data.frame 格式的数据表;混合模型(mixed model)建模需要使用连续变量。
n_profiles: 估计剖面数量的整数向量,如1:4表示尝试剖面数为1、2、3、4个。
models: 整数向量。默认值为NULL, 通过限制剖面间的方差和协方差对模型进行设定,有6种模型可选。
variances: 字符串向量。设定要估计的方差。默认为"equal",设定所有剖面的方差相等。另一个选项是 "varying" ,即自由估计各剖面方差. 向量的每个元素都指向希望运行的一个模型。
covariances: 字符串向量. 设定要估计的协方差。默认为"zero",即不估计协方差(假设指标相互独立);或者 "equal" (假设不同剖面的题项间协方差相等), 以及"varying" (自由估计不同剖面的题项间协方差)。
package: 调用什么包做分析; "mclust"(默认值) 或者 "MplusAutomation"。
select_vars: 字符串. Optional vector of variable names in df, to be used for model estimation. Defaults to NULL, which means all variables in df are used.
其他参数此处不表。
ps:
在tidyLPA中,model 有六种常用模型可供选择:
- 等方差并且协方差为0
- 方差不等且协方差为0
- 等方差且等协方差
- 方差不等且协方差相等
- 等方差且协方差不等
- 方差不等且协方差不等
Two interfaces are available to estimate these models; specify their numbers in the models argument (e.g., models = 1, or models = c(1, 2, 3)), or specify the variances/covariances to be estimated (e.g.,: variances = c("equal", "varying"), covariances = c("zero", "equal")). Note that when mclust is used, models = c(1, 2, 3, 6) are the only models available.
R语言代码示例
iris_sample <- iris[c(1:4, 51:54, 101:104), ] # to make example run more quickly
# Example 1:
iris_sample %>%
subset(select = c("Sepal.Length", "Sepal.Width",
"Petal.Length")) %>%
estimate_profiles(3)
# Example 2:
iris %>%
subset(select = c("Sepal.Length", "Sepal.Width",
"Petal.Length")) %>%
estimate_profiles(n_profiles = 1:4, models = 1:3)
# Example 3:
Length <- c(5.1,4.9,4.7,4.6,7.0,6.4,6.9,5.5,6.3,5.8,7.1,6.3)
Width <- c(3.5,3.0,3.2,3.1,3.2,3.2,3.1,2.3,3.3,2.7,3.0,2.9)
Plength <- c(1.4,1.4,1.3,1.5,4.7,4.5,4.9,4.0,6.0,5.1,5.9,5.6)
iris_m <- data.frame(Length,Width,Plength)
p3 <- estimate_profiles(iris_m,n_profiles = 1:4)
plot_profiles(p3,raw_data = F, sd = T, add_line = T)