写在前面
之前有人点名希望写一个SEMSEM结构方程模型,其实之前我并没有实际做过SEM,当时也没有多考虑就答应了,但是查了一些资料之后我就后悔了😂
这个东西实在是很不好理解,也非常的麻烦,全程都需要手动进行,并且需要实际的分析人员对于研究的内容和分析的算法都非常了解SEM结构方程模型。
这里要特别感谢一下“生信小白鱼”,在几个关键的位置都是在与小白鱼讨论之后才得以确认SEM结构方程模型。
基本流程其实单独的做一个SEM的分析并不难,有很多的R包都可以实现,这个SEM的困难之处在于它不像其它的分析,输入数据之后得到一个结果就完事了。
SEM需要分析人员首先自行建立一个因子之间的关系模型,之后使用SEM对该模型进行分析,根据结果评估模型的效果,之后不断的对模型进行调整,随后重复“调整-评估”这一循环,直至结果满意为止。
了解了这个基本的过程之后,我就觉得我写的这篇推文应该是解决不了SEM分析的痛点了。
首先第一个痛点就是起始模型的建立,这个东西就是非常个性化的东西了,可以说没什么标准,只能由每个分析人员根据研究的实际情况自行摸索。
当然也有一些前期的基本工作,比如通过一些相关性分析、VIF、CCA/RDA等筛选一下用于建模的因子,去除不必要的因子,使得起始模型的建立更简单一些,也可以通过相关性结合研究实际初步评估一下直接作用和间接作用。
第二个痛点就是对模型的调整,每个因子应该放在什么位置,因子之间的关联应该怎么改变,这个东西是真的不知道怎么讲,感觉只能是多尝试。
这两个痛点大体上更多的是凭借研究人员的经验,因人而异、因时而异、因项目而异,所以下面的内容我只会介绍一下SEM的基本原理,以及单个SEM模型分析的结果意义。
当然没有经验的人也可以用“穷尽法”,把所有的可能性都试一遍,最后选择结果最好的,最好不要进行这样的尝试。
我个人觉得只有在特定的项目中,或者是在其它分析结果都不好的时候,我才会考虑使用SEM进行分析,不然我可能压根都不会做这个东西,实在是很费时间还不一定能得到满意的结果,特别是对于因子数据很多的研究。
在微生物群落研究中,SEM的目的也是探索对微生物群落形成或变化其主要作用的影响因子,用ggcor做个Mantel和环境因子相关性的组合图也挺香的吧~~
结构方程模型常规分析两个变量间是否存在关联时,我们会使用相关性分析,但是相关性只能表明两个变量存在相互关系,但无法得出哪个变量是因?哪个变量是果?
此外,相关性分析只是两个变量数量上的相互关系,而在实际情况中,有些变量可能不是直接与其它变量发生相互作用,而是通过第三个变量间接的与靶标变量关联。
结构方程模型(Structural Equation Modeling,SEM)就是一种将两个或多个结构模型联合起来,以实现对多元关系进行建模的统计框架,其可以解决相关性分析中无法得到的因果关系以及区别直接和间接作用。
结构方程模型的原理SEM是数据分析的一种特殊形式,从一个指定了多变量间(假定的)相互关系的模型开始,变量间的关系被形式化为一组方程,用于测试这些变量并量化它们之间的关系。
SEM的本质是分析两个变量的协方差。
方差很好理解,方差估计一个变量中个体分布偏离其平均值的情况。
协方差就是两个变量协同情况下的偏离情况,两个变量的变化规律越协同一致,则其协方差的数值越大。
对于一系列变量,我们可以得到一个方差-协方差矩阵,在矩阵中对角线为变量的方差,其余部分为变量的协方差,这个矩阵称为oberseved方差-协方差矩阵。
之后通过最大拟然法建立的SEM模型对这个矩阵进行估计,得到一个model-estimated方差-协方差矩阵,最后将两个矩阵结合得到最终的global oberseved方差-协方差矩阵。
在此过程中我们要评估model-estimated的矩阵与observed矩阵的匹配情况,就是Goodness-of-fit。
SEM的路径系数SEM的核心问题就是得到变量之间的回归系数(通常是线性回归),从而推断变量之间的依赖关系。
因为不同变量的数值不同,因此导致不同变量之间的协方差不在同一个水平上,也就无法比较,所以在比较变量间的协方差之前,需要对变量进行标准化,也就是Z转换,将所有变量均转换为均值为零,方差为1的变量,使得不同变量之间的协方差在同一个数量级,因而能够进行相互间的比较。
当对变量进行Z转化之后,线性回归系数就与相关系数相等了。
而如果不进行标准化,线性回归系数等于两个变量的协方差与解释变量方差的商,此时就与相关系数不相等了。
⚠️是否一定需要进行标准化,以及标准化的使用情况我没研究明白。
路径系数的8条规则:
如果两个变量之间只有相互关系而没有作用方向(没有箭头),称之为外源性变量,此时可以使用双向箭头来表示两个变量相关;
如果两个变量之间只被一条路径连接,那么这条路径的系数为回归系数;
如果两个变量之间是间接联系路径,则整个路径的系数为路径中每一个直接路径系数的乘积;
当一个变量被多个路径连接时,每一个路径的系数都是偏回归系数;
有箭头指向的变量称为内源性变量,箭头的R2为解释变量对这些内源性变量变化的解释比例;
两个内源性变量未分析的相关性就是其偏相关性;
一个变量对另一个变量的总的影响是其直接和间接影响的和;
模型的总效应与其总的相关性相等。
SEM模型匹配SEM可以分为协方差SEM和分段SEM,在正常的分析中可以选择其中之一进行,但我目前看到的一些好的文章均是两种模型都做。
本文使用R语言的lavann包和piecewisedSEM包讲解一下SEM模型的分析命令。
协方差SEM协方差SEM假定所有变量均具有正态分布,即数据服从多元正态分布,同时该分析还假定所有的变量均为独立的。
使用piecewisedSEM包的keeley数据作为示例数据,假定的初始关系为firesev由age决定,同时firesev还决定cover,使用lavaan包进行协方差SEM模型匹配。
library(devtools)install_github(\"jslefche/piecewiseSEM@devel\",build_vignette=F)install.packages(\"lavaan\")library(lavaan)library(piecewiseSEM)data(keeley)keeley_formula <- \'firesev ~ agecover ~ firesev\'keeley_sem <- sem(keeley_formula, data = keeley)summary(keeley_sem, standardize = T, rsq = T)结果一般要求Chi-square的p-value大于0.05。
Regressions中的Estimate即为每一条路径的R2,P(>|z|)为回归分析的显著性p值。
分段SEM分段SEM中,每组关系都是独立估计的,此过程将整体关系分解为与每个响应对应的简单或多回归,分别对每个响应进行评估,最后合并以生成有关全局SEM的推论。
keeley_psem <- psem(lm(firesev ~ age, data = keeley),lm(cover ~ firesev, data = keeley),data = keeley)keeley_psemfisherC(keeley_psem)## Fisher.C df P.Value## 1 5.18 2 0.075AIC(keeley_psem)## [1] 17.18BIC(keeley_psem)## [1] 32.179summary(keeley_psem, .progressBar = FALSE)不同于协方差SEM,分段SEM使用Fisher‘s C statistic代替卡方检验,但是同样要求P>0.05。
AIC会在给定模型的复杂性与其拟合优度之间进行权衡,可以将AIC值视为对应了模型的准确性,AIC值越小的模型表明越有可能准确地预测新数据,AIC小于2时认为模型效果很好。
参考资料:}
10000+:菌群分析 宝宝与猫狗 梅毒狂想曲 提DNA发Nature Cell专刊 肠道指挥大脑
系列教程:微生物组入门 Biostar 微生物组 宏基因组
专业技能:学术图表 高分文章 生信宝典 不可或缺的人
一文读懂:宏基因组 寄生虫益处 进化树
必备技能:提问 搜索 Endnote
文献阅读 热心肠 SemanticScholar Geenmedical
扩增子分析:图表解读 分析流程 统计绘图
16S功能预测 PICRUSt FAPROTAX Bugbase Tax4Fun
在线工具:16S预测培养基 生信绘图
科研经验:云笔记 云协作 公众号
编程模板: Shell R Perl
生物科普: 肠道细菌 人体上的生命 生命大跃进 细胞暗战 人体奥秘
学习16S扩增子、宏基因组科研思路和分析实战,关注“宏基因组”