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

如何对实验组和对照组合并数据绘制PCA结果验证组间分离

问题

我有一个包含90个观测值的数据集,其中45个是实验组样本,45个是对照组样本,每个观测值包含10个距离变量(单位:m)。我想用PCA验证实验组和对照组的观测值是否能分离,这个方法在同类数据中已经用过。

我已经完成了PCA分析,能按组别用颜色和椭圆绘制样本点,但作为R新手,我没法实现按实验组/对照组拆分并绘制变量,搜了很多资料还是搞不定,写代码总是出错。

想请教:我的思路有没有问题?有没有简便方法?需要调整数据格式吗?

当前数据格式:组名(实验组/对照组)和变量为列,观测值为行,数据示例如下:

Group variable 1 variable 2 variable 3  variable 4 variable 5 variable 6 variable 7 variable 8
1        Ctrl   227.1758   76.33834  479.79328  900.431106   74.92103   78.69078 817.950938  853.15631
2        Ctrl   122.2748   82.85017  441.36049   94.211760   48.14546   42.43298 391.669754  397.64129
3        Ctrl   212.0073 1087.69218  310.09934  801.236328  762.45060  101.45367 148.865600  452.02212
4        Ctrl   165.2110  180.89114 1125.10707  287.599761   38.21226  110.05009 377.681321  178.84576
5        Ctrl   125.6233 1356.35936  752.14057    1.540822   17.06021  239.38640   4.906561  211.59177
6        Ctrl   240.0000  108.75317  126.99220  683.712745  139.54299  663.22566 274.265917 1225.14002
7        Ctrl   219.2393   17.81320  962.80249  744.238958  200.14079  455.19716 382.870502  937.11596
8        Ctrl   240.0000  751.95769  131.03213 1024.863454 1130.30304  136.19081 357.986240  863.35511
9        Ctrl   203.0863   80.83451  139.10481  770.567722  770.11240  212.89216  84.812646  131.88929
10 Experiment   192.0000  643.99000  729.90000  292.170000  129.04000  417.28000 366.020000  699.28000
11 Experiment   228.3302   62.68912  748.05168   12.536495   13.46899   63.25804  11.021662   62.62971
12 Experiment   226.3750  164.09029  131.15948  657.808968  387.28992  171.88133 656.338016  838.65025
13 Experiment   165.1418   75.74496 1400.75860 1729.237137  585.63204   65.72580  48.848643  688.00960
14 Experiment   222.7844  360.05409   51.39071 1019.845739 1018.10060  341.20432  31.046823  572.00411
15 Experiment   154.5468  533.66462  217.38821   74.902684  214.52490   76.90764  72.429564  236.32533
16 Experiment   130.0000 1173.69122  203.44864  684.127360  690.38973   51.80260  12.048432  383.40479
17 Experiment   213.1949   28.29785  843.76458  319.815834   24.22977  167.51248 302.743708  618.30222
18 Experiment   213.2566  530.85413  364.92104  425.524837   32.45679   28.45651  66.567557  427.69808
19 Experiment   145.9915  325.44247   65.40580  533.997851  100.40048  265.10440 553.048633  370.76282
   variable 9 variable 10
1   153.71433  632.975613
2    41.19583   48.973480
3   379.10343   20.407055
4   291.24420  716.283657
5  1621.15039 1169.221042
6   267.87993  302.452429
7   876.50519  807.668093
8   686.00076  146.134961
9  1392.94408  920.897862
10  800.95000  849.020000
11 1198.05713  932.001818
12 1100.65313  954.594713
13 1241.07884   67.022017
14  731.06865  178.861739
15  864.90849  112.641722
16  525.20077    1.332423
17  177.53370  672.354680
18  541.06775 1697.203881
19   68.16860  407.169531
解决方案

1. 思路没问题

你的核心需求是验证两组样本的分离性,先做整体PCA观察样本分布,再拆分分析变量对分组的贡献,这个思路完全符合PCA在分组验证中的常规用法,没有问题。

2. 数据格式无需调整

当前的宽格式(组列为分类变量,其余为数值变量)完全适配PCA分析,不需要转置、重构等操作。

3. 简便实现方法

以下方案基于你参考的教程常用的FactoMineR和factoextra包,适合R新手快速实现:

方案1:分别对两组做PCA并绘制变量载荷图

拆分数据集后分别跑PCA,对比两组的变量分布特征:

# 加载依赖包
library(FactoMineR)
library(factoextra)

# 替换为你的数据集名称
your_data <- read.csv("your_data.csv")

# 拆分数据集,剔除Group列
ctrl_data <- subset(your_data, Group == "Ctrl", select = -Group)
exp_data <- subset(your_data, Group == "Experiment", select = -Group)

# 分别执行PCA(关闭默认绘图)
pca_ctrl <- PCA(ctrl_data, scale.unit = TRUE, graph = FALSE)
pca_exp <- PCA(exp_data, scale.unit = TRUE, graph = FALSE)

# 绘制对照组变量载荷图
fviz_pca_var(pca_ctrl, col.var = "black", title = "Ctrl组变量PCA载荷")

# 绘制实验组变量载荷图
fviz_pca_var(pca_exp, col.var = "red", title = "Experiment组变量PCA载荷")

方案2:在整体PCA变量图中标注变量与分组的相关性

如果不想拆分跑PCA,可以通过变量与分组的相关性,直观展示哪些变量对分组区分贡献更大:

library(FactoMineR)
library(factoextra)

# 整体PCA分析
pca_total <- PCA(your_data[, -1], scale.unit = TRUE, graph = FALSE)

# 将分组转为数值变量(Ctrl=0,Experiment=1)
group_num <- as.numeric(factor(your_data$Group)) - 1

# 计算每个变量与分组的相关性
var_corr <- cor(your_data[, -1], group_num)

# 绘制带相关性颜色的变量载荷图
fviz_pca_var(pca_total, col.var = var_corr, 
             gradient.cols = c("blue", "white", "red"),
             title = "变量与分组相关性的PCA载荷图")

方案3:绘制两组样本的主成分得分箱线图

直接对比两组在主成分维度上的分布差异,验证分离效果:

# 获取整体PCA的样本得分
pca_scores <- as.data.frame(pca_total$ind$coord)
pca_scores$Group <- your_data$Group

# 绘制第一主成分得分的组间箱线图
boxplot(PC1 ~ Group, data = pca_scores, 
        main = "两组样本PC1得分分布",
        xlab = "分组", ylab = "PC1得分")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 14:35:54