1

我是一名化学家,大约一年前,我决定进一步了解化学计量学。

我正在处理这个我不知道如何解决的问题:

我进行了一个实验设计(具有 3 个因子的Doehlert类型),将几种分析物浓度记录为Y。然后我在Y上执行了 PCA ,我使用第一台 PC 上的分数(总方差的 87%)作为线性回归模型的新y,我的实验编码设置为X。

现在我需要在对新的“训练集”执行 PCA之前执行一个留一法交叉验证删除每个对象,然后像以前一样在分数上创建回归模型,预测观察的分数值“测试集”并计算预测的误差,比较预测的分数和测试集中的对象在前一次 PCA 的空间中投影得到的分数。如此重复n次(其中 n 是我的实验设计的点数)。我想知道我怎么能用 R 来做到这一点。

4

2 回答 2

2

进行计算,例如 byprcomp然后lm。为此,您需要将返回的 PCA 模型prcomp应用于新数据。这需要两个(或三个)步骤:

  1. 将新数据与计算的相同中心居中prcomp
  2. 使用与计算的相同缩放向量缩放新数据prcomp
  3. 应用计算的旋转prcomp

前两个步骤是通过scale使用prcomp 对象的$center和元素来完成的。$scale然后你矩阵乘以你的数据 $rotation [, components.to.use]

prcomp您可以通过计算您输入的数据的分数并将结果与$x​​返回的 PCA 模型元素进行比较,轻松检查您是否重建了 PCA 分数计算prcomp

根据评论编辑:

如果 CV 的目的是计算某种误差,那么您可以在计算预测分数y的误差(我是这么理解的)和计算Y的误差之间进行选择:PCA 还可以让您倒退并预测原始分数与分数不同。这很容易,因为载荷 ( $rotation) 是正交的,所以逆只是转置。

因此,原始Y空间中的预测是scores %*% t (pca$rotation),计算速度更快tcrossprod (scores, pca$rotation)

于 2013-02-20T20:38:13.083 回答
0

还有 R 库pls(部分最小二乘法),其中包含 PCR 工具(主成分回归

于 2015-02-04T11:05:52.800 回答