关于iris数据集prcomp分析中第一行PC1得分计算的技术问询
拆解iris数据集PCA第一行PC1得分的计算过程
嘿,我来一步步帮你搞清楚怎么得到第一行的PC1得分-2.257141,核心是理解prcomp的参数设置和主成分得分的计算逻辑。
先明确前提:你的prcomp参数设置
看你给出的载荷矩阵,每个主成分的载荷平方和都是1(比如PC1的四个载荷平方加起来≈0.521²+(-0.269)²+0.580²+0.565²=1),这说明你调用prcomp的时候启用了标准化(也就是参数scale.=TRUE),再加上函数默认的中心化(center=TRUE),所以数据会先经过「中心化→标准化」的预处理。
主成分得分的核心公式很简单:
得分 = 标准化后的原始数据 × 对应主成分的载荷向量
分步计算第一行PC1得分
步骤1:先算四个变量的均值和标准差
从iris数据集里,我们可以算出四个特征的均值(用来做中心化)和标准差(用来做标准化):
- Sepal.Length: 均值=5.8433,标准差=0.8281
- Sepal.Width: 均值=3.0573,标准差=0.4359
- Petal.Length: 均值=3.7580,标准差=1.7653
- Petal.Width: 均值=1.1993,标准差=0.7622
步骤2:对第一行原始数据做标准化处理
第一行的原始数据是:5.1, 3.5, 1.4, 0.2
标准化的公式是 (原始值 - 均值) / 标准差,代入计算后得到:
- Sepal.Length: (5.1 - 5.8433)/0.8281 ≈ -0.8977
- Sepal.Width: (3.5 - 3.0573)/0.4359 ≈ 1.0156
- Petal.Length: (1.4 - 3.7580)/1.7653 ≈ -1.3358
- Petal.Width: (0.2 - 1.1993)/0.7622 ≈ -1.3110
步骤3:乘以PC1载荷并求和
你给出的PC1载荷是:
Sepal.Length → 0.5210659,Sepal.Width → -0.2693474,Petal.Length → 0.5804131,Petal.Width → 0.5648565
把标准化后的数据和对应载荷相乘,再把结果加起来:
(-0.8977 × 0.5210659) + (1.0156 × -0.2693474) + (-1.3358 × 0.5804131) + (-1.3110 × 0.5648565)
拆开来算每一项:
- 第一项:≈ -0.4678
- 第二项:≈ -0.2735
- 第三项:≈ -0.7753
- 第四项:≈ -0.7405
把这些数加起来:-0.4678 - 0.2735 - 0.7753 - 0.7405 ≈ -2.2571,和你得到的第一行PC1得分完全对上了!
额外补充
如果当时你没有启用scale.=TRUE,得分的计算逻辑就变成「中心化后的数据 × 载荷」,但此时载荷的平方和不会等于1,你可以自己试试这个差异。
内容的提问来源于stack exchange,提问作者Ananth Subramanian




