用 alignDE 做 HPLC 層析圖對位、峰積分與檢量線

以苯甲酸 (BA) 與己二烯酸 (SA) 的 HPLC 資料為例,完整走一次 「小波波峰偵測 → 基線校正 → 差分演化對位 → 峰積分 → 加權檢量線 → 樣品定量」的流程。 每個步驟都附上實際運算出來的圖與數字。

alignDE 3.0.1 5 標準品 + 6 樣品 Shimadzu LCsolution 匯出檔 R + DEoptim
← 第 1 站 · HPLC 觀念入門看懂層析圖、什麼是檢量線、隨堂測驗 ← 第 2 站 · alignDE 上手安裝與版本、5 分鐘最小範例、錯誤訊息排解 第 3 站 · 你正在讀 · 進階原理數學推導、11 張分析圖、方法比較、15 篇參考文獻

1. 為什麼需要 peak alignment

本文使用的是食品中苯甲酸與己二烯酸的反相 HPLC 資料——這是最常見的防腐劑檢驗項目之一, 兩者可在同一次沖提中以 UV 230 nm 同時定量[15]。 本批資料共 5 個標準品(0.25 / 10 / 25 / 50 / 100 ppm)與 6 個樣品, 由 Shimadzu LCsolution 匯出為 ASCII 檔。

同一支管柱、同一套方法,不同時間跑出來的層析圖,滯留時間 (retention time, RT) 不會完全一樣。 造成漂移的原因包括管柱溫度、流動相組成微變、幫浦壓力、管柱老化等。

這批資料就是活生生的例子:sample-1 ~ sample-3 是上午跑的,整條層析圖比下午的標準品左移約 0.08 ~ 0.10 分鐘。下圖左為標準品、右為樣品,虛線是標準品的平均峰位置—— 可以清楚看到樣品的兩個峰都往左偏了。

圖 1 原始層析圖疊圖。虛線為標準品的 BA / SA 平均滯留時間,樣品明顯左移。
圖 1 原始層析圖疊圖。虛線為標準品的 BA / SA 平均滯留時間,樣品明顯左移。
漂移造成的實際後果: 原始儀器軟體 LCsolution 因為 RT 視窗設得太窄,完全沒有指認出 sample-1、sample-2、sample-3 的 SA 峰 (原始報告的濃度直接寫 0)。實際上 sample-1 含有 42 ppm 以上的己二烯酸——這是一個會漏檢的錯誤。

Peak alignment 就是把每張圖的峰「推」回共同的時間軸上,讓後續可以用同一個積分視窗 處理所有樣品,也讓不同批次的資料可以直接比較。

2. alignDE 方法總覽

alignDE 出自 Zhang, Chen & Liang (2011)[1, 2],核心想法是 「用小波找出峰在哪裡,再用差分演化搜尋每個峰該平移多少」。 和常見的 COW (correlation optimised warping)[3] 相比,它最大的優點是 只平移峰、只拉伸峰與峰之間的基線區段,因此峰形、峰高、峰面積都不會被扭曲—— 這對定量分析非常關鍵[4]

步驟 1連續小波轉換 (Mexican Hat) → 脊線 → 主要波峰
步驟 2Haar 小波估計每個峰的起訖點
步驟 3懲罰最小平方法擬合並扣除基線
步驟 4差分演化搜尋位移量,最大化與參考圖的相關係數
步驟 5用共同視窗積分 → 檢量線 → 定量
為什麼峰面積不會被改變? alignDE 重建訊號時,把 [峰起點, 峰終點] 區間原封不動地複製過去, 只有峰與峰之間的區段用線性內插拉伸或壓縮來吸收位移量。 所以對位前後同一個峰的面積理論上完全相同——這一點我們稍後會用數字驗證。

STEP 1連續小波轉換與波峰偵測

層析圖的峰近似高斯形。Mexican Hat 小波(高斯函數的二階導數)長得就像一個峰, 所以拿它去和訊號做連續小波轉換 (CWT),在「峰的位置、且尺度 s 接近峰寬」的地方 係數會出現極大值。

W(t, s) = (1/√s) ∫ f(τ) · ψ((τ − t)/s) dτ ψ = Mexican Hat(墨西哥帽小波)

下圖上半是參考層析圖(100 ppm 標準品),下半是 CWT 係數的絕對值 |W(t,s)| (顏色越紅越大),黑線是脊線 (ridge line)——把不同尺度下的局部極大值串起來的軌跡。 一條夠長、且訊噪比夠高的脊線,就代表一個真正的波峰。

圖 2 上:參考層析圖與偵測到的峰頂(紅色三角形)。下:CWT 尺度圖與脊線,兩條貫穿高尺度的脊線分別對應 BA 與 SA。
圖 2 上:參考層析圖與偵測到的峰頂(紅色三角形)。下:CWT 尺度圖與脊線,兩條貫穿高尺度的脊線分別對應 BA 與 SA。
為什麼要用小波而不是直接找局部最大值? 直接找極大值會被雜訊騙——雜訊在小尺度也會產生一堆假的極大值,但它們的脊線很短、撐不到大尺度。 用「脊線長度 ≥ ridgeLength」加上「訊噪比 ≥ SNR.Th」兩個條件過濾, 就能穩健地只留下真正的峰。這套框架由 Du、Kibbe & Lin 提出[5], 原本用於質譜圖的峰偵測(即 MassSpecWavelet 套件),alignDE 直接沿用到層析圖上。

偵測結果

值得注意的是,sample-3 與 sample-5 只偵測到 1 個峰——小波演算法認為它們的 SA 位置 沒有夠強的訊號。這和後面定量算出的「低於偵測極限」結論完全一致,等於是兩個獨立方法互相驗證。

檔案偵測波峰數BA 峰 RT (min)SA 峰 RT (min)
0.25ppm.csv25.3755.933
10ppm.csv25.3675.942
25ppm.txt25.3925.967
50ppm.txt25.3585.925
100ppm.csv25.3755.925
sample-1.txt25.2925.842
sample-2.txt25.2925.833
sample-3.txt15.275
sample-4.txt25.3585.917
sample-5.txt15.383
sample-6.txt25.3505.942

STEP 2峰寬估計 = 積分邊界

知道峰頂在哪裡還不夠,要積分就必須知道峰從哪裡開始、到哪裡結束。 alignDE 改用 Haar 小波再做一次轉換:Haar 小波是一個階梯函數,它的轉換係數在 訊號斜率變化最劇烈的地方(也就是峰的起點與終點)會出現局部極值。 函式 widthEstimationCWT() 就是在峰頂兩側搜尋這些位置。

圖 3 參考層析圖上偵測到的峰頂與估計出的積分視窗。
圖 3 參考層析圖上偵測到的峰頂與估計出的積分視窗。

共同積分視窗

本流程的做法是:只從參考層析圖推導一組積分視窗,然後套用到所有對位後的圖。 由於 BA 與 SA 兩峰之間留有空隙,程式再依層析慣例把共用邊界移到谷底 (valley-to-valley)

BA 苯甲酸
5.125 – 5.733 min
SA 己二烯酸
5.733 – 6.175 min
這就是對位的價值所在。 沒有對位,每張圖都得各自抓積分邊界,邊界抓法的差異會直接變成面積的誤差; 對位之後,所有圖共用同一組邊界,積分條件完全一致,批次之間才真正可比。

STEP 3基線校正

UV 偵測器的基線會隨梯度沖提、管柱溫度而漂移。若不扣掉,積分面積會多算一塊梯形, 而且不同樣品多算的量還不一樣。

alignDE 用 Whittaker 平滑器[6, 7](懲罰最小平方法)擬合基線: 在「貼近資料」與「基線要夠平滑」之間取平衡, 並且只讓非峰區的點參與擬合(峰區的權重設得很低),避免基線被峰拉高。

minz   Σ wi(yi − zi)²  +  λ Σ (Δ²zi 第一項 = 貼近資料,第二項 = 平滑度懲罰,λ 越大基線越平滑
圖 4 以 sample-6 為例。左:原始訊號與擬合出的基線(紅虛線)。右:扣除基線後的訊號。
圖 4 以 sample-6 為例。左:原始訊號與擬合出的基線(紅虛線)。右:扣除基線後的訊號。

替代方案:airPLS(不需事先偵測波峰)

上述做法必須先知道峰在哪裡(步驟 1–2 的結果)才能設定權重。 同一團隊後續提出的 airPLS(自適應迭代重新加權懲罰最小平方法)[8] 則不需要任何先驗資訊:先用全部點擬合一條基線,把高於基線的點視為波峰、權重歸零, 把低於基線的點依偏離量給予指數權重,反覆迭代直到殘餘負值夠小為止。

它可以直接建構在 alignDE 內建的 WhittakerSmooth() 之上,不需額外套件:

airPLS <- function(x, lambda = 100, porder = 1, itermax = 20, tol = 0.001) {
  m <- length(x); w <- rep(1, m); z <- x
  for (i in seq_len(itermax)) {
    z <- WhittakerSmooth(x, w, lambda, porder)
    d <- x - z; neg <- d < 0
    dssn <- sum(abs(d[neg]))
    if (dssn < tol * sum(abs(x))) break        # 收斂
    w[!neg] <- 0                                # 高於基線 → 視為波峰
    w[neg]  <- exp(i * abs(d[neg]) / dssn)      # 低於基線 → 依偏離量加權
    w[1] <- exp(i * max(abs(d[neg])) / dssn); w[m] <- w[1]
  }
  z
}

本流程實際跑了這個比較:同一組積分視窗、同一套加權檢量線,只換基線演算法, 並掃描 λ = 10 / 100 / 1000 / 10000。

圖 11 基線方法比較。上排:SA 視窗附近的基線擬合(虛線為現行 CWT 法)。下排左:主要波峰對基線方法幾乎不敏感;下排右:微量波峰高度敏感,大 λ 明顯高估。
圖 11 基線方法比較。上排:SA 視窗附近的基線擬合(虛線為現行 CWT 法)。下排左:主要波峰對基線方法幾乎不敏感;下排右:微量波峰高度敏感,大 λ 明顯高估。

結論一:對可定量的結果,兩種方法一致

8 個高於報告下限的結果中,CWT 與 airPLS (λ = 10–100) 的差異 除 sample-1 的 BA 為 4.0% 外,其餘全部在 1.8% 以內。 檢量線品質 airPLS 甚至略優(BA 的 R² 由 0.99707 提升到 0.99773, 回收率最大偏差由 8.90% 降到 8.01%)。換句話說,這批資料用不用 airPLS 都可以。

結論二:λ 不能設太大,否則會製造假訊號

這是本次比較最重要的發現。 從圖 11 上排可以看到,λ = 10–100 的基線會順著鄰近 BA 大峰的拖尾往下走, 和現行 CWT 法幾乎重合;但 λ ≥ 1000 時基線被過度平滑成一條水平線, 把 BA 的拖尾整段當成 SA 的訊號積了進去。 結果 sample-6 的 SA 從 0.60 ppm 被膨脹到 0.91 ppm(+52%)。 這不是「比較準」,而是假訊號——大 λ 在這種「微量峰緊鄰大峰拖尾」的情境下並不適用。
分析物樣品CWTairPLS_10airPLS_100airPLS_1000airPLS_10000低 λ 群一致性 (%)
BAsample-1.txt18.76619.54619.27819.58519.5844.0
BAsample-2.txt0.0530.0540.0610.0720.07415.3
BAsample-3.txt8.1908.1228.2098.2028.2041.1
BAsample-4.txt1.3891.4061.3871.3991.4201.4
BAsample-5.txt10.24710.30410.25810.23910.2400.6
BAsample-6.txt30.92930.70130.95430.95331.0310.8
SAsample-1.txt42.56542.73542.74942.74042.7330.4
SAsample-2.txt5.8865.7925.8985.8295.8301.8
SAsample-3.txt0.0100.0340.0270.0730.08088.0
SAsample-4.txt2.0622.0722.0612.0672.0820.5
SAsample-5.txt0.0030.0190.0130.1050.111122.3
SAsample-6.txt0.5960.6480.6090.8550.9078.4

灰色列為低於報告下限 0.25 ppm 的結果(判定皆為 N.D.,差異不影響結論)。「低 λ 群一致性」= CWT / airPLS_10 / airPLS_100 三者的全距相對中位數。

結論三:實務建議

本流程維持 CWT 法為主(它能利用步驟 1–2 已經算出的峰位置,在本資料這種 「微量峰坐在大峰拖尾上」的情境有實質優勢),並把 airPLS 當作獨立的交叉驗證: 兩法一致的結果可以放心報告;兩法分歧的結果(都落在報告下限附近)就該人工覆核。 若要改用 airPLS 當主方法,在腳本頂端把 BASELINE_METHOD 改成 "airpls" 即可。

STEP 4差分演化對位

到這裡我們已經知道每張圖有哪些峰、峰的起訖在哪。最後一步是問: 每個峰要平移幾個取樣點,才能和參考圖最像?

alignDE 把這個問題交給差分演化 (Differential Evolution, DE)[9] ——一種族群式的全域最佳化演算法。 目標函數是「平移後的訊號與參考訊號的線性相關係數」,要最大化:

maxδ   corr( shift(x, δ), target ) δ ∈ (−slack, +slack),每次同時最佳化 n 個峰

DE 的好處是不需要目標函數可微、也不容易卡在局部最佳解,代價是要跑很多次評估 (本例族群 60、150 世代)。alignDE 3.0.0 把最佳化交給 DEoptim 套件的 C 實作[10], 比舊版內建的純 R 版本快 1–2 個數量級,因此每張圖只需約 0.2–0.4 秒。

圖 5 上:對位前,11 張圖的峰散落在不同位置。下:對位後,所有峰疊合,兩個色塊即為共同積分視窗。
圖 5 上:對位前,11 張圖的峰散落在不同位置。下:對位後,所有峰疊合,兩個色塊即為共同積分視窗。

對位效果

用與參考圖的相關係數當指標,改善最大的是 sample-3.txt(0.356 → 0.822)。 套用的位移量也和肉眼觀察到的漂移吻合:sample-1 ~ sample-3 都被往右推了約 0.08 ~ 0.10 分鐘。

圖 6 各層析圖與參考圖的相關係數,對位前 vs 對位後。
圖 6 各層析圖與參考圖的相關係數,對位前 vs 對位後。
檔案套用位移 (min)相似度 對位前相似度 對位後相似度改善耗時 (秒)
0.25ppm.csv+0.0000.96710.9671+0.00000.32
10ppm.csv+0.0000.99810.9997+0.00160.26
25ppm.txt-0.0250.94250.9995+0.05700.28
50ppm.txt+0.0080.99590.9996+0.00370.25
100ppm.csv+0.0001.00001.0000+0.00000.00
sample-1.txt+0.0830.50810.8695+0.36140.27
sample-2.txt+0.1000.19890.5217+0.32280.27
sample-3.txt+0.1000.35560.8222+0.46660.18
sample-4.txt+0.0170.96270.9894+0.02670.25
sample-5.txt-0.0080.81430.8215+0.00720.18
sample-6.txt+0.0170.80860.8279+0.01930.27
為什麼有些樣品的相關係數對位後仍然不高? 相關係數衡量的是整條曲線的形狀。sample-2 只含己二烯酸、幾乎沒有苯甲酸, sample-5 則相反——它們和「兩峰俱全」的參考圖形狀本來就不一樣, 所以就算峰位置對齊了,相關係數也到不了 1。這不是對位失敗,而是樣品組成本來就不同。 判斷對位是否成功,要看峰位置是否對齊(圖 5),不是只看相關係數的絕對值。

STEP 5峰積分

對位完成後,用梯形法在共同視窗內對基線校正後的訊號積分:

A = Σi (ti+1 − ti) · (yi + yi+1) / 2 訊號單位 mV、時間單位 min → 面積 mV·min,再 ×60000 換成 µV·s 以便和 LCsolution 比較
圖 7 五個標準品的積分結果。紅色為 BA、綠色為 SA 的積分面積,數字為換算後的 µV·s。
圖 7 五個標準品的積分結果。紅色為 BA、綠色為 SA 的積分面積,數字為換算後的 µV·s。

驗證一:和 LCsolution 原始峰表比對

本流程完全獨立於儀器軟體重新算了一次面積。五個標準品的十個峰, 和 LCsolution 報告的面積差異最大只有 3.02%—— 可以確認積分邏輯是正確的。

為什麼系統性地略小 1–3%? LCsolution 對 SA 峰的積分終點拉得很長(100 ppm 標準品甚至拉到 7.667 分鐘), 把長尾巴也算進去;本流程的視窗在 6.175 分鐘就切掉。 只要所有標準品與樣品都用同一套規則,這個差異會被檢量線的斜率吸收,不影響定量結果。

驗證二:對位真的不會改變峰面積嗎?

表格中的「未對位偏差」欄位,是拿沒有對位的訊號套用同一個視窗積分,再和對位後的結果比較。 要看這個欄位,必須只挑實際被平移過的層析圖才有意義(位移量為 0 的圖偏差必然是 0,不能當證據)。 真正被移動的幾張圖中,25ppm(位移 −0.025 min)偏差為 +0.02% / −0.45%, sample-1(位移 +0.083 min)為 +1.13% / −0.44%—— 都在積分誤差的量級內,證實 alignDE 確實保留了峰面積。

偏差特別大的三個(sample-2 的 BA、sample-3 與 sample-5 的 SA)面積都小於 2 萬 µV·s, 屬於雜訊等級的訊號,本來就沒有定量意義。

微量峰的積分視窗要小心。 sample-6 的 SA 峰只有 32,549 µV·s,比 LCsolution 少了 33.7%。 原因是 LCsolution 對這個峰的積分終點拉到 6.433 分鐘,本流程的共同視窗在 6.175 分鐘就切斷, 把拖尾的部分切掉了。峰越小、拖尾佔比越高,終點位置的影響就越大。 若這類接近報告下限的結果會影響判定,建議把 SA 視窗的終點往後延,或改用人工積分覆核。
檔案分析物面積 (uV*s)LCsolution 面積 (uV*s)vs LCsolution (%)未對位偏差 (%)
0.25ppm.csvBA37,94838,440-1.28+0.00
0.25ppm.csvSA13,85214,164-2.20+0.00
10ppm.csvBA811,644817,760-0.75+0.01
10ppm.csvSA547,324553,774-1.16-0.08
25ppm.txtBA1,979,1721,993,231-0.71+0.02
25ppm.txtSA1,331,7361,344,864-0.98-0.45
50ppm.txtBA4,108,2834,136,240-0.68+0.01
50ppm.txtSA2,743,7722,776,557-1.18+0.00
100ppm.csvBA8,989,7269,093,290-1.14+0.00
100ppm.csvSA5,933,9706,118,540-3.02+0.00
sample-1.txtBA1,546,0221,629,519-5.12+1.13
sample-1.txtSA2,372,4672,474,533-4.12-0.44
sample-2.txtBA14,39516,086-10.51+50.79
sample-2.txtSA332,796339,793-2.06-1.85
sample-3.txtBA692,487706,509-1.98-0.05
sample-3.txtSA3841,837-79.12+43.31
sample-4.txtBA131,780134,493-2.02+0.00
sample-4.txtSA114,223118,948-3.97+0.15
sample-5.txtBA861,660878,260-1.89-0.00
sample-5.txtSA1171,067-88.99+31.66
sample-6.txtBA2,566,0412,607,795-1.60-0.01
sample-6.txtSA32,54949,096-33.70+1.60

STEP 6檢量線

把五個標準品的面積對濃度做線性迴歸。這裡有一個容易踩的陷阱: 本組標準品濃度跨 400 倍(0.25 → 100 ppm)。 一般未加權的最小平方法會被最高濃度點主導,低濃度端嚴重失真。

未加權迴歸的災難: 0.25 ppm 的標準點會被回算成 2.1 ppm(回收率 842%), 而且統計出來的 LOQ 高達 23.6 ppm——幾乎所有樣品都會被誤判為「低於偵測極限」。 改用生體分析領域對寬動態範圍慣用的 1/x² 加權[12, 11]後, 五個標準點的回收率全部落在 95–110%。
min   Σ wi (Ai − (m·Ci + b))² ,   wi = 1 / Ci² 低濃度點的權重放大,避免高濃度點壟斷迴歸線

為什麼是 1/x²,而不是 1/x?權重不該憑感覺挑。判準是「儀器響應的標準差 σ 隨濃度 x 怎麼變」[12]:σ 若不隨濃度改變就不必加權;σ² 與 x 成正比時用 1/x;σ 與 x 成正比(即相對標準差固定)時用 1/x²。層析峰面積多屬最後一種—— 濃度愈高、絕對誤差愈大而相對誤差大致穩定,所以 1/x² 是合理起點。 實務上的做法是三種都跑一次、比較低濃度端的回收率再定案, 本流程的 results/weighting_comparison.csv 就是這個比較的輸出。 若要判斷資料是否真的具異質變異,可用殘差分析加統計檢定確認[13]

對照組:範圍窄的時候就不必加權

同系列的咖啡因定量教材用的是未加權的最小平方法——那組標準品扣掉空白 只跨 8 倍(25 → 200 ppm),殘差圖看不到低濃度端擠成一團的喇叭形,未加權就夠了。 同樣是 HPLC 檢量線,濃度範圍不同、答案就不同,所以別把「要加權」當成通則背下來。

圖 8 檢量線。實心紅點與實線為本流程的積分面積,空心藍圈與虛線為 LCsolution 面積,兩者幾乎重合。
圖 8 檢量線。實心紅點與實線為本流程的積分面積,空心藍圈與虛線為 LCsolution 面積,兩者幾乎重合。
BA 苯甲酸
Area = 82,386.5 x C + 17,326.6  R² = 0.99706  LOQ = 0.155 ppm
SA 己二烯酸
Area = 55,565.7 x C - 48.6  R² = 0.99829  LOQ = 0.118 ppm
分析物alignDE 斜率alignDE 截距alignDE R2LOD (ppm)LOQ (ppm)報告下限 (ppm)LCsolution 斜率
BA (苯甲酸)82,386.517,326.60.997060.0510.1550.2583,065.9
SA (己二烯酸)55,565.7-48.60.998290.0390.1180.2556,482.7

本文的 LOD 與 LOQ 依 ICH Q2(R2)[14] 的定義計算: LOD = 3.3σ/S、LOQ = 10σ/S,其中 S 為檢量線斜率、σ 為響應的標準差 (加權迴歸下取最低標準點處的殘差標準差)。

線性檢核:回算回收率

檢查檢量線好不好,比 R² 更靈敏的指標是把標準品的面積代回檢量線、看能不能還原成原本的濃度。 R² 對高濃度點的誤差不敏感(0.99 以上看起來都很漂亮),但回收率會誠實地暴露問題。

圖 9 五個標準點的回算回收率,粉紅色帶為 ±15% 可接受區間。
圖 9 五個標準點的回算回收率,粉紅色帶為 ±15% 可接受區間。
分析物檔案標示濃度 (ppm)alignDE 面積 (uV*s)回算濃度 (ppm)回收率 (%)線性判定
BA0.25ppm.csv0.2537,9480.250100.12OK
BA10ppm.csv10.00811,6449.64196.41OK
BA25ppm.txt25.001,979,17223.81395.25OK
BA50ppm.txt50.004,108,28349.65699.31OK
BA100ppm.csv100.008,989,726108.906108.91OK
SA0.25ppm.csv0.2513,8520.250100.07OK
SA10ppm.csv10.00547,3249.85198.51OK
SA25ppm.txt25.001,331,73623.96895.87OK
SA50ppm.txt50.002,743,77249.38098.76OK
SA100ppm.csv100.005,933,970106.793106.79OK

STEP 7樣品定量

把樣品的積分面積代入檢量線反推濃度:

C = (A − b) / m
圖 10 六個樣品的 BA / SA 濃度。灰色虛線為報告下限 0.25 ppm。
圖 10 六個樣品的 BA / SA 濃度。灰色虛線為報告下限 0.25 ppm。
樣品分析物alignDE 面積 (uV*s)濃度 (ppm)稀釋倍數樣品濃度 (ppm)判定
sample-1.txtBA1,546,02218.555118.555定量有效
sample-1.txtSA2,372,46742.697142.697定量有效
sample-2.txtBA14,395-0.0361-0.036N.D. (< LOD)
sample-2.txtSA332,7965.99015.990定量有效
sample-3.txtBA692,4878.19518.195定量有效
sample-3.txtSA3840.00810.008N.D. (< LOD)
sample-4.txtBA131,7801.38911.389定量有效
sample-4.txtSA114,2232.05712.057定量有效
sample-5.txtBA861,66010.248110.248定量有效
sample-5.txtSA1170.00310.003N.D. (< LOD)
sample-6.txtBA2,566,04130.936130.936定量有效
sample-6.txtSA32,5490.58710.587定量有效
報告下限的處理。 統計算出的 LOQ(0.155 / 0.118 ppm)比最低標準點 0.25 ppm 還低, 但低於最低校正點的區間並沒有被實際校正過,不應該外插。 因此實務報告下限取兩者中較大的 0.25 ppm,低於此值一律報告為 N.D.。
回到一開始的問題。 sample-1 的己二烯酸算出 42.7 ppm, 但 LCsolution 的原始報告寫的是 0——因為它的 RT 視窗沒抓到這個左移了 0.09 分鐘的峰。 這就是 peak alignment 在實務上的價值:不只是讓圖好看,而是避免漏檢。

10. 參數速查與重現方式

本流程使用的參數

參數函式本例設定調整方向
ROI4.5 – 7.0 min避開 1.2–1.7 min 的溶劑擾動
scalescwt()1 – 31上限受訊號長度限制(301 點補到 512,最大 31)
SNR.ThidentifyMajorPeaks()10–3;越低偵測到越多峰
ridgeLengthidentifyMajorPeaks()55–10;越大越嚴格
lambdabaselineCorrectionCWT()10010–1000;越大基線越平滑
thresholdbaselineCorrectionCWT()0.3峰形門檻,一般取 0.3
npeakClustering()53–5;峰間距門檻
slackalignDE()25 點 ≈ 0.21 min設成資料中看得到的最大位移
NP / itermaxalignDE()60 / 150NP 約 2×slack;itermax ≥ 150
差分演化是隨機演算法。 每次執行結果會有微小差異,因此腳本開頭以 set.seed(20170522) 固定亂數種子,確保結果可重現。

重現步驟

# 1. 安裝套件(僅需一次)
install.packages(c("DEoptim", "Matrix", "remotes"))
remotes::install_github("Tai-ShengYeh/alignDE")

# 2. 執行分析:產生 results_align/ 的 10 張圖與 6 個 CSV
Rscript hplc_alignDE.R

# 3. 產生這份教學網頁
python build_teaching_html.py

檔案清單

檔案說明
lcsolution_io.RLCsolution 匯出檔解析器(共用模組)
hplc_alignDE.R本流程主程式:對位 → 積分 → 檢量線 → 定量
build_teaching_html.py本教學網頁產生器
hplc_calib.R / hplc_calib.py另一套流程:直接用 LCsolution 峰表面積建檢量線
results_align/圖檔與 CSV 報表

11. 參考文獻

依在本文中首次出現的順序編號;內文的上標數字可點選跳至對應條目。 所有 DOI 均經查證。

A. 峰對位方法

  1. Zhang, Z.-M., Chen, S., & Liang, Y.-Z. (2011). Peak alignment using wavelet pattern matching and differential evolution. Talanta, 83(4), 1108–1117. doi:10.1016/j.talanta.2010.08.008alignDE 的原始論文,本流程步驟 1–4 的方法依據。
  2. Zhang, Z.-M., Chen, S., & Liang, Y.-Z. alignDE: Peak Alignment Using Wavelet Pattern Matching and Differential Evolution. R 套件版本 3.0.1. https://github.com/Tai-ShengYeh/alignDE本流程實際呼叫的軟體實作。
  3. Nielsen, N.-P. V., Carstensen, J. M., & Smedsgaard, J. (1998). Aligning of single and multiple wavelength chromatographic profiles for chemometric data analysis using correlation optimised warping. Journal of Chromatography A, 805(1–2), 17–35.COW(相關性最佳化扭曲)的原始論文,是 alignDE 的主要比較對象。
  4. Tomasi, G., van den Berg, F., & Andersson, C. (2004). Correlation optimized warping and dynamic time warping as preprocessing methods for chromatographic data. Journal of Chemometrics, 18(5), 231–241. doi:10.1002/cem.859COW 與 DTW 的系統性比較,說明為何扭曲類方法會改變峰面積。

B. 小波峰偵測

  1. Du, P., Kibbe, W. A., & Lin, S. M. (2006). Improved peak detection in mass spectrum by incorporating continuous wavelet transform-based pattern matching. Bioinformatics, 22(17), 2059–2065. doi:10.1093/bioinformatics/btl355CWT + 脊線 + 訊噪比的峰偵測框架(MassSpecWavelet),alignDE 的步驟 1 沿用此法。

C. 基線校正

  1. Whittaker, E. T. (1922). On a new method of graduation. Proceedings of the Edinburgh Mathematical Society, 41, 63–75.懲罰最小平方平滑法的原始構想。
  2. Eilers, P. H. C. (2003). A perfect smoother. Analytical Chemistry, 75(14), 3631–3636. doi:10.1021/ac034173t把 Whittaker 平滑器整理成現代化學計量學可直接使用的形式,即步驟 3 的基線擬合。
  3. Zhang, Z.-M., Chen, S., & Liang, Y.-Z. (2010). Baseline correction using adaptive iteratively reweighted penalized least squares. Analyst, 135(5), 1138–1146. doi:10.1039/b922045cairPLS,同一團隊的基線校正改良版;不需事先偵測波峰,適合基線漂移嚴重的資料。

D. 最佳化演算法

  1. Storn, R., & Price, K. (1997). Differential evolution — a simple and efficient heuristic for global optimization over continuous spaces. Journal of Global Optimization, 11(4), 341–359. doi:10.1023/A:1008202821328差分演化的原始論文,步驟 4 搜尋位移量所用的演算法。
  2. Mullen, K., Ardia, D., Gil, D. L., Windover, D., & Cline, J. (2011). DEoptim: An R package for global optimization by differential evolution. Journal of Statistical Software, 40(6), 1–26. doi:10.18637/jss.v040.i06alignDE 3.0.0 改以此套件的 C 實作執行 DE,比舊版內建的純 R 版本快 1–2 個數量級。

E. 檢量線與方法確效

  1. Almeida, A. M., Castel-Branco, M. M., & Falcão, A. C. (2002). Linear regression for calibration lines revisited: weighting schemes for bioanalytical methods. Journal of Chromatography B, 774(2), 215–222. doi:10.1016/S1570-0232(02)00244-1檢量線加權方案的實務依據;說明為何寬濃度範圍必須用 1/x 或 1/x² 加權。
  2. Gu, H., Liu, G., Wang, J., Aubry, A.-F., & Arnold, M. E. (2014). Selecting the correct weighting factors for linear and quadratic calibration curves with least-squares regression algorithm in bioanalytical LC–MS/MS assays and impacts of using incorrect weighting factors on curve stability, data quality, and assay performance. Analytical Chemistry, 86(18), 8959–8966. doi:10.1021/ac5018265權重因子的選用準則出處:由響應標準差 σ 與濃度 x 的關係決定——σ 為常數用不加權、σ² 正比於 x 用 1/x、σ 正比於 x 用 1/x²。
  3. Majer, D., & Finšgar, M. (2021). Single-drop analysis of epinephrine and uric acid on a screen-printed carbon electrode. Biosensors, 11(8), 285. doi:10.3390/bios11080285完整示範以殘差分析檢定異質變異、確認不適用 OLS 後改採加權迴歸,並直接比較兩者。
  4. International Council for Harmonisation (2023). ICH Q2(R2) Validation of Analytical Procedures. ICH Harmonised Guideline, 採納於 2023 年 11 月 1 日(取代 Q2(R1)). https://database.ich.org/sites/default/files/ICH_Q2(R2)_Guideline_2023_1130.pdfLOD = 3.3σ/S、LOQ = 10σ/S 的定義出處,以及線性、範圍、準確度的確效要求。

F. 苯甲酸/己二烯酸分析

  1. Saad, B., Bari, M. F., Saleh, M. I., Ahmad, K., & Talib, M. K. M. (2005). Simultaneous determination of preservatives (benzoic acid, sorbic acid, methylparaben and propylparaben) in foodstuffs using high-performance liquid chromatography. Journal of Chromatography A, 1073(1–2), 393–397.食品中苯甲酸與己二烯酸同時定量的 RP-HPLC 方法,可對照本資料的分析條件。

本文引用方式

若需引用本流程,請引用 alignDE 的原始論文 [1] 與軟體[2]; 若引用其中的峰偵測、基線校正或最佳化演算法,請一併引用對應的原始文獻 [5, 7, 9, 10]