【问题标题】:Cross validation of PCA+lmPCA+lm的交叉验证
【发布时间】:2015-02-04 20:07:11
【问题描述】:

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

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

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

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

【问题讨论】:

  • 嗨,安德里亚,欢迎交叉验证(特别欢迎这里的另一位化学家!)。但是,您的问题主要是关于编程,而不是统计数据(您已经有了 DoE,并且知道交叉验证需要包括 PCA)。因此,我将投票将其迁移到讨论编程问题的 stackoverflow。当您询问 R 时,我还将添加一个 R 标签。
  • 谢谢@cbeleites,但我在哪里可以找到“stackoverflow”?我是菜鸟!
  • @ndr:stackoverflow 现在应该已经找到你了……

标签: r pca cross-validation


【解决方案1】:

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

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

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

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

根据评论编辑:

如果 CV 的目的是计算某种误差,那么您可以在计算预测分数 y 的误差(我是这么理解你的)和计算 Y:PCA 还可以让您倒退并根据分数预测原始变量。这很容易,因为载荷 ($rotation) 是正交的,所以逆向只是转置。

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

【讨论】:

  • 好吧,老实说,我认为我所做的与 PCR 完全不同。在 PCR 中,我使用(一些)分数作为 X 来拟合和预测 y,而我所做的是使用第一台 PC 上的 PCA 分数作为 y 我的实验设计观点为 X
  • 抱歉,我忽略了这一点。那么你所做的是介于(反向)PCR 和 PLS 中途之间的某个地方?请问你为什么这样做(纯粹的好奇)?无论如何,第一种方法允许您对 PCA 分数做任何您喜欢的事情。
  • 我执行了 PCA,因为我原来的 Yn 个实验和 m 个变量的矩阵,所以我有只有两种可能性:
      - 在每个 y_i 上拟合和表征 m 不同的模型,或者 - 尝试减少我的 Y 数据的维度,由于我的 m 变量高度相关,我使用 PC1 上的 Y 分数作为我的新 y,例如 (y_n)。
    然后我只拟合了一个模型:y_n~XX,正如我所说的编码实验条件的矩阵)。 现在需要对我的模型的预测误差进行交叉验证的估计。
  • @Ndr: 多个 y ~ X 模型可以直接通过 Y 的一个最小二乘拟合来计算 ~ X。第三种可能性是 PLS,它通过对 XY 进行类似 PCA 的分解来规范 Y ~ X 拟合b> 同时。但是为什么你的 Y 高度相关? Doehler DoE 不会生成低相关性实验矩阵吗?
  • 实验矩阵 X 具有正交列,因此不相关。相关性在我的响应矩阵 Y 的列之间。我的 Y 的每一列都是针对不同分析物的仪器响应,并将其与我的 X 相匹配我创建了实验设置以最大化响应。我认为 MLR 仅适用于 y~X 而不是 Y~X。我从来没有听说过正交 DoE 上的 PLS,但我认为如果结果不那么容易解释,它也可以工作。
【解决方案2】:

还有 R 库pls(偏最小二乘法),其中有 PCR 工具(Principal Component Regression

【讨论】:

    猜你喜欢
    • 2017-04-17
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 2018-08-02
    • 2016-10-31
    • 2012-12-31
    • 2020-05-30
    • 2018-04-26
    相关资源
    最近更新 更多