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

R中PCA置信椭圆如何计算?如何从原始数据推导椭圆参数?

R绘制PCA散点图置信椭圆的参数推导逻辑

factoextra包的fviz_pca_ind()添加的置信椭圆,默认基于分组内样本的PCA投影坐标(即b$x中对应分组的行)计算,采用正态分布假设下的95%置信区间规则,所有参数都可以从现有数据手动推导,不需要依赖包的内部封装逻辑。

注意:你提到的b$center是原始特征维度的全局中心化均值,不是PCA投影空间的分组中心,椭圆的中心需要从分组后的PC坐标单独计算。

手动推导的完整步骤

  • 第一步:按分组拆分PCA前两轴的投影坐标
    # 提取PC1、PC2坐标,按物种拆分
    pca_coord <- as.data.frame(b$x[, 1:2])
    group_coord_list <- split(pca_coord, iris$Species)
    # 示例:提取setosa组的坐标
    setosa_coord <- group_coord_list[["setosa"]]
    
  • 第二步:计算分组椭圆的中心坐标,即当前组PC1、PC2的均值
    ellipse_center <- colMeans(setosa_coord)
    
  • 第三步:计算分组PC坐标的协方差矩阵,用于确定椭圆的拉伸方向和轴长
    group_cov <- cov(setosa_coord)
    
  • 第四步:计算置信度对应的缩放因子,95%置信度对应自由度为2的卡方分布95%分位数的平方根,数值约为2.447
    conf_level <- 0.95
    scale_factor <- sqrt(qchisq(conf_level, df = 2))
    
  • 第五步:对协方差矩阵做特征值分解,得到椭圆的两个半轴长度和旋转角度
    eig <- eigen(group_cov)
    # 椭圆两个半轴的长度
    ellipse_axis_len <- sqrt(eig$values) * scale_factor
    # 椭圆相对于x轴的逆时针旋转弧度,转角度可乘180/pi
    ellipse_rotation <- atan2(eig$vectors[2, 1], eig$vectors[1, 1])
    

结果验证

你可以直接用ggplot2的stat_ellipse绘制椭圆,和fviz_pca_ind生成的椭圆完全一致,二者底层计算逻辑相同:

library(ggplot2)
ggplot(pca_coord, aes(x = PC1, y = PC2, color = iris$Species)) +
  geom_point() +
  stat_ellipse(level = 0.95, type = "norm") +
  theme_bw()

内容的提问来源于stack exchange,提问作者Ginko-Mitten

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:15:05