用真實的 HPLC 原始資料,一步步看懂:峰面積是怎麼積出來的、檢量線是怎麼建的、 以及一個未知樣品的濃度是怎麼被算出來的。所有圖都可以動手操作。
HPLC 偵測器量到的是吸光訊號隨時間的變化,不是濃度。 要得到濃度,必須經過三個轉換。反相 HPLC 搭配紫外偵測(咖啡因在 272–280 nm 有強吸收) 是飲料與茶葉中咖啡因定量的標準做法[13,14]。
在偵測器線性範圍內,峰面積 ∝ 進入偵測器的分析物莫耳數。這是所有 HPLC 定量的前提。
峰形變寬(管柱老化、基質效應)時峰高會掉,但面積幾乎不變。本例樣品峰就明顯比標準品寬。
用一系列已知濃度跑出面積,建立「面積 = f(濃度)」的關係,再反推未知樣品。
每個檔案是 721 個點(每 0.5 秒一點,共 6 分鐘)。 咖啡因大約在 4.4–4.7 分鐘出峰(黃色區帶)。 把六個標準品疊在一起,會看到峰高隨濃度規律上升——這就是定量的直觀基礎。
切到「放大咖啡因區」後同時勾選標準品與樣品,會發現樣品的峰比較早出、比較寬 (滯留時間 4.43–4.59 vs 標準品 4.65–4.68)。這是真實樣品的基質效應,屬正常現象; 只要峰型完整、能與鄰峰分開,面積積分就不受影響。
峰面積是「訊號減去基線」圍出來的,所以基線畫在哪裡,直接決定答案。 儀器的做法是把峰起訖兩點連一條直線;更通用的做法是 airPLS(自適應迭代重加權懲罰最小平方)[4], 它不需要先知道峰在哪,靠迭代加權自動把「疑似基線」的點權重調高、把峰壓下去。
airPLS() 回傳的是基線,不是校正後的訊號唯一要調的參數是平滑度 λ:λ 越大基線越硬(趨近直線),λ 越小基線越軟 (能貼合起伏,但也可能爬進峰底下把峰當成基線吃掉)。下圖可以親手拖 λ 看這件事發生。
—
看峰高保留率(校正後峰高 ÷ 線性基線扣除後峰高)。低於 99% 表示基線 吃到峰;同時檢量線斜率也會跟著掉,等於整批訊號被系統性削弱。本資料的安全區間是 λ = 10⁴ ~ 10⁵、differences = 2。
λ 太小的問題(吃掉峰)在圖上看得出來;λ 太大的問題是基線退化成水平線、跟不上真實漂移, 殘留的漂移會被算進面積。切到 sample-3 再把 λ 拉到 10⁷ 以上, 它的濃度會從約 86 ppm 跳到 92 ppm 以上,但層析圖上幾乎看不出異狀。
要客觀評估 λ,最好的方法是疊一個已知的基線漂移上去,看校正後面積變了多少。 理想的基線校正應該把疊加的漂移完全移除,面積不變(誤差 0%)。
| 檔案 | 漂移型態 |
|---|
λ = 10⁵ 在這批資料上與線性基線最接近(樣品濃度差 ≤ 0.34 ppm), 因為這批的基線本來就很平;但它擋不住週期約 4 分鐘的起伏型基線。 基線只是平緩漂移用 10⁵;不確定就用 10⁴。 換一台儀器、換一個梯度程式,都應該重做一次這個測試。
STEP 4 的 alignDE 內建 baselineCorrectionCWT,它同樣是 Whittaker 懲罰最小平方
[3],差別在於它用 CWT 偵測到的峰區來決定哪裡該擬合,
而 airPLS 靠自適應加權自動判斷、不需先偵測峰。兩者在本資料算出的最終樣品濃度差
≤ 1 ppm,可以互相替換。
上一步看到樣品的峰比標準品早出 0.06–0.23 分鐘。只要滯留時間會漂移, 就沒辦法用同一個固定的積分視窗處理所有檔案。 alignDE[1] 用小波峰型比對找出峰位、 再用差分演化搜尋每個峰該平移多少,把所有圖譜對到同一個參考圖上。
用 Mexican Hat 小波做 CWT 找峰頂(ridge line)[2], 再用 Haar 小波估計每個峰的起訖點。
Whittaker 平滑[3]在非峰區擬合一條柔性基線並扣除, 讓相關係數不被基線漂移主導。
DE[5,6] 搜尋每群峰在 ±slack 內的位移,最大化與參考圖的 相關係數;峰內不變形,峰間線性內插。
層析圖對齊最經典的方法是 COW(correlation optimised warping, Nielsen 等人 1998[7]), 它把訊號切段後逐段伸縮;Tomasi 等人[8] 系統比較過 COW 與 DTW 在層析資料上的表現。alignDE 的差別在於只平移峰、不伸縮峰內部, 因此峰面積在對齊過程中被完整保留——這正是定量分析需要的性質[1]。
| 檔案 | 對齊前相關係數 | 對齊後相關係數 | 峰頂前 (min) | 峰頂後 (min) | 與參考差 (min) |
|---|
alignDE 依設計會保留峰面積,所以對齊本身不會改變面積。 它真正的價值是讓所有檔案能共用同一個固定積分視窗。 下表用不同寬度的固定視窗(以參考峰頂為中心)重跑定量:穩健的方法,答案不該隨視窗寬度大幅改變。
| 固定視窗半寬 | 未對齊 (ppm) | 對齊後 (ppm) | ||||||
|---|---|---|---|---|---|---|---|---|
各樣品在 ±0.20 ~ ±0.50 min 五種視窗下的濃度全距平均:未對齊 27.3 ppm → 對齊後 4.7 ppm。 對齊讓定量結果不再依賴「積分視窗剛好設對」這件事。
alignDE 是訊號層級的校正,它假設要對齊的峰確實是同一個化合物。 如果峰的身分本來就判斷錯了(見 STEP 7),對齊只會把錯的峰對得更整齊。 另外空白樣品(std-0)在該區間沒有峰,對齊對它沒有意義——表中它的相關係數維持在 0 附近。
「峰面積」= 訊號曲線與基線之間圍出的面積。 電腦的做法是把這塊區域切成很多細長梯形再加起來(梯形法)。 下面可以親手拖曳積分起訖點、調整梯形數量,看面積怎麼變。
拖曳圖上兩條虛線把手(▮)可改變積分起訖點;灰色斜線是基線,由起訖兩點連成。
把起點往左拉、終點往右拉,面積會不斷變大——因為多含進了基線雜訊與鄰峰。 這也是為什麼標準品與樣品必須用一致的積分規則,否則檢量線本身就失真了。
六個已知濃度的標準品各得到一個面積,把(濃度, 面積)畫成散布圖做最小平方線性迴歸, 就得到檢量線。下圖可切換是否納入空白點、是否強制過原點,即時看係數與 R² 怎麼變。
本例殘差呈現淺淺的 ∪ 形(低濃度與高濃度偏正、中間偏負),代表響應有輕微正曲率: 每 ppm 的面積從 43,222 慢慢升到 48,154。改用二次式擬合可讓 R² 從 0.999435 升到 0.999861—— 提升僅 0.0004,不足以放棄線性模型的簡潔,故仍採線性。
樣品的面積落在 y 軸上,往右水平走到檢量線,再垂直落下來讀 x 軸,就是濃度。 點下方按鈕看動畫演示。
反推濃度的標準誤公式與 95% 信賴區間的推導見 Miller & Miller [12];n 為檢量線點數,C̄ 為標準品濃度平均, Sxx = Σ(Ci − C̄)²。
這批真實資料裡,儀器的自動化合物指認在 4 個檔案是錯的。 它照著方法檔設定的滯留時間視窗抓峰,但樣品滯留時間漂移後,它就抓到旁邊的雜訊小峰。
| 檔案 | 儀器指認 RT | 儀器指認面積 | 實際咖啡因 RT | 實際面積 | 若照用儀器結果 |
|---|---|---|---|---|---|
| std-25 | 4.177 | 174,985 | 4.653 | 1,080,560 | 檢量線嚴重偏低 |
| sample-1 | 未指認 | — | 4.446 | 4,378,116 | 無結果 |
| sample-3 | 3.242 | 21,355 | 4.594 | 4,085,132 | −0.24 ppm(負值) |
| sample-4 | 4.028 | 17,636 | 4.578 | 4,114,384 | −0.33 ppm(負值) |
① 每次分析都親眼看層析圖,不要只看報表數字。
② 用空白(std-0)確認該滯留時間確實沒有干擾峰。
③ 出現負濃度、或濃度與峰高明顯矛盾時,一定是判峰或基線出了問題。
| 樣品 | 滯留時間 (min) | 峰面積 | 濃度 (ppm) | 95% CI | 檢量線範圍內 |
|---|
濃度單位與標準品配製單位相同(ppm = µg/mL)。本批 Dilution Factor = 1、注射量 10 µL 全部一致; 若前處理有稀釋,最終結果需再乘上稀釋倍數。
基線畫在哪、積分從哪開始到哪結束,直接決定面積大小;標準品與樣品必須一致。
R² 0.999 仍可能有系統性曲率。回算濃度與殘差圖才是真正的驗收指標。
自動指認會因滯留時間漂移而抓錯峰。負濃度就是最明顯的警訊。
以下文獻對應本頁實際使用的演算法與規範。第 1–10、13–14 項的書目資料 已透過 Crossref 以 DOI 逐筆核對;第 11–12 項為法規指引與教科書,無 DOI。
cwt()、getRidge()、
identifyMajorPeaks() 改寫自此方法(MassSpecWavelet)。
baselineCorrectionCWT()
與 airPLS 共同的理論基礎。
| 軟體 | 版本 | 用途 |
|---|---|---|
| R | 4.6.1 | 檢量線迴歸、峰對齊 |
| alignDE | 3.0.0 | CWT 峰偵測、基線扣除、DE 對齊 |
| DEoptim | 2.2.8 | 差分演化最佳化引擎 |
| Python | 3.12 | 解析、迴歸、繪圖、產生本頁 |
| NumPy / SciPy / pandas / Matplotlib | — | 數值計算與繪圖 |