2013-02-20 144 views
0

我是化學家,大約一年前我決定了解更多關於化學計量學的知識。交叉驗證PCA + lm

我這個問題,我不知道如何解決工作:

我執行的實驗設計(多赫勒類型與3個因素)記錄多個分析物濃度爲ÿ。 然後我上執行PCAÿ和我使用的第一PC(總方差的87%),新ý上得分線性迴歸模型與我的實驗編碼設置爲X

現在我需要進行一次性交叉驗證,刪除每個對象之前在新的「訓練集」上執行PCA,然後根據我之前創建的分數迴歸模型,預測分數在「測試集」中的觀察值,並且計算預測誤差,比較預測分數和通過在先前PCA的空間中測試集中對象的投影而獲得的分數。所以重複n次(n是我實驗設計的點數)。 我想知道如何用R來做。

+0

嗨安德烈,歡迎交叉驗證(並特別歡迎多一個同胞化學家在這裏!)。然而,你的問題主要是關於編程,而不是統計(你已經有了DoE並且知道交叉驗證需要包括PCA)。因此,我將投票將其遷移到stackoverflow,討論編程問題。當您詢問R時,我還會添加一個R標籤。 – cbeleites 2013-02-20 20:23:02

+0

謝謝@cbeleites但我在哪裏可以找到「stackoverflow」?我是小白人! – 2013-02-21 00:09:27

+0

@ndr:stackoverflow應該找到了你現在... – cbeleites 2013-02-21 08:42:26

回答

1

通過prcomp然後lm。爲此,您需要將由prcomp返回的PCA模型應用於新數據。這需要兩個(或三個)步驟:

  1. 中心與通過prcomp
  2. 比例計算用相同的縮放向量,是由prcomp
  3. 計算的新的數據應用同一中心的新數據旋轉計算由prcomp

前兩個步驟完成通過scale,使用prcomp對象的$center$scale元件。然後,您基質由$rotation [, components.to.use]

乘以你的數據,你可以很容易地檢查你的PCA得分計算的重建通過計算得分數據,你輸入prcomp並比較與prcomp返回的PCA模型的$x元素結果是否。

編輯在評論的光:

如果簡歷的目的是計算某種錯誤的,那麼你就可以計算預測分數的誤差之間進行選擇Ÿ(這是我的理解你)並計算錯誤:PCA讓您也可以倒退並根據得分預測原始變量。這很容易,因爲加載($rotation)是正交的,所以反轉就是轉置。

因此,在原始ý空間預測是scores %*% t (pca$rotation),其更快由tcrossprod (scores, pca$rotation)計算。

+0

嗯,坦白地說,我認爲我所做的與PCR非常不同。在PCR中,我使用(一些)分數作爲** X **來擬合和預測** **,而我所做的是使用第一臺PC上的PCA分數作爲** y **和我的實驗設計分數作爲** X **。 – 2013-02-21 00:06:44

+0

對不起,我忽略了這一點。所以你所做的是在(反向)PCR和PLS之間的某個地方?請問爲什麼你這樣做(純粹的好奇心)?在任何情況下,第一種方法都可以讓您根據PCA分數進行任何您喜歡的操作。 – cbeleites 2013-02-21 08:46:05

+0

我執行PCA是因爲我的原始** Y **是_n_實驗和_m_變量的矩陣,所以我只有兩種可能性:

    - 在每一個** ** __ **上擬合和表徵_m_不同模型**或 - 嘗試減少my ** Y **數據的維數,因爲我的_m_變量高度相關,所以我使用PC1上的** Y **分數作爲我的新** **,例如(** y_n **)。
然後,我只安裝了一個模型:** y_n〜X **(** X **,因爲我說我的編碼實驗條件的矩陣)。 <\br>現在需要通過交叉驗證來估計我的模型的預測誤差。 – Ndr 2013-02-21 17:02:16