You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中绘制带指定系数的中介图?求推荐适配R包

绘制带系数标注的中介图解决方案

以下几个R包可以轻松实现你要的中介图,并且支持标注这类载荷/系数值:

1. semPlot + lavaan

这是结构方程模型绘图的常用组合,能精准控制节点旁的系数显示:

# 安装并加载包
install.packages(c("lavaan", "semPlot"))
library(lavaan)
library(semPlot)

# 模拟示例数据
set.seed(123)
stress <- rnorm(100)
self_esteem <- 0.8*stress + rnorm(100)
wellbeing <- 0.62*self_esteem + rnorm(100)
df <- data.frame(stress, self_esteem, wellbeing)

# 拟合中介模型
model <- '
  self_esteem ~ 0.8*stress
  wellbeing ~ 0.62*self_esteem
  stress ~~ 1.00*stress  # 标注stress的方差/载荷
'
fit <- sem(model, data = df)

# 绘制中介图,设置系数显示
semPaths(fit, 
         whatLabels = "est",  # 显示估计值
         edge.label.cex = 1,
         node.label.cex = 1.2,
         style = "lisrel",  # 匹配常规中介图风格
         residuals = FALSE,
         # 手动调整节点横向排列
         layout = matrix(c(1, 2, 3), nrow = 1))

这段代码会在对应节点旁显示你需要的(1.00)、(0.80)、(0.62)这类数值,其中stress ~~ 1.00*stress用于定义stress的方差系数,对应你要的标注。

2. ggdag

如果你偏好ggplot2风格的绘图,ggdag可以灵活自定义标注位置:

install.packages("ggdag")
library(ggdag)

# 定义中介结构
dag <- dagify(
  wellbeing ~ self_esteem,
  self_esteem ~ stress,
  labels = c(stress = "stress", self_esteem = "self-esteem", wellbeing = "wellbeing"),
  coords = list(x = c(stress = 1, self_esteem = 2, wellbeing = 3),
                y = c(stress = 1, self_esteem = 1, wellbeing = 1))
)

# 绘图并添加系数标注
ggdag(dag) +
  geom_dag_text(color = "black") +
  geom_dag_edges() +
  # 手动添加对应位置的系数文本
  annotate("text", x = 1, y = 0.8, label = "(1.00)") +
  annotate("text", x = 2, y = 1.2, label = "(0.80)") +
  annotate("text", x = 3, y = 0.8, label = "(0.62)") +
  theme_dag()

这种方式可以完全自定义数值的显示位置,精准匹配你想要的效果。

3. 改进DiagrammeR的用法

如果坚持用DiagrammeR+Graphviz,直接在节点标签中嵌入换行和数值即可:

install.packages("DiagrammeR")
library(DiagrammeR)

grViz("
digraph mediation {
  graph [layout = dot, rankdir = LR]
  
  node [shape = rectangle]
  stress [label = 'stress\n(1.00)']
  self_esteem [label = '(0.80)\nself-esteem']
  wellbeing [label = 'wellbeing\n(0.62)']
  
  stress -> self_esteem
  self_esteem -> wellbeing
}
")

通过节点标签的换行语法,直接把数值和变量名组合在一起,就能实现你要的显示效果。

内容的提问来源于stack exchange,提问作者Baz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 03:22:43