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

含分类变量的PCoA物种得分提取方法咨询

解决方案:PCoA混合变量的得分计算

你的思路完全正确:连续变量通过与PCoA位点得分的皮尔逊相关性计算得分,分类变量通过计算每个类别在PCoA轴上的**质心(均值)**来反映其与轴的关联,这是处理混合类型变量PCoA得分的标准方案。

修正原代码的笔误

首先修正你代码里的变量名拼写混用问题:

library(gawdis)
library(vegan)
library(tidyverse) # 用于更简洁的数据整理

# 加载并预处理数据
data <- na.omit(tussock$trait[,c(1:7, 10, 12, 14:15)])

# 构建加权Gower距离矩阵
dm <- gawdis(data, groups.weight=T, groups = c(1, 2, 3, 4, 5, 6, 7, 8, 8, 8, 8))

# 执行PCoA
pcoa1 <- wcmdscale(dm, eig=TRUE, add = TRUE)  

# 计算轴解释度
ev <- eigenvals(pcoa1)
per <- ev/sum(ev)

# 提取位点得分
points1 <- as.data.frame(scores(pcoa1, display = "site", scaling=3))

分离连续与分类变量

先识别并拆分不同类型的变量:

# 分离连续变量(numeric)和分类变量(factor)
cont_vars <- data %>% select(where(is.numeric))
cat_vars <- data %>% select(where(is.factor))

计算连续变量得分

直接用相关性反映连续变量与PCoA轴的关联:

cont_scores <- as.data.frame(cor(cont_vars, points1)) %>%
  rownames_to_column("Variable") %>%
  mutate(Type = "Continuous")

计算分类变量质心得分

对每个分类变量,计算其类别在PCoA轴上的均值(质心):

# 合并位点得分与分类变量,方便计算质心
cat_points <- bind_cols(points1, cat_vars)

# 批量计算每个分类变量的类别质心
cat_scores <- map_dfr(names(cat_vars), function(var) {
  cat_points %>%
    group_by(!!sym(var)) %>%
    summarise(across(starts_with("PC"), mean, na.rm=TRUE)) %>%
    rename(Variable = !!sym(var)) %>%
    mutate(Type = "Categorical")
})

合并两类变量得分

整理成统一格式的最终结果:

all_vars_scores <- bind_rows(cont_scores, cat_scores) %>%
  select(Variable, Type, everything())

结果说明

  • 连续变量得分:相关性绝对值越大,说明该变量对对应PCoA轴的解释力越强,正负号反映变量与轴的方向一致性。
  • 分类变量质心:每个类别在PCoA轴上的代表性位置,可直接用于PCoA图的类别标注,直观展示分类变量与轴的关联。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 04:03:23