示例:主分量分析 2
使用函数
Nipals 和
Nipals2 分析复数数据,例如,分析含有五种不同药剂有效成分的药片的近红外 (NIR) 光谱 (数据由 Bruker Optics, Inc. 提供)。可以创建根据光谱区分每种药剂的模型,即使实际的药剂是未知的。此模型可用于在生产更多药片时进行质量控制。
1. 定义下列数据集:
第一列是波数 (1/波长),单位为 cm-1。每种药剂有五个连续光谱,构成了其余的 25 列。
3. 使用函数
max 和
match 查找最大值及包含最大值的光谱。由于数据值非常小,因此,将
TOL 设置为更小的值。
最大值位于数据矩阵中第 210 行和第 17 列。
4. 绘制每种药剂的两个光谱,共 10 个数据集。数据集对位于 Data 矩阵的 [1,2]、[6,7]、[11,12]、[16,17] 和 [21,22] 列。
◦ 要获得水平轴的合理比例,请将波数除以 1000。类似地,由于光谱值小,因此将其乘以 1000。
◦ 使用水平标记显示最大光谱值。
◦ 按照约定,以降序绘制波数图像。因此,Data<0> 无法以正确的顺序显示波数。
◦ 光谱中无任何部分可用于轻松区分各种药剂:它们具有相同的基本形式和相近的吸光率值。
◦ 大部分数据是多余的。每个光谱中有 236 个点,表示 236 个被测量 (对特定波长光的吸光率),但是这些点的变化之间是明显相关的。
5. 将矩阵 Data 分割成两个数据集:波数 (第 0 列) 和每个药片的光谱 (子矩阵 S)。要符合常规约定,可转置每个药片的光谱数据集,以使每一列对应一个自变量。
6. 将函数
Nipals 应用于数据之前,应先定义主分量的数量以及最大迭代次数。
Nipals 函数将数据集中,同时减去每一行的平均光谱值。
7. 选取要重新构建的光谱。
8. 从 Nipals 函数的输出中提取分数和输入。
9. 使用均值函数计算平均光谱值。
10. 通过将输入矢量矩阵与分数矩阵相乘,然后加上平均光谱值,来估算原始光谱值。
11. 绘制原始光谱和重新构建的光谱的图象。缩放水平和竖直轴,以获得合理的值。
对于主分量分析,仅使用两个主分量就可以很好地表示所有光谱。
12. 将分数重新排列为两个矩阵。矩阵的每列表示五种药片药剂中其中一种的分数。
13. 根据第二个因子的分数绘制第一个因子的分数。每种药剂均以不同的颜色显示。
数据的某些分组明显,但仍难以区分各种药剂。向绘图中添加第三个分数可能会有帮助。
14. 使用 Nipals2 函数将四个主分量添加到由两个主分量创建的模型中。
NIPALS2 的输出矩阵的形式与 NIPALS 的输出矩阵的形式相同,但是带有与附加主分量对应的附加列和行。此时,分数和输入的数量增加至 6 个。
15. 从矩阵 NIPALS2 中提取输入和分数,以创建所选光谱的新模型。
16. 绘制所选光谱的两个模型的图象并进行比较。缩放水平和竖直轴,以获得合理的值。
17. 从 NIPALS2 提取累积方差。
18. 根据主分量的数量绘制累积方差图像。
尽管前两个主分量 (PC) 表示了方差的 99%,但第三个 PC 才是按药剂对数据进行分组的关键。主分量分析将数据压缩为最主要的因子,而非最相关的因子。