R数据分析:再写潜在类别分析LCA的做法与解释
liuian 2024-12-15 15:25 33 浏览
应粉丝要求,再给大家写一期潜在类别分析的教程,尽量写的详细一点。
首先,问题导入,啥是潜在类别分析?
Latent Class Analysis (LCA) is a statistical model in which individuals can be classified into mutually exclusive and exhaustive types, or latent classes, based on their pattern of answers on a set of (categorical) measured variables.
潜在类别分析就是依据个体在分类变量上的响应,将个体分为互斥的组,群,潜类别。
在这儿,组,群,潜类别都是一个东西,这儿大家注意,在潜在类别分析中响应变量或者说显变一定是分类变量,这个要和潜在剖面分析LPA区别开。
在做潜类别的时候你首先要设定你要你的数据有几个潜类别,我们的标准是拟合好的情况下尽可能选择最少的潜类别。
这儿值得注意的是,在R语言种poLCA的作者说过这么一段话:
He said, that he wouldn′t rely on statistical criteria to decide which model is the best, but he would look which model has the most meaningful interpretation and has a better answer to the research question.
也就是说最终你考虑到底你的数据有几个潜类别时,一定要考虑结果的可解释性。
今天还是给大家写一个系统的例子。
实例操练
我们要用到的R包为poLCA,在做潜类别分析的时候,我们的数据中不能有0,负值和小数点,还有,如果你的变量是二分类变量,一定不能编码为0、1,需要改为1,2。
跑潜在类别分析的语法
poLCA(formula, data, nclass=2, maxiter=1000, graphs=FALSE, tol=1e-10, na.rm=TRUE, probs.start=NULL, nrep=1, verbose=TRUE, calc.se=TRUE)
上面是poLCA包默认的语法参数,在自己跑的时候你可把graphs参数改成TRUE,这样就可以自动出图。
比如我们还是用上一篇文章中的samhsa2015.csv数据集跑,那么语法就可以写为:
f1 <- cbind(mhintake, mhdiageval, mhreferral, treatmt, adminserv)~1
LCA2 <- poLCA(f1, data=samhsa2015, nclass=2,graphs=TRUE)
运行后,我们就可以出图:
图中有每个显变量,和两个潜类别在不同显变量上的响应概率以及两个潜类别中的个体数量占比。
循环语法
咱们自己做分析时,会遇到的情况是,我也不知道我到底该把潜类别数量固定为几个,所以我们需要一个一个去试,相信很多用Mplus的同学都有这种经历,需要把类别数量设定为不同的数,然后都跑一遍,然后把结果记下来,再比较选择最优的模型。
但是如果用R跑,我们可以写一个循环,让它一次性把所有可能给我们跑完,并输出最优模型,岂不是美滋滋。所以大家一定有必要掌握一门编程语言哦。
循环语法如下:
#循环所有可能数量的潜类别
max_II <- -100000
min_bic <- 100000
for(i in 2:10){
lc <- poLCA(f, mydata, nclass=i, maxiter=3000,
tol=1e-5, na.rm=FALSE,
nrep=10, verbose=TRUE, calc.se=TRUE)
if(lc$bic < min_bic){
min_bic <- lc$bic
LCA_best_model<-lc
}
}
LCA_best_model
大家只需要把自己的数据套进去就可以直接输出最优模型啦。
比如还是我们刚刚用的数据,直接运行循环语法:
max_II <- -100000
min_bic <- 100000
for(i in 2:10){
lc <- poLCA(f1, samhsa2015, nclass=i, maxiter=3000,
tol=1e-5, na.rm=FALSE,
nrep=10, verbose=TRUE, calc.se=TRUE)
if(lc$bic < min_bic){
min_bic <- lc$bic
LCA_best_model<-lc
}
}
LCA_best_model
上面的代码从2到10给你自动拟合10个模型,并输出最优bic的模型,运行时间有点长哈,我电脑跑了20分钟,大家耐心一点。
不过你不用设置跑2到10,一般情况跑2-5个潜类别就完全够用了。
我对我的数据跑完上面的代码后,得到如下结果
就是说,其实我的数据适合做4个潜类别。
LCA画2D可视化语法
我们poLCA的自己出的图是3D的,我们也可以选择用ggplot2画2D的图出来,代码如下:
lcmodel <- reshape2::melt(LCA_best_model$probs, level=2)
zp1 <- ggplot(lcmodel,aes(x = L2, y = value, fill = Var2))
zp1 <- zp1 + geom_bar(stat = "identity", position = "stack")
zp1 <- zp1 + facet_grid(Var1 ~ .)
zp1 <- zp1 + scale_fill_brewer(type="seq", palette="Greys") +theme_bw()
zp1 <- zp1 + labs(x = "Fragebogenitems",y="Anteil der Item-\nAntwortkategorien", fill ="Antwortkategorien")
zp1 <- zp1 + theme( axis.text.y=element_blank(),
axis.ticks.y=element_blank(),
panel.grid.major.y=element_blank())
zp1 <- zp1 + guides(fill = guide_legend(reverse=TRUE))
print(zp1)
运行后得到下图:
这个如怎么解释呢?
我这个数据不是有5个变量嘛,意思就是指标告诉我们根据这5个变量把数据分为4个潜类别比较合适,上面这个图就是每一个潜类别在5个指标上的响应概率,因为我的每个指标都是2分类,pr(1)表示在相应指标响应1的概率,pr(2)表示在相应指标相应2的概率。
理解到这,我们就可以知道潜类别3在每个指标上响应2的概率都很大,而潜类别1在每个指标上响应1的概率都很大,以此类推,根据这些信息你就可以给你数据的每个潜类别进行命名啦。
你学会了嘛?
快快关注一波。
小结
今天又给大家写了潜类别的做法,感谢大家耐心看完,自己的文章都写的很细,代码都在原文中,希望大家都可以自己做一做,请关注后私信回复“数据链接”获取所有数据和本人收集的学习资料。如果对您有用请先收藏,再点赞转发。
也欢迎大家的意见和建议,大家想了解什么统计方法都可以在文章下留言,说不定我看见了就会给你写教程哦。
如果你是一个大学本科生或研究生,如果你正在因为你的统计作业、数据分析、论文、报告、考试等发愁,如果你在使用SPSS,R,Python,Mplus, Excel中遇到任何问题,都可以联系我。因为我可以给您提供好的,详细和耐心的数据分析服务。
如果你对Z检验,t检验,方差分析,多元方差分析,回归,卡方检验,相关,多水平模型,结构方程模型,中介调节,量表信效度等等统计技巧有任何问题,请私信我,获取详细和耐心的指导。
If you are a student and you are worried about you statistical #Assignments, #Data #Analysis, #Thesis, #reports, #composing, #Quizzes, Exams.. And if you are facing problem in #SPSS, #R-Programming, #Excel, Mplus, then contact me. Because I could provide you the best services for your Data Analysis.
Are you confused with statistical Techniques like z-test, t-test, ANOVA, MANOVA, Regression, Logistic Regression, Chi-Square, Correlation, Association, SEM, multilevel model, mediation and moderation etc. for your Data Analysis...??
Then Contact Me. I will solve your Problem...
加油吧,打工人!
猜你喜欢
相关推荐
- x-cmd install | jellex - 用 Python 语法在终端里玩转 JSON 数据!
-
还在为命令行下处理JSON数据烦恼吗?jellex来了!它是一款基于终端的交互式JSON和JSONLines数据处理工具,让你用熟悉的Python语法,轻松过滤、转换和探索JSO...
- 一篇长文带你在Python里玩转Json数据
-
Json简介Json(JavaScriptObjectNotation)很多网站都会用到Json格式来进行数据的传输和交换,就像上篇我提到的网易云音乐接口,它们返回的数据都是Json格式的。这因为...
- Python JSON 魔法手册:数据转换的终极艺术
-
对话实录小白:(崩溃)我从API拿到了JSON数据,怎么变成Python对象?专家:(掏出魔法书)用json模块,轻松实现数据转换!JSON基础三连击1.字符串Python对...
- Python JSON 详解教程(python json())
-
JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式(lightweightdatainterchangeformat)常用于Web应用、配置文件(co...
- Python 数据的 JSON 格式序列化及反序列化
-
在Python中,将数据转换为JSON格式非常简单,可以使用内置的json模块。json模块提供了json.dumps()和json.dump()方法,用于将Python对象...
- 如何使Python类可JSON序列化(python json 类)
-
技术背景在Python开发中,JSON(JavaScriptObjectNotation)是一种常用的数据交换格式。然而,Python的json模块默认只能序列化一些基本数据类型,如字典、列表、字...
- 详细介绍一下Python如何对JSON格式数据进行处理?
-
在Python中对于JSON数据的处理是在日常开发中的常见需求之一。通常情况下,对JSON数据的处理主要涉及到如下的的几个步骤对于JSON数据的解析操作对于JSON数据的处理操作对于JSON数据的格式...
- Python 字典l转换成 JSON(python转化字典)
-
本文需要5分钟。如果对您有用可以点赞评论关注.Python字典到JSONJSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,它基于ECMAScrip...
- 打造熟悉的VS界面风格(vs界面设计美化)
-
用惯了老机子的VS界面,换新机子时,各种不适应。现在重新打造老款样式:1)下载VisualStudio2013ColorThemeEditorhttps://marketplace.vis...
- 办公小技巧:全部亮相 让Excel单元格完全显示文本
-
平时我们在使用Excel制作表格的时候,经常会遇到由于文本内容较多,导致这些内容无法在一个单元格中完全显示。常规的方法是将单元格设置为“自动换行”,但是这样会影响整个文件的美观。下例是某小区的入住登记...
- WinForms 中的 CheckBox 控件使用指南
-
在WinForms中,CheckBox控件是一个允许用户选择或取消选择的单选按钮。它通常用于表示布尔值(真/假)或允许多选的情况。以下是如何使用CheckBox控件的一些基本信息和示例代码。创建...
- 图片转文字--四种OCR工具的安装和使用
-
本文仅测试简单的安装和使用,下一步应该是测试不同数据集下的检测准确率和检测效率,敬请期待。作者的系统环境是:笔记本:ThindPadP520OS:win11显卡:QuadroP520一、EasyO...
- C# 给Word每一页设置不同图片水印
-
Word中设置水印时,可加载图片设置为水印效果,但通常添加水印效果时,会对所有页面都设置成统一效果,如果需要对每一页或者某个页面设置不同的水印效果,则可以参考本文中的方法。下面,将以C#代码为例,对W...
- 集成的面向对象控件Xtreme Controls正式发布v17.0.0
-
CodejockXtremeControls为Windows图形用户软件工程师提供众多的有关MFC的控件产品,该产品是通过完全测试并专门为图形用户设计的一款专业控件。它是一款集成了面向对象的控件被...
- Win10 Build 10061老问题修复新问题来
-
|责编:刘菲菲【中关村在线软件资讯】4月23日消息:微软今天正式推送了Windows10Build10061预览版这个版本除了正常的功能更新和调整外,还修复了多个bug。其中一部分对于开发者开...
- 一周热门
-
-
Python实现人事自动打卡,再也不会被批评
-
Psutil + Flask + Pyecharts + Bootstrap 开发动态可视化系统监控
-
一个解决支持HTML/CSS/JS网页转PDF(高质量)的终极解决方案
-
再见Swagger UI 国人开源了一款超好用的 API 文档生成框架,真香
-
【验证码逆向专栏】vaptcha 手势验证码逆向分析
-
网页转成pdf文件的经验分享 网页转成pdf文件的经验分享怎么弄
-
C++ std::vector 简介
-
python使用fitz模块提取pdf中的图片
-
《人人译客》如何规划你的移动电商网站(2)
-
Jupyterhub安装教程 jupyter怎么安装包
-
- 最近发表
-
- x-cmd install | jellex - 用 Python 语法在终端里玩转 JSON 数据!
- 一篇长文带你在Python里玩转Json数据
- Python JSON 魔法手册:数据转换的终极艺术
- Python JSON 详解教程(python json())
- Python 数据的 JSON 格式序列化及反序列化
- 如何使Python类可JSON序列化(python json 类)
- 详细介绍一下Python如何对JSON格式数据进行处理?
- Python 字典l转换成 JSON(python转化字典)
- 打造熟悉的VS界面风格(vs界面设计美化)
- 办公小技巧:全部亮相 让Excel单元格完全显示文本
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- table.render (33)
- uniapp textarea (33)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- react-admin (33)
- vscode切换git分支 (35)
- vscode美化代码 (33)
- python bytes转16进制 (35)