本文主要介绍基于R进行潜在剖面分析(Latent Profile Aanalysis, LPA)。
关于潜在类别分析LCA/潜在剖面分析LPA的概念和区别,可以参考一下这篇文章:
潜在类别分析LCA \潜在剖面分析LPA介绍 https://www.jianshu.com/p/4c830094131e?utm_campaign=maleskine
但是此文对潜类别分析的阐释还比较生涩,而且没有具体的代码编写、模型优选等内容。本文旨在丰富LPA的内容,并希望和大家交流、共同进步。
1. 什么是潜类别分析、潜剖面分析,两者的区别在哪里?
通俗的说,就是我们想对我们数据中的个案进行分类,但是没有一个确切的指标可以告诉我们把他们分为几类。举个例子,比如我有1万个社会网络,社会网络有很多结构指标(比如网络的节点数、网络密度、网络的直径等),我想对这1万个网络按照网络指标进行分类,但是并不知道通过哪些变量进行分类,潜类别分析就派上了用场,潜类别分析就是用潜在的变量表征所有的结构指标变量,然后这1万个网络按照这些潜在变量就可以分成若干类别。
从上文中的简书内容我们可以看到,潜类别分析的变量是分类变量,而潜剖面分析纳入的变量是连续变量,这是两种分析方法最明显的区别。
2. 基于R的tidyLPA包进行LPA分析
假设数据已经准备好了,均是连续型变量,R的分析代码如下:
install.packages("tidyLPA")
install.packages("mclust")
install.packages("MplusAutomation")
library(MplusAutomation)
library(mclust)
library(tidyLPA)
#读取数据
lpa_data<-read.csv('lpa_continuous_variable.csv',header = TRUE)
#要分成几类,n_profiles就设置为几类
#关于models的取值,建议参考R包的文档,里面有解释,我后期会更新本文进行详解
m2<-estimate_profiles(df=lpa_data, n_profiles=2, models=1,
select_vars=c('opioid', 'syn', 'idu',
'minority', 'female', 'unmarry',
'low_edu', 'west', 'mid_age', 'mmt',
'nodes', 'density', 'avg_deg', 'modula',
'diameter', 'avg_dis'))
m2_fit<-get_fit(m2)
m2_class<-get_data(m2)
m2_estimates<-get_estimates(m2)
write.csv(m2_class,"m2_class.csv")
write.csv(m2_estimates,"m2_estimates.csv")
write.csv(m2_fit,"m2_fit.csv")
3.模型优选
我们将数据分为了2、3、4、5、6类,到底分为几类是最好的呢?这里建议参考两本书:
《潜变量建模与Mplus应用-基础篇》和 《潜变量建模与Mplus应用-进阶篇》,关注并点赞本博客,私信我邮箱给你发送哟~
其实大致意思就是把各类模型结果中的AIC、BIC、aBIC做成折线图,看拐点在几分类上,然后结合现实意义进行解释即可~