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

如何对R中0/1值布尔二进制数据绘制PCA图及选择可视化方案?

0/1布尔型性状数据的PCA绘制方法

PCA本质是面向连续变量的降维方法,对二进制数据使用时建议做标准化处理降低变量尺度差异的影响,实现代码如下:

# 读入数据,要求行是样本,列是0/1性状,可自行增加分组列
mydata <- read.csv("your_binary_data.csv", row.names = 1)
# 转换为数值矩阵,若最后一列是分组变量则保留,没有分组可删除[,-1]
binary_mat <- as.matrix(mydata[, -1])
group <- mydata$group # 无分组可删除该行

# 运行PCA
pca <- prcomp(binary_mat, scale. = TRUE)
# 提取前两个主成分的解释度
pca_var <- summary(pca)$importance[2,1:2]

# 用ggplot2绘制散点图
library(ggplot2)
plot_df <- data.frame(
  PC1 = pca$x[,1],
  PC2 = pca$x[,2],
  group = group # 无分组删除该行
)

ggplot(plot_df, aes(x=PC1, y=PC2, color=group)) + # 无分组删除color参数
  geom_point(size=2) +
  labs(x=paste0("PC1 (", round(pca_var[1]*100, 1), "%)"),
       y=paste0("PC2 (", round(pca_var[2]*100, 1), "%)")) +
  theme_bw()

注意:PCA默认使用欧氏距离计算样本差异,对0/1二进制数据的匹配度不高,分组特征可能无法完全体现,可优先使用以下更适配的可视化方法。


更适配二进制性状数据的可视化方法
  • 多重对应分析(MCA)

    专门针对分类变量(含二元分类)设计的降维方法,使用卡方距离计算样本差异,比PCA更适配0/1性状数据,实现代码如下:
    library(FactoMineR)
    library(factoextra)
    # 将0/1数值转为因子类型
    binary_df <- as.data.frame(lapply(binary_mat, as.factor))
    # 运行MCA
    mca <- MCA(binary_df, graph = FALSE)
    # 绘制散点图
    fviz_mca_ind(mca,
                 geom.ind = "point",
                 col.ind = group, # 无分组删除该参数
                 legend.title = "分组",
                 repel = TRUE) +
      theme_bw()
    
  • 聚类热图

    无需降维,直接可视化原始0/1矩阵的性状分布规律,同时对样本和性状做聚类,可直观展示分组和性状的关联:
    library(pheatmap)
    pheatmap(binary_mat,
             # 无分组可删除annotation_row参数
             annotation_row = data.frame(group=group, row.names = rownames(binary_mat)),
             color = c("#E64B35", "#4DBBD5"), # 0、1对应的颜色可自定义
             cluster_rows = TRUE,
             cluster_cols = TRUE,
             show_rownames = TRUE,
             show_colnames = TRUE)
    
  • UMAP/t-SNE非线性降维

    样本量较大时优先选择,使用适配二进制数据的Jaccard距离或汉明距离计算样本差异,局部分组效果远优于PCA:
    library(vegan)
    library(umap)
    library(ggplot2)
    # 计算Jaccard距离矩阵
    dist_jaccard <- vegdist(binary_mat, method = "jaccard")
    # 运行UMAP降维
    umap_res <- umap(as.matrix(dist_jaccard))
    # 构造绘图数据
    umap_df <- data.frame(
      UMAP1 = umap_res$layout[,1],
      UMAP2 = umap_res$layout[,2],
      group = group # 无分组删除该行
    )
    # 绘图
    ggplot(umap_df, aes(x=UMAP1, y=UMAP2, color=group)) + # 无分组删除color参数
      geom_point(size=2) +
      theme_bw()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:45:04