FEATURED · 精选文章

分段结构方程模型(piecewiseSEM):更贴合数据实况的因果建模策略

发布时间 / 2026/9/4 1:39:34
来源 / 创域科博编辑部
栏目 / 资讯中心
分段结构方程模型(piecewiseSEM):更贴合数据实况的因果建模策略 做结构方程模型SEM的研究者第一次接触分段结构方程模型piecewiseSEM时通常会先困惑一个问题传统 SEM 有成熟的软件为什么还需要一个“分段”方案这个困惑的答案恰好也是本文想讨论的核心piecewiseSEM 并不是传统 SEM 的简化版而是一种在数据处理逻辑上更接近“局部拟合、整体验证”的建模策略。它在生态学、环境科学、社会学等非正态、非独立、中小样本数据非常常见的领域里提供了一条更务实的路径。我在处理一组包含空间自相关的生态调查数据时才真正理解这个包的定位。那时我按照传统 SEM 的流程准备数据结果发现变量不满足多元正态性样本量也不够支撑一个包含潜变量的测量模型。如果继续用全局估计方案整个项目就会卡在数据假设上。后来改用 piecewiseSEM模型在十几分钟内就跑通了。这件事给我的启发是很多看似“统计方法选择”的难题本质上是对数据结构真实面貌的尊重问题。下面这篇文章我会从原理讲到 R 语言实现再讲到实际落地时容易踩的坑。不是简单给你列一遍函数用法而是想讲清楚一件事分段结构方程模型的价值不是替代传统 SEM而是把建模的焦点从“整体拟合优度”拉回到“因果结构是否合理”上。1. 先理解它解决的不是拟合问题而是数据假设问题很多初学者会在传统 SEM 软件里反复尝试数据变换、删除异常值、改变估计方法只为了让模型跑出“看起来不错”的拟合指数。这种做法的核心误区在于传统 SEM 的全局估计方法对数据有一套较严格的假设当你不断调整数据去适配方法时其实已经在偏离真实研究问题了。1.1 传统 SEM 为什么在真实数据里频频“卡壳”传统结构方程模型通常基于最大似然估计或加权最小二乘估计它有几个在教科书里常见、但真实数据里很容易被忽视的前提多元正态性连续内生变量和误差项被假设为多元正态分布。遇到计数数据、比例数据、强偏态数据时这个假设经常被打破。观测独立性传统 SEM 的似然函数默认样本之间独立。但生态学里的样地嵌套、时间重复测量、空间自相关社会科学里的班级嵌套、社区聚类都会让观测不再独立。样本量门槛包含潜变量的测量模型需要估计的参数数量很大样本量不足时模型可能无法收敛或者参数估计的稳定性很差。模型复杂度与数据匹配一个大型 SEM 可能有几十条路径但真实研究里的样本量往往撑不起这么复杂的结构。这些限制不是统计软件可以自动解决的。当数据不符合假设时传统 SEM 给出的 p 值和置信区间可能都是不可靠的而研究者却很难觉察。1.2 分段拟合改变了什么piecewiseSEM 的思路很直接不再一次性估计整个模型而是把路径图拆成多个子模型分别用普通线性模型lm、广义线性模型glm、混合效应模型lme、lmer等去拟合最后再通过独立性检验来判断整体路径结构是否合理。这个改变带来几个重要影响每个子模型可以有自己的分布假设。计数变量用 Poisson 或负二项分布二元变量用 Logistic 回归连续变量用高斯分布互不干扰。非独立数据可以通过混效模型处理。比如把样地或年份作为随机效应写进子模型就不再需要强行忽略数据内部的嵌套结构。样本量压力大大降低。每个子模型只需要估计自己的那部分参数不需要为一个大型协方差矩阵服务。所以分段结构方程模型解决的核心问题不是“拟合算法”的差异而是让模型能够真正尊重数据的生成过程。注意不要误以为 piecewiseSEM 对所有数据都是“万能解”。它的核心价值是放宽了分布假设和独立性假设但它不会自动让你的因果推断变严谨。2. 原理把全局模型拆成局部模型再用独立性检验串联起来如果只是把路径图拆开拟合那跟分别做多个回归有什么区别这是初学者最常问的一个问题。答案是piecewiseSEM 的“结构方程”味道来自它用 d-sep 检验把局部模型重新链接成了一个可验证的整体。2.1 有向分离与基元方程要理解 piecewiseSEM需要先理解一个来源于因果图的概念d-separation有向分离。简单说在一个有向无环图中如果两个变量之间没有直接路径那么它们在给定某些条件变量后应该是条件独立的。反过来讲如果模型中遗漏了一条应该存在的路径那么原本应该独立的两个变量之间就会出现显著的残余关联。基于这个思路piecewiseSEM 会做这样几件事根据你指定的路径图找出所有“应该有独立关系但模型里没有直接路径”的变量对。对每一对变量用“基元方程”检验它们之间是否真的独立。基元方程通常把其中一个变量作为响应变量把另一变量以及模型中已给出的相关变量作为预测变量通过回归系数的显著性来判断独立性。把所有基元方程的 p 值合并计算 Fishers C 统计量C -2 * Σ ln(p_i)其中 p_i 是第 i 个独立性检验的 p 值。Fishers C 服从自由度为 2k 的卡方分布k 是独立性检验的数量。如果 C 对应的 p 值较大通常 0.05说明模型没有显著遗漏关键路径如果 p 值很小则提示模型中可能有缺失路径或错误的有向关系。这一检验过程的本质是把“整个模型是否符合数据”的问题转化为“一系列局部独立性假设是否成立”的问题。2.2 分段估计如何合并成整体结论在传统 SEM 中你会得到一套整体拟合指数比如 CFI、RMSEA、SRMR然后据此判断模型好坏。在 piecewiseSEM 中拟合优度由 Fishers C 的 p 值来承担但它不会直接告诉你某条路径是否应该保留。整体模型的路径系数是对每个子模型分别估计后汇总得到的。每个子模型的估计方法就是普通的回归或混合效应模型。这样做的优点是透明每个系数是怎么来的、用了什么分布、有没有随机效应都可以单独检查。需要留意的是分段估计不等同于全局估计。在某些特定条件下例如所有子模型都是线性模型且误差独立、没有缺失数据分段估计和全局最大似然估计得到的结果会比较接近但在存在非正态、非独立或缺失数据时两者会有差异。piecewiseSEM 是一种对数据结构更宽容的“近似全局”方案而不是严格意义上和全局估计完全等价的方案。2.3 与传统 SEM 的等价与不等价这里要写清楚边界如果模型是一个纯粹的递归路径模型没有循环路径、没有潜变量、变量都是连续且正态、样本独立那么分段拟合和传统 SEM 的结果往往高度一致。此时你选择哪个方法更多是习惯问题。但一旦加入以下任意一种情况两种方案的分歧会变大计数变量或二元变量随机效应或嵌套结构空间自相关缺失值处理方式不同样本量较小在这些情形下传统 SEM 可能会因为分布假设或样本量限制而出现不收敛、拟合指数虚高或者参数被压缩的问题而 piecewiseSEM 通过局部估计保留了更多数据原来的特征。3. R 语言实现从数据准备到结果解读现在进入实操部分。假设你已经有了一张路径图比如环境变量 x 影响中间变量 z中间变量 z 影响响应变量 y环境变量 x 也可能直接影响 y这是一张非常经典的递归路径结构。下面我会用 piecewiseSEM 包来完成它的建模。3.1 安装与数据准备install.packages(piecewiseSEM) library(piecewiseSEM)如果你的 R 版本较新一般可以直接从 CRAN 安装。如果之前装过旧版本建议先升级到最新版因为早期版本的函数接口有一些变化。数据准备阶段建议先做几件事检查变量名称避免空格和特殊字符。明确哪些变量是连续型、哪些是计数型、哪些是分类变量。如果有缺失值先确认缺失机制不要默认用 listwise deletion。如果数据存在嵌套结构提前想好随机效应的分组变量。# 示例数据结构 head(dat)这段代码只是一个展示概念实际使用时要把dat换成你自己的数据框。3.2 建立每个内生变量的子模型在 piecewiseSEM 中你不需要一个统一的模型语法。你需要分别建立路径图中每个内生变量对应的模型对象。以上面的路径图为例# 子模型 1中间变量 z 受 x 影响 model_z - lm(z ~ x, data dat) # 子模型 2响应变量 y 受 x 和 z 影响 model_y - lm(y ~ x z, data dat)如果变量之间是更复杂的关系比如 z 是一个计数变量那么可以用广义线性模型model_z - glm(z ~ x, data dat, family poisson)如果数据有嵌套结构比如多个样地、多次年份可以改用混合效应模型library(nlme) model_z - lme(z ~ x, random ~1 | site, data dat)这里的site是你的分组变量。这意味着你在子模型阶段就可以把非独立性处理掉。3.3 用 psem() 组合模型并查看整体结果子模型建立完成后用psem()将它们组合成一个分段结构方程模型sem_model - psem(model_z, model_y) summary(sem_model)输出通常包括几个部分路径系数表每个子模型的估计值、标准误、显著性。d-sep 检验结果即独立性检验表包含每个缺失路径的 p 值以及 Fishers C 的整体 p 值。AICc 和 ΔAICc用于模型比较。R 方每个子模型的解释率。解读结果时我的建议顺序是先看 Fishers C 的 p 值。如果 p 0.05说明当前路径结构整体上没有被数据否定。再逐条看路径系数的方向、大小和显著性。这对应你的因果假设。然后看每条子模型的 R 方了解每个内生变量被解释了多少。最后再检查独立性检验表里有没有某个局部 p 值特别小这可能是遗漏路径的信号。# 只查看 d-sep 检验结果 summary(sem_model)$dTable3.4 标准化系数与模型绘图路径系数常常受到变量量纲影响。要比较不同路径的相对重要性可以使用标准化系数coefs(sem_model, standardize scale)standardize参数提供了几种不同的标准化方式常见的是scale即把连续变量标准化后再估计也有range等基于范围的方式。选择哪种标准化取决于你变量的实际含义以及是否需要跨模型比较。绘图方面piecewiseSEM 没有一个统一的内置绘图函数但你可以利用路径系数结果手动用DiagrammeR、igraph或ggplot2画路径图。我更建议的做法是先把coefs()的结果提取出来再根据标准化系数大小设计连线的粗细和颜色。不要为了“画得好看”而省略不显著的路径除非你有明确的模型简化理由。4. 实际操作中容易踩坑的细节工具本身不难真正难的是在细节处做出合理判断。下面这些坑里我几乎每个都见过有人踩进去。4.1 变量尺度、数据变换与缺失值分段模型虽然放宽了分布假设但并不意味着你可以完全不关心变量尺度。一个常见问题是同一个变量既作为连续预测变量又作为分组变量或者计数变量直接进入线性模型而没有指定分布。这会让估计结果尽管能跑出来但解释起来很危险。我的建议是明确每个内生变量的分布类型在子模型阶段就选对family。连续预测变量如果量纲差异太大先做标准化或中心化至少在解释路径系数时会更容易。缺失值要专门处理不要直接让lm()或glm()默认删除。尤其当你不同子模型使用的样本量不一致时整体模型的比较会变得很混乱。4.2 随机效应、嵌套结构与重复测量piecewiseSEM 对混合效应模型的支持是一个巨大优势但也带来新问题随机效应结构本身也需要论证。不是每个数据都应该加随机效应。随机效应应该对应真实的分组结构或重复测量设计而不是不加思考地加入所有可能的分类变量。在建模时我建议先对每个子模型单独跑一遍确认随机效应项是否收敛、随机效应方差是否合理。如果某个子模型因为随机效应太复杂而无法收敛可以考虑简化随机效应结构或者换一种优化器。把子模型调稳了再放进psem()。4.3 d-sep 检验失败到底是漏路径还是结构错了Fishers C 的 p 值很小通常意味着模型遗漏了某些重要关系。但“遗漏关系”有两种可能漏了一条直接路径。例如 y 应该受变量 w 影响但你忘了放 w。路径方向错误。你把因果方向放反了导致本应独立的条件关系变得不独立。处理方式不同。前者往往可以通过查看独立性检验中 p 值最小的变量对把对应路径补上后者则需要重新审视你的因果假设不能仅仅靠数据驱动加路径。一个实用技巧是当 d-sep 检验失败时先不要急着加路径先回到研究问题本身问自己“这条路径在理论上是否说得通”。如果理论不支持那说明当前模型结构可能有问题而不是盲目加线能解决的。4.4 模型比较AICc 与 ΔAICcpiecewiseSEM 提供了 AICc 用于模型比较。AICc 越小模型在“拟合-简洁性”权衡下越优。但 AICc 本身是一个相对指标不能用来判断一个模型是否绝对正确。比较模型的正确姿势是在一组候选模型都基于同一套数据、同一组变量的前提下用 AICc 选出相对更可能的模型。不要拿一个包含几十条路径的复杂模型和一个简单模型比较然后直接说复杂模型更好。要同时看 ΔAICc、路径显著性和理论合理性。5. 适用边界什么场景该用什么场景不该用任何建模方法都有自己的适用范围。piecewiseSEM 在生态学、环境科学领域非常流行但它并不是所有 SEM 问题的通解。5.1 piecewiseSEM 特别适合的场景数据包含计数变量、比例数据或强偏态数据且不适合进行正态变换。数据存在明显的嵌套结构、空间自相关或时间重复测量。样本量中等偏小不支持复杂测量模型。研究问题关注的是多条直接观测变量之间的因果路径而不是潜变量的测量结构。你更关心每条路径的估计透明度和可解释性而不是一个整体拟合指数的“黑箱”。5.2 不适合或需要谨慎的场景研究问题涉及多个潜变量必须用测量模型来消除测量误差。数据样本量很大且所有变量满足多元正态和独立观测。你的研究汇报渠道明确要求传统 SEM 的整体拟合指数例如 SCI 期刊审稿人可能不太熟悉 piecewiseSEM。变量之间存在复杂的非递归路径或双向路径。分段方法在定向循环结构上的处理会比较麻烦。你希望在同一个框架内做多组比较或测量不变性检验传统 SEM 在这些场景的工具链更成熟。5.3 选择判断表维度传统 SEMpiecewiseSEM数据分布通常要求多元正态或可变换每个子模型可自定义分布观测独立性默认独立可通过混效模型处理嵌套/自相关样本量要求通常需要较大样本中等样本即可逐步拟合潜变量测量模型支持功能完善主要通过观测变量路径较少用于潜变量结构模型拟合评价CFI、RMSEA、SRMR、卡方Fishers C、AICc结果可解释性整体框架统一每个子模型透明但需要自己汇总判断表格只是为了让你快速把握差异。真实选择时还要结合你的研究问题、数据结构和汇报对象来决定。6. 一条完整、可复用的建模与排查路径如果你第一次尝试用 piecewiseSEM我建议不要一上来就追求复杂模型。先跑通一张最简单的三变量路径图再逐步增加路径和随机效应。下面是一套我常用的流程你可以直接参考。6.1 建模七步法画出路径图用方框表示观察变量用箭头表示假设的因果方向。标注每条路径的方向和理论依据。明确变量分布判断每个内生变量是连续、计数、二元还是有序分类并选择对应的模型类型。分别拟合子模型用lm()、glm()、lme()或lmer()逐个拟合。确认每个子模型残差、收敛和随机效应都正常。组合成 psem把所有子模型放入psem()。查看整体拟合先看 Fishers C 的 p 值。如果不显著继续下一步如果显著回到路径图重新审查遗漏路径或方向。检查路径系数和解释率逐个查看显著性、系数方向、R 方。对比不同路径的标准化系数大小判断相对重要性。进行模型比较和敏感性分析可以构建一组候选模型比较 AICc可以尝试去掉某条路径看结果是否稳健如果使用了随机效应可以调整随机结构验证结论是否变化。这七步不是线性的。我通常会在第 3 步和第 7 步之间来回迭代多次直到模型结构和理论假设都比较匹配。6.2 问题排查顺序当结果出现异常时不要立刻去改包参数按顺序排查看现象是报错、不收敛、Fishers C 显著、还是某些路径系数符号不符合理论看输入数据变量类型是否正确缺失值如何处理有没有单位或编码问题。看子模型单独运行每个子模型确认是否都正常收敛随机效应是否合理。看模型结构路径图有没有循环有没有遗漏关键变量方向是否画反看分布假设内生变量分布是否选对过度离散的计数变量是否用了负二项。看拟合统计Fishers C 的 p 值、AICc、ΔAICc 是否提示某个替代模型明显更好。看工具边界你的数据和研究问题是否真的适合用分段 SEM如果传统 SEM 更合适不要为了用包而用包。6.3 最小案例建议新手最需要的是一个“一定能跑通”的最小示例。我建议用 R 内置的iris数据集或其他简单数据先构造三到五个变量的小型路径图跑通psem()、summary()、coefs()的基本流程再逐步过渡到自己的真实数据。# 最小示例结构 library(piecewiseSEM) set.seed(123) n - 100 x - rnorm(n) z - 0.5 * x rnorm(n) y - 0.3 * x 0.6 * z rnorm(n) dat_sem - data.frame(x, z, y) m1 - lm(z ~ x, data dat_sem) m2 - lm(y ~ x z, data dat_sem) sem_test - psem(m1, m2) summary(sem_test)跑完这个最小示例你会对输出里的每个部分建立直觉再切换到自己数据时就不会手忙脚乱了。piecewiseSEM 真正值得长期关注的不是它比传统 SEM 更先进而是它提出了一种更接近数据实况的建模方式允许每个变量保留自己的分布特征允许误差结构更复杂允许模型构建过程更透明。它让结构方程模型从“一种必须满足一堆假设的全局估计”变成了一种“基于因果假设的、可局部验证的建模策略”。如果你正在处理非正态、非独立或者中等样本的数据我建议你认真试试这个方案。但请记住它不能替代理论思考也不能自动判断因果方向。模型的起点仍然是你的研究假设工具只是让检验变得更贴合真实数据而已。
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻