食品分析數據品管Statistics & Measurement Uncertainty
Part 3 進階延伸/第 14 章(建議先修:Ch4 迴歸、Ch2 信賴區間、Ch15–17 檢定與 ANOVA)

實驗設計與反應曲面法 Design of Experiments & Response Surface Methodology — with Base R

研發會議上主管說:「下個月要交出最佳萃取條件,實驗預算只夠 20 次。」OFAT 走不完、瞎試沒根據——這一章就是你的預算內攻略。

📌 先備 本章會用到 p 值與 ANOVA 表。還沒讀過請先看 Ch15 假說檢定、Ch16 單因子 ANOVA;交互作用與失擬檢定在 Ch17。
🔑 課前暖身 做實驗最省的辦法不是「一次只改一個條件」,而是「有計畫地一次改多個」—— 因為因子之間會互相加成(想想糖+檸檬,甜與酸加在一起不是 1+1=2)。 本章用 20 個實驗找到萃取多酚的最佳條件,這是食品期刊最常見的研究套路。
本章新詞先認識:因子/水準=實驗中改變的條件/設定的值;交互作用=1+1≠2 的加成效果;中心點=全部設中間值的一組實驗;CCD/RSM=找極值的標準設計與方法;駐點=曲面的山頂位置。
名詞卡住了?回 Ch0 名詞圖鑑 查白話解釋與比喻。
學習目標
🧪 情境 超音波輔助萃取(UAE)茶葉多酚,反應值 = DPPH 清除率 (%)。三個連續因子(編碼單位 ±1): A 乙醇濃度 50±10%、B 萃取溫度 50±10 °C、C 超音波時間 22.5±7.5 min。 食品期刊的萃取/加工最佳化論文十篇有九篇長這樣——本章用 base R 從因子設計一路做到最適條件, 再用業界標準套件 rsm 對照。數據為教學模擬(含已知真實模型,方便對照還原度)。

14.0 DOE 入門:先認識「實驗設計」這件事

本章所有內容建立在一個前提上:實驗的「設計」比「執行」更早決定成敗。在學統計語言之前,先用一個例子把觀念建立起來。

什麼是實驗設計(Design of Experiments, DOE)? DOE 是「在動手做實驗之前,先規劃好要改哪些條件、改到哪些值、各做幾次」的學問。 目標是用最少的實驗次數,得到能回答問題的數據——而不是憑感覺一個一個慢慢試。

直覺的做法是 OFAT(一次一因子):固定其他條件,只動溫度、試 5 次;再固定溫度、只動時間、試 5 次…… 這種做法有兩個致命傷:① 實驗次數爆炸(因子一多就跑不完); ② 永遠看不到交互作用(溫度的效果會隨時間改變,但 OFAT 的設計結構上看不出來)。

為什麼食品領域特別需要 DOE?因為食品實驗貴且慢: 樣品要前處理、儀器要排隊、一個條件可能要跑一整天。同時食品配方與製程天生充滿交互作用 (糖×酸、溫度×時間、油×乳化劑)。DOE 讓你用 8~20 次有計畫的實驗,回答別人用 50 次亂試都答不出的問題。

核心名詞白話定義本章例子(DPPH 萃取)
因子 Factor你主動改變的條件乙醇濃度、溫度、超音波時間
水準 Level因子設定的幾個值(通常先取高、低兩個)乙醇 40%(−1)與 60%(+1)
反應 Response你量出來、想要最佳化的結果DPPH 清除率(%)
主效應 Main effect單一因子從低水準換到高水準,反應平均改變多少乙醇 40→60%,DPPH 平均 +11.3%
交互作用 InteractionA 的效果取決於 B 的水準60 °C 時乙醇的效果約是 40 °C 時的 2 倍
中心點 Center point所有因子都取中間值的重複實驗(乙醇 50%, 50 °C, 22.5 min) 做 4 次
🔑 編碼(−1 / 0 / +1)是什麼? DOE 把每個因子的實際單位換成無單位的「編碼值」:低水準 = −1、中心 = 0、高水準 = +1 (例如乙醇 40%→−1、50%→0、60%→+1)。好處:不同單位的因子可以直接比大小—— 「乙醇係數 5.6 vs 時間係數 1.6」一眼看出誰影響大,不用管一個是 % 一個是分鐘。 本章所有 −1/0/+1 表格都是這個意思。

有了這些觀念,下面正式比較 OFAT 與 DOE 的差別。

14.1 為什麼是 DOE:OFAT 的陷阱

面向OFAT 一次一因子因子設計 (DOE)
實驗 run 數(3 因子 2 水準)邊試邊加,常超過 128(+中心點)
交互作用結構上看不到完整估計
曲率無從判斷中心點直接檢定
最適點常停在「沿軸的假最適點」RSM 收斂到真最適點
⚡ 交互作用不是統計裝飾品 本例數據(14.2 的 8 個因子點):溫度 60 °C 時,乙醇由 40% 提高到 60% 讓 DPPH 增加約 15.4 個百分點(每 +10% 約 7.7); 40 °C 時同樣的改變只增加約 7.2 個百分點(每 +10% 約 3.6)——差了一倍以上(見圖 14-1 左,兩線不平行)。 如果你用 OFAT 在 40 °C 先「選好」乙醇濃度,換到高溫製程時這個選擇就是錯的。 交互作用 = 一個因子的效果取決於另一個因子的水準——這是配方與製程開發的日常。

14.2 2³ 全因子 + 中心點:效應與曲率

8 個因子點(±1 組合全跑)+ 4 個中心點(0,0,0 重複)。設計矩陣與模擬結果:

RunABCDPPH (%)備註
1−1−1−133.7因子點:估主效應與交互作用
2+1−1−141.6
3−1+1−138.0
4+1+1−152.3
5−1−1+138.5
6+1−1+145.0
7−1+1+139.4
8+1+1+155.8
9–1200059.5 / 61.3 / 59.5 / 60.4中心點:估純誤差+偵測曲率

配一階+交互作用模型 lm(y ~ (A+B+C)^2):

項係數效應 (=2×係數)解讀
截距48.75—因子點的整體平均水準
A 乙醇5.6411.3最大主效應
B 溫度3.346.7次強
C 時間1.643.3最弱
A:B2.044.1明顯交互作用(圖 14-1 左)
A:C0.090.2可忽略
B:C−0.41−0.8可忽略
因子實驗交互作用圖與 RSM 等高線
圖 14-1 左:A×B 交互作用(兩線不平行)與中心點曲率(綠色菱形遠高於兩線);右:CCD 二階模型的等高線與駐點

曲率檢定:中心點的殺手鐧

2 水準設計只能配「直線」——但中心點實測平均 60.2%,因子點平均只有 43.0%, 差了 17 個百分點。用中心點的純誤差 s = 0.86 做檢定:

t = (60.18 − 43.04) / (0.86 × \(\sqrt{(1/4 + 1/8)}\)) = 32.5,df = 3,p ≈ 0.0001 結論:反應曲面是「彎的」且開口朝下(中心高、兩端低)→ 直線模型不夠 → 進入 RSM
🔑 這個 p 值在檢定什麼? 這裡的 H₀ 是「曲面沒有彎」——中心點平均=因子點平均,也就是曲率(平方項)的效應=0。 p ≈ 0.0001 很小=數據與「沒有彎」不相容,所以拒絕 H₀(不是「H₀ 為真的機率是 0.0001」)。 本章後面每一個係數的 t/p 值都是同一個邏輯:H₀ 是「該係數=0(這個因子/這一項沒有效應)」, p 很小=數據與「沒有效應」不相容。H₀、p 值與 t 檢定的完整說明見 Ch15 假說檢定。

14.3 RSM 入門:把「找最大值」變成「找山頂」

14.2 的曲率檢定告訴我們「曲面是彎的」——這正是 RSM(Response Surface Methodology,反應曲面法)登場的時機。

什麼是 RSM?把實驗條件(因子)想像成地圖上的經緯度,把實驗結果(反應)想像成海拔高度。 RSM 就是用數學模型把這座「山」的形狀畫出來,然後找出山頂的位置(最佳條件)。

為什麼直線模型不夠?一階模型 y = b₀ + b₁A + b₂B + ... 是「平面」—— 沿著任何方向走,反應只會單調上升或下降,永遠找不到「內部的最高點」。 就像用一塊木板蓋在山坡上:它能告訴你「往北走會變高」,但無法指出山頂在哪。 要描述山頂,模型必須加入平方項(A²,讓曲面能彎下來)——這就是「二階模型」。

二階模型的三種地形(由係數決定):

地形數學特徵意義
山頂(最大值)所有特徵值 < 0存在唯一最佳點——我們要的
山谷(最小值)所有特徵值 > 0適合要「最小化」的目標(如褐變、油耗)
馬鞍特徵值有正有負沒有內部最適點,最佳條件在邊界——要重新選實驗範圍

RSM 的標準流程(也是本章的路線圖):

  1. 篩選/一階:2 水準因子設計找方向(14.2)
  2. 偵測曲率:中心點檢定(14.2 末)
  3. 補軸點:升級成 CCD,配二階模型(14.3.1)
  4. 找駐點:解方程組定位山頂(14.3.1)
  5. 檢驗模型:ANOVA 表+用中心點重複做失擬檢定(14.3.2)
  6. 驗證:在最適條件實做,確認落在預測區間內(14.4)
🔑 「駐點」= 山頂的數學位置 駐點是曲面上「往任何方向走都會變差」的點——數學上就是對每個因子的偏微分都等於 0 的位置。 不用自己微分:本章用解線性方程組 solve(B, -b/2) 一步到位, R 會直接告訴你山頂的編碼座標(再換回實際單位)。

14.3.1 中心複合設計 (CCD):二階模型與駐點

CCD 在 2³ 因子設計上補軸點(每因子 ±α,其他因子歸零)與更多中心點:

區塊點數用途
因子點 (±1,±1,±1)8主效應、交互作用
軸點 (±α 各軸)6估三個平方項(曲率)
中心點 (0,0,0)6純誤差(失擬檢定的分母,見 14.3.2)、讓預測變異均勻
合計20要估 10 個參數——經濟得驚人
旋轉性(rotatable)設計:α = (2k)1/4 = 80.25 = 1.682 旋轉性 = 預測變異數在「等半徑」處相等,不偏袒任何搜尋方向(k=3)

二階模型 lm(y ~ (A+B+C)^2 + I(A^2)+I(B^2)+I(C^2)) 的配適結果:

截距ABCA²B²C²A:BA:CB:C
59.945.052.861.58−7.08−4.71−6.042.88−0.520.50

三個平方項全為負 → 開口朝下 → 存在極大值(呼應曲率檢定)。把模型寫成矩陣形式 ŷ = b₀ + x′b + x′Bx(B 對角線放平方項、非對角線放交互係數的一半),駐點有閉式解:

x₀ = −½ B⁻¹b ; eigen(B) = (−7.82, −5.98, −4.02) 全負 → 極大值

x₀ = (0.44, 0.45, 0.13)(編碼單位)→ ŷ = 61.8% 特徵值全正=極小值;正負皆有=鞍點。R 的 solve() 與 eigen() 就是全部需要的工具
因子駐點(編碼)最適條件(實際單位)
A 乙醇濃度0.4454.4 %
B 萃取溫度0.4554.5 °C
C 超音波時間0.1323.5 min
預測 DPPH—61.8 %
💡 20 個實驗的還原度 教學模擬的真實模型駐點是 (0.43, 0.41, 0.17)、真實最大值 61.9%。 用 20 個含雜訊的實驗,駐點位置估計誤差都在 0.04 個編碼單位以內(≈ 0.1% 乙醇、0.4 °C、0.3 min), 預測最大值 61.8% 與真值只差 0.05 個百分點——這就是 DOE「用最少的實驗拿最多的資訊」的具體含義。

14.3.2 模型檢驗:ANOVA 表與失擬檢定

把駐點交給操作員之前,先問模型兩個問題:① 哪些項真的在出力?(ANOVA 表,Ch16 的「把總變異拆開」) ② 二階模型的「形狀」夠不夠?(失擬檢定,Ch17 17.8–17.10)。

① anova(fit2):一階、交互作用、二次項各吃掉多少 SS

20 個 run 的總變異 SS總 = 1894.66(df = 19)。anova(fit2) 把它逐項拆開(完整輸出見本章末的 R Console),依項目類型加總:

來源dfSS佔總 SS怎麼讀
一階項 A、B、C3494.4026.1%A 348.66、B 111.55、C 34.19,三項 p 都 < 0.001
二次項 A²、B²、C²31318.1269.6%最大宗——這組資料的變異主要來自「彎曲」,少了平方項模型就垮了
交互作用 A:B、A:C、B:C370.333.7%幾乎全是 A:B(66.13,p = 2.1×10⁻⁵);A:C(p = 0.20)、B:C(p = 0.22)不顯著
殘差1011.810.6%MS殘差 = 1.18,是每一列 F 值的分母
總和191894.66100%

② 失擬檢定:6 個中心點的真正用途

20 個 run 裡只有 15 個不同的設計點;唯一有重複的就是 6 個一模一樣的中心點。它們不是浪費—— 同一條件重做 6 次的差異與模型無關,就是純誤差(s = 1.054,SS = 5 × 1.054² = 5.55,df = 6 − 1 = 5)。 有了它,就能照 Ch17 的做法把殘差 SS 拆成兩塊:

SS殘差 11.81(df 10)= SS純誤差 5.55(df 5)+ SS失擬 6.25(df 5 = 15 個設計點 − 10 個參數)

F = (6.25 / 5) / (5.55 / 5) = 1.13,p = 0.45 R 的寫法:建立「每個設計點一個水準」的因子 pt,配 lm(y ~ pt)(每點一個平均,殘差只剩純誤差),再用 anova(模型, fit_pt) 比較

同樣的檢定也對「只有一階+交互作用」的模型做一次,對照就很清楚:

模型參數數殘差 SS (df)失擬 SS (df)Fp結論
一階+交互作用 y ~ (A+B+C)^271329.93 (13)1324.4 (8)149.051.6×10⁻⁵失擬顯著:曲面是彎的,平面模型不夠 → 需要二階模型
二階 fit21011.81 (10)6.25 (5)1.130.45失擬不顯著:在純誤差的尺度下看不出模型不足 → 可以拿去找駐點

兩個模型的殘差 SS 相差 1329.93 − 11.81 = 1318.12,正好就是上面 ANOVA 表的「二次項」那一塊——一階模型的失擬幾乎全是沒配到的曲率。 這也是 14.2「曲率檢定」的另一種問法:那裡用 4 個中心點比平均,這裡用 6 個中心點比 SS,結論相同。

⚠️ 失擬檢定的三個提醒 ① 方向相反:p 大才好。H₀ 是「模型形狀足夠」,p 小才代表模型有問題。
② 不顯著 ≠ 模型「正確」。p = 0.45 只代表在純誤差(s ≈ 1.05)的尺度下、以 5 個 df 的檢定力看不出不足 (Ch15:不拒絕 H₀ ≠ 證明 H₀)。模型只在實驗範圍內當近似用,所以 14.4 的驗證實驗仍然不能省。
③ 沒有重複點,就沒有純誤差,F 沒有分母,這個檢定做不出來——這就是 CCD 一定要放中心點重複的原因; 而且必須是獨立重做的 run,同一管萃取液重複讀值只量到儀器雜訊,會低估純誤差、讓失擬假顯著。
回扣 Ch04/Ch17:fit2 的 r² = 0.994 很漂亮,但 r² 只量「點貼不貼模型」,不能證明模型形狀適當 (Ch17 17.9 的標準曲線 r² = 0.9967,失擬 p 卻只有 10⁻⁶)。判斷模型夠不夠,要拿失擬和純誤差比,不是看 r²。

14.4 預測區間與驗證實驗

報告最適條件時,單點預測必須附預測區間(呼應 Ch2 的 CI 與 Ch8 的報告規範):

在最適條件下 DPPH = 61.8 %(95% PI:59.2 ~ 64.4) 驗證實驗(照最適條件重做 3 次):62.4、61.7、63.2 → 平均 62.4 落在區間內 → 模型驗證通過
⚡ 判定邏輯與 Ch8 符合性一致 不要期待驗證值「正好等於」預測值——量測本來就有變異。 正確問法是:「實測是否落在預測區間內?」若落到區間外,才需要質疑模型 (缺因子?曲率更複雜?實驗執行偏離設計?)。這與分析方法的符合性判定是同一種思維。

14.5 套件選讀:CRAN 的 DoE 生態系

前四節證明了:因子設計與 RSM 的原理完全在 base R 之內。實務上則用套件省下建矩陣與手算的時間 (先 install.packages(c("rsm", "FrF2", "desirability")),再把腳本的 HAVE_PKGS 改 TRUE):

套件功能教學/實務場景
rsmccd()/bbd() 產生設計、rsm(y ~ SO(...)) 二階配適、steepest() 最陡上升、canonical 分析、一行等高線圖RSM 的標準工具(Lenth 2009, JSS)
FrF22k 部分因子設計、Plackett-Burman pb(12, 5)變因篩選:12 runs 篩 5 個因子(解析度 III/IV)
desirabilityDerringer-Suich 願望函數 dMax()/dMin()/dOverall()多反應同時最佳化:產率↑ 且溶劑↓(食品 RSM 論文標配)
lhs / DiceDesign拉丁超立方、空間填充設計(WSP)電腦實驗、製程模擬;WSP 演算法源自化學計量學
agricolaeCRD/RCBD/裂區+多重比較儲藏試驗、感官品評
AlgDesignD-最適設計 optFederov()受限/混合配方實驗
skprpower 分析+最適設計+Shiny 介面現代互動式教學
📊 把論文變成練習題

⬇ 下載本章 Excel 活頁簿 數據、公式、白話說明都排好了,打開就能算;改黃色儲存格試試看,最後一張工作表會幫你和 R 的答案對照。

Tanaka & Amaliah (2022) 盤點 CRAN「ExperimentalDesign」任務視圖的 105 個套件: 下載量高度集中(近年 Gini 指數 60–69%,前 10 名占 68% 下載)、領域變化慢(主流套件多釋出於 2004–2010)。 他們的資料(cranlogs 下載紀錄)公開可得——讓學生抓下載量畫 Lorenz curve、算 Gini index, 正好是 Ch1 描述統計的進階應用,也是「統計分析軟體生態」的絕佳案例。
# ====== Ch14 DOE & RSM(完整版請下載 ch14_doe_rsm.R)======
# 情境:超音波輔助萃取茶葉多酚,DPPH(%) ← A乙醇濃度 / B溫度 / C時間
# --- Part 1. 2^3 全因子 + 中心點:效應與曲率(base R)---
true_y <- function(A, B, C)                 # 教學模擬的「真實模型」
  60 + 5*A + 3*B + 2*C - 7*A^2 - 5*B^2 - 6*C^2 + 2.5*A*B
fac <- expand.grid(A = c(-1,1), B = c(-1,1), C = c(-1,1))
set.seed(14)
fac$y <- round(true_y(fac$A, fac$B, fac$C) + rnorm(8, 0, 1.2), 1)
ctr <- data.frame(A=0, B=0, C=0, y=round(rnorm(4, 60, 1.2), 1))  # 中心點x4
dat1 <- rbind(fac, ctr)
fit1 <- lm(y ~ (A + B + C)^2, dat1)
round(coef(fit1), 2)
#> A=5.64 B=3.34 C=1.64 A:B=2.04(效應 = 2*係數;A:C、B:C 可忽略)
# 曲率檢定:中心點平均 vs 因子點平均,純誤差來自中心點重複
t_curv <- (mean(ctr$y) - mean(fac$y)) / (sd(ctr$y) * sqrt(1/4 + 1/8))
round(c(mean_fac = mean(fac$y), mean_ctr = mean(ctr$y),
        t = t_curv, p = 2 * pt(-abs(t_curv), 3)), 4)
#> 43.04 vs 60.18, t = 32.5, p = 0.0001 -> 曲面是彎的!需要 RSM

# --- Part 2. 中心複合設計 CCD:二階模型 + 駐點 ---
alpha <- 2^(3/4)                            #> 1.682(k=3 旋轉性設計)
axi <- data.frame(A = c(-alpha, alpha, rep(0, 4)),
                  B = c(0, 0, -alpha, alpha, 0, 0),
                  C = c(0, 0, 0, 0, -alpha, alpha))
ccd <- rbind(fac[, c("A","B","C")], axi,
             data.frame(A=0, B=0, C=0)[rep(1, 6), ])   # 8+6+6 = 20 runs
set.seed(15)
ccd$y <- round(true_y(ccd$A, ccd$B, ccd$C) + rnorm(20, 0, 1.2), 1)
fit2 <- lm(y ~ (A + B + C)^2 + I(A^2) + I(B^2) + I(C^2), ccd)
round(coef(fit2), 2)
#> A^2=-7.08 B^2=-4.71 C^2=-6.04 全負 -> 開口朝下,有極大值
# 駐點 x0 = -0.5 * B^-1 * b(B 對角=平方項,非對角=交互係數/2)
b <- coef(fit2); blin <- b[c("A", "B", "C")]
Bmat <- matrix(c(b["I(A^2)"], b["A:B"]/2, b["A:C"]/2,
                 b["A:B"]/2, b["I(B^2)"], b["B:C"]/2,
                 b["A:C"]/2, b["B:C"]/2, b["I(C^2)"]), 3, byrow = TRUE)
x0 <- as.numeric(-0.5 * solve(Bmat, blin))
eigen(Bmat)$values                          #> -7.82 -5.98 -4.02 全負=極大值
y0 <- as.numeric(b[1] + t(x0) %*% blin + t(x0) %*% Bmat %*% x0)
round(c(A = x0[1], B = x0[2], C = x0[3], DPPH = y0), 2)
#> (0.44, 0.45, 0.13),預測 61.8%
round(c(乙醇 = 50 + 10*x0[1], 溫度 = 50 + 10*x0[2],
        時間 = 22.5 + 7.5*x0[3]), 1)
#> 乙醇 54.4% / 溫度 54.5°C / 超音波 23.5 min

# --- Part 2b. 模型檢驗:ANOVA 表 + 失擬檢定(呼應 Ch16/Ch17)---
aov2 <- anova(fit2)
aov2                                        # 每列 H0:該項係數 = 0
ss <- setNames(aov2[["Sum Sq"]], rownames(aov2))
round(c(一階 = sum(ss[c("A", "B", "C")]),
        二次 = sum(ss[c("I(A^2)", "I(B^2)", "I(C^2)")]),
        交互 = sum(ss[c("A:B", "A:C", "B:C")]),
        殘差 = unname(ss["Residuals"]), 總和 = sum(ss)), 2)
#> 一階 494.40 / 二次 1318.12 / 交互 70.33 / 殘差 11.81 / 總和 1894.66
# 失擬檢定:只有 6 個中心點有重複 -> 純誤差全靠它們 (df = 5)
ccd$pt <- factor(paste(ccd$A, ccd$B, ccd$C))   # 每個設計點一個水準:15 個
fit_pt <- lm(y ~ pt, data = ccd)               # 每點一個平均 -> 殘差 = 純誤差
fit1c  <- lm(y ~ (A + B + C)^2, data = ccd)    # 對照:只有一階+交互作用
round(sd(ccd$y[15:20]), 3)                  #> 1.054 = 中心點的 s(純誤差)
anova(fit1c, fit_pt)   #> F = 149.05, p = 1.6e-05 -> 一階模型失擬顯著(有曲率)
anova(fit2, fit_pt)    #> F = 1.13, p = 0.45 -> 二階模型失擬不顯著,夠用

# --- Part 3. 預測區間與驗證實驗 ---
pred <- predict(fit2, data.frame(A = x0[1], B = x0[2], C = x0[3]),
                interval = "prediction")
round(pred, 1)                              #> 61.8 (59.2 ~ 64.4) 95% PI
set.seed(16)
verify <- round(true_y(x0[1], x0[2], x0[3]) + rnorm(3, 0, 1.2), 1)
#> 62.4 61.7 63.2 -> 平均落在區間內 = 驗證通過(呼應 Ch2/Ch8)

# --- Part 4. 套件選讀(先 install.packages,再改 HAVE_PKGS <- TRUE)---
# HAVE_PKGS <- FALSE
# if (HAVE_PKGS) {
#   library(rsm)                             # Lenth (2009) JSS 32:7
#   fit_rsm <- rsm(y ~ SO(A, B, C), data = ccd)   # 二階配適
#   summary(fit_rsm)$canonical               # 駐點 + canonical 分析
#   steepest(fit_rsm)                        # 最陡上升路徑表
#   contour(fit_rsm, ~ A + B, image = TRUE)  # 一行等高線+填色
#   library(FrF2)                            # Grömping (2014) JSS 56:1
#   FrF2(8, 4)                               # 2^(4-1) 半因子:4因子只用8 run
#   pb(12, 5)                                # Plackett-Burman 篩 5 變因
#   library(desirability)                    # 多反應最佳化
#   d1 <- dMax(40, 65)                       # DPPH 越高越好
#   d2 <- dMin(30, 60)                       # 溶劑用量越少越好
# }
R Console輸出 output
(Intercept)           A           B           C         A:B         A:C 
      48.75        5.64        3.34        1.64        2.04        0.09 
        B:C 
      -0.41 
mean_fac mean_ctr        t        p 
 43.0375  60.1750  32.4776   0.0001 
(Intercept)           A           B           C      I(A^2)      I(B^2) 
      59.94        5.05        2.86        1.58       -7.08       -4.71 
     I(C^2)         A:B         A:C         B:C 
      -6.04        2.88       -0.52        0.50 
[1] -4.024439 -5.975244 -7.822544
    A     B     C  DPPH 
 0.44  0.45  0.13 61.80 
乙醇 溫度 時間 
54.4 54.5 23.5 
Analysis of Variance Table

Response: y
          Df Sum Sq Mean Sq  F value    Pr(>F)    
A          1 348.66  348.66 295.3367 9.402e-09 ***
B          1 111.55  111.55  94.4930 2.059e-06 ***
C          1  34.19   34.19  28.9624 0.0003094 ***
I(A^2)     1 547.39  547.39 463.6737 1.041e-09 ***
I(B^2)     1 245.86  245.86 208.2561 5.067e-08 ***
I(C^2)     1 524.88  524.88 444.6092 1.279e-09 ***
A:B        1  66.13   66.13  56.0123 2.101e-05 ***
A:C        1   2.20    2.20   1.8678 0.2016677    
B:C        1   2.00    2.00   1.6941 0.2222425    
Residuals 10  11.81    1.18                       
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
   一階    二次    交互    殘差    總和 
 494.40 1318.12   70.33   11.81 1894.66 
[1] 1.054
Analysis of Variance Table

Model 1: y ~ (A + B + C)^2
Model 2: y ~ pt
  Res.Df     RSS Df Sum of Sq      F    Pr(>F)    
1     13 1329.93                                  
2      5    5.55  8    1324.4 149.05 1.612e-05 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Analysis of Variance Table

Model 1: y ~ (A + B + C)^2 + I(A^2) + I(B^2) + I(C^2)
Model 2: y ~ pt
  Res.Df     RSS Df Sum of Sq      F Pr(>F)
1     10 11.8054                           
2      5  5.5533  5    6.2521 1.1258 0.4498
   fit  lwr  upr
1 61.8 59.2 64.4
🎯 DOE/RSM 的行動清單 ① 先畫魚骨圖列因子,用 FrF2/Plackett-Burman 篩選,再對 2–3 個關鍵因子上 RSM
② 2 水準設計必加中心點:曲率檢定 + 純誤差(失擬檢定的分母),一石二鳥
③ CCD 的 α 與中心點數影響預測變異的均勻性——旋轉性設計是預設好選擇
④ 找駐點前先做失擬檢定(p 大才好;不顯著 ≠ 模型正確);駐點必看 eigen(B) 符號(極大/極小/鞍點),並換回實際單位交給操作員
⑤ 最適條件報告 = 預測值 + 95% 預測區間 + 驗證實驗,缺一不可
⑥ 想同時最佳化多個反應?上 desirability 願望函數

📊 Excel 也會算:DOE 效應與 RSM

📊 沒有 R 也能動手 DOE 的「效應」其實只是加減平均,Excel 完全算得出來:
任務Excel 公式說明
主效應 A=AVERAGEIF(A欄,1,Y欄)−AVERAGEIF(A欄,−1,Y欄)高水準平均−低水準平均
交互作用 A:B先新增 AB欄=A欄*B欄,再 =AVERAGEIF(AB欄,1,Y欄)−AVERAGEIF(AB欄,−1,Y欄)÷2 得係數
曲率=中心點平均−因子點平均顯著即「彎的」
駐點與二階模型需解線性方程組/矩陣特徵值,Excel 可用 MINVERSE+MMULT 或 Solver 求極值,但繁瑣——本章用 R 的 solve()、eigen() 一步到位。這正是「何時該升級到 R」的最佳示範。

14.6 參考文獻

  1. Lenth, R. V. Response-Surface Methods in R, Using the rsm Package. J. Stat. Software 2009, 32 (7). DOI: 10.18637/jss.v032.i07
  2. Grömping, U. R Package FrF2 for Creating and Analyzing Fractional Factorial 2-Level Designs. J. Stat. Software 2014, 56 (1). DOI: 10.18637/jss.v056.i01
  3. Tanaka, E.; Amaliah, D. Current State and Prospects of R-Packages for the Design of Experiments. 2022. arXiv:2206.07532(CRAN ExperimentalDesign 任務視圖 105 套件的量化總體檢).
  4. Myers, R. H.; Montgomery, D. C.; Anderson-Cook, C. M. Response Surface Methodology: Process and Product Optimization Using Designed Experiments, 4th ed.; Wiley, 2016.(RSM 的聖經:CCD/BBD、canonical 分析、多反應最佳化).
  5. Smith, J. S. Evaluation of Analytical Data. In Nielsen’s Food Analysis, 6th ed.; Ismail, B. P., Nielsen, S. S., Eds.; Springer, 2024; Chapter 4.(本課程數據品管統計之主軸教材).