如何使用R语言绘制双因子模型

文摘   2024-10-28 10:23   北京  


PSYCH统计实验室


01 前言

大家好,本篇推文是双因子模型系列推文的第二篇,上一篇推文我们对基本概念及文章介绍做了一个简单的论述,详情可见《双因子模型(bi-factor model)的简介及文章介绍》

本篇推文我们将会介绍如何使用R语言绘制双因子模型。在介绍之前,我们将会先介绍如何使用R语言绘制普通的验证性因子分析模型图,这样对比才更方便看出来差异。


02 使用R语言绘制普通的

验证性因子分析


实际上,在之前的推文中,我们已经介绍过如何使用R语言绘制普通的验证性因子分析模型图《CFA在Mplus和R中的操作方法与结果解读》。大家可以先看一下之前的推文,本次绘制普通的验证性因子分析模型图的代码就不会重复对代码进行解读了。

本次推文使用的是用在文章发表过程中实际使用的数据,身体谈论量表的数据(大家也可以用自己的数据跟着一步步操作,本次示例数据无法提供)。

先简单介绍一下这个数据,身体谈论量表分为三个维度,分别是消极的肥胖谈论(negative fat talk,NFT),消极的肌肉谈论(negative muscle talk, NMT),积极的身体谈论(positive body talk,PBT)。

通过探索性图分析探索性因子分析的结果,研究得到了每个维度所对应的条目,NFT有5个条目,NMT有4个条目,PBT有5个条目,因此希望能够通过验证性因子分析来看实际数据的统计模型与得到的理论模型是否能够拟合。

CFA.MI <- import("CFA.sav")

CFA <- CFA.MI[, 16:29]

View(CFA)

library(lavaan)

cfa.model1 <- 'NFT=~BTS1+BTS2+BTS3+BTS4+BTS5

NMT=~BTS6+BTS7+BTS8+BTS9

PBT=~BTS10+BTS11+BTS12+BTS13+BTS14'

fit1 <- cfa(cfa.model1, data=CFA,std.lv=T)#如果模型拟合不好的话,

# 可以考虑加",ordered=FALSE,estimator=WLSMV"(这里没加是因为加了反而模型拟合变差)

summary(fit1,

        fit.measures=TRUE)#卡方自由度,TLI,CFI,RMSEA,SRMR

fitmeasures(fit1, c("chisq","df","pvalue",'cfi', "tli",'rmsea', 'SRMR'))

#这里稍微插一句话,虽然这个总结的代码很简便,能够一下子就看到需要报告的指标,但是没有报告RMSEA的90%置信区间,依然需要回到之前的结果部分再去寻找#

library(semPlot)

semPaths(fit1,

         whatLabels="std",#绘制标准化系数

         layout="tree",#“tree”或“tree2”比较好看

         rotation = 1,#当使用“tree”或“tree2”layout时的旋转。

         # 1、2、3、4表示外生变量分别放在顶部、左侧、底部和右侧。

         color = "lightblue",

         style="lisrel")#当前表示的(残差)方差是什么样的,也有其它选项,但这个最好看

好的,我们现在已经得到了一个普通的验证性因子模型图了,接下来将介绍如何使用R语言绘制双因子模型图。

03 使用R语言绘制双因子模型

bifactor.model <-

'G=~BTS1+BTS2+BTS3+BTS4+BTS5+BTS6+BTS7+BTS8+BTS9+BTS10+BTS11+BTS12+BTS13+BTS14

NFT=~BTS1+BTS2+BTS3+BTS4+BTS5

NMT=~BTS6+BTS7+BTS8+BTS9

PBT=~BTS10+BTS11+BTS12+BTS13+BTS14'

双因子模型与普通的验证性因子分析模型的最大区别在于增加了一个公共因子G,它包括了量表的所有条目。

fit2 <- cfa(bifactor.model,

            data=CFA,

            std.lv=T,

            orthogonal=TRUE)

#敏锐的读者应该已经发现了,在对双因子模型进行分析的时候,多了一行参数orthogonal=TRUE,这是因为如果不加这个参数的话,R会出现警告提示#

summary(fit2,

        fit.measures=TRUE,

        standardized=TRUE)

fitmeasures(fit2, c("chisq","df","pvalue",'cfi', "tli",'rmsea', 'SRMR'))

summary(fit2,

        fit.measures=TRUE,

        standardized=TRUE)

fitmeasures(fit2, c("chisq","df","pvalue",'cfi', "tli",'rmsea', 'SRMR'))

 

semPaths(fit2, bifactor = "G",

         title=F, what = "std", residuals = FALSE,

         color = "lightblue",

         intercepts = FALSE, layout = "tree2",

         label.cex=1, edge.label.cex=0.5, font=2,  

         edge.color="lightblue", fixedStyle = c("lightblue",1),freeStyle = c("black",1),esize = 0.05,

         rotation=1)             

04 结语


以上就是本期推文的全部内容啦,大家敬请期待下期推文:《对两篇发表在高水平期刊上的使用双因子模型的论文的解读》~


PSYCH统计实验室

通知公告

网络分析课程目前开放视频课啦

单次课200元/讲(学生),250元/讲(非学生)

共有四讲内容:

①横断面网络分析简介与基础

②网络分析与因子分析

③交叉滞后网络分析

④时间序列网络分析

购买后开放视频权限14天,可多次申请。

并赠送所有课程相关资料(无PPT)

如果想申请购买,请联系M18812507626


更多资讯

关注我们

文稿:久久

排版:Little Star

责编:Wink
审核:摘星

本文由“Psych统计自习室”课题组原创,欢迎转发至朋友圈。如需转载请联系后台,征得作者同意后方可转载。


Psych统计自习室
大家好,我们是由来自北京师范大学,西南大学,天津医科大学等高校在读硕士、博士研究生组成的一个科研团队——Psych统计自习室。Psych统计自习室旨在关注心理学、精神病学领域的最前沿的系列研究,并做前沿统计知识的分享。
 最新文章