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

如何在tidySEM的plot_profiles潜剖面分析图中添加显著性差异星号?

在潜剖面分析(LPA)剖面图添加显著性星号

针对你用tidyLPA包绘制剖面图的需求,要在组间存在显著差异的指标上方添加星号,可以通过以下步骤实现:

步骤1:保存LPA模型对象

先不要直接链式调用画图,先把拟合好的模型保存下来,方便后续提取数据和统计结果:

# 拟合LPA模型并保存
lpa_model <- y1[1:158, ] %>%
  select(BIEPSA, IAB, IDS, AFN_EMO, EVT_EMO, EEA_EMO, REP_RAC, RLG_RAC, FSP_RAC, BAS_RAC) %>%
  single_imputation() %>%
  estimate_profiles(2)

步骤2:计算组间差异的显著性

因为你拟合的是2个剖面,直接用t检验判断每个变量的组间差异;如果是多剖面模型,可以改用ANOVA+事后检验(如TukeyHSD):

library(dplyr)
library(purrr)

# 提取带剖面分组的完整数据
profile_data <- lpa_model$datasets$complete %>%
  mutate(profile = as.factor(lpa_model$classes))

# 批量对每个变量做t检验,提取p值并生成星号标记
sig_results <- map_df(names(profile_data)[1:10], function(var) {
  t_test_result <- t.test(reformulate("profile", response = var), data = profile_data)
  tibble(variable = var, p_value = t_test_result$p.value)
}) %>%
  mutate(
    stars = case_when(
      p_value < 0.001 ~ "***",
      p_value < 0.01 ~ "**",
      p_value < 0.05 ~ "*",
      TRUE ~ "" # 不显著则为空
    )
  )

步骤3:绘制带星号的剖面图

先生成基础剖面图,再提取绘图数据确定星号位置,最后用geom_text添加星号:

# 生成基础剖面图
base_plot <- plot_profiles(lpa_model, add_line = TRUE, sd = FALSE, rawdata = FALSE, bw = FALSE, ci = NULL)

# 提取绘图数据,计算每个变量的星号放置位置(最高数值点上方偏移)
plot_coords <- ggplot_build(base_plot)$data[[1]] %>%
  group_by(x) %>%
  mutate(star_y = max(y) + 0.2) # 0.2是y轴偏移量,可根据图形调整
  %>%
  distinct(x, star_y) %>%
  left_join(sig_results, by = c("x" = "variable"))

# 添加星号到基础图
final_plot <- base_plot +
  geom_text(
    data = plot_coords,
    aes(x = x, y = star_y, label = stars),
    size = 5,
    fontface = "bold"
  )

# 查看最终图形
print(final_plot)

注意事项

  • 如果是3个及以上剖面的模型,需要将t检验替换为ANOVA,再用TukeyHSD()做事后多重比较,然后标记出有显著差异的组对(此时星号需要对应到具体的组点上方,逻辑会稍复杂,需根据事后检验结果调整)
  • 星号的y轴偏移量0.2可以根据你的图形数值范围自行调整,确保星号不会和线条/点重叠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:22:53