如何在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
相关产品推荐
相关产品推荐

