好的,讓我們來談談如何設計和分析只有通過/失敗兩種結果的實驗。我會在本次課程中一直講解通過/失敗的結果。不過,實際上,這適用於任何只有兩個選項(即二元結果)的情況,也就是說,你只能屬於這兩個選項中的一個。這兩個選項互斥且完備。通過/失敗、通過/不通過、是/否,只要結果有兩個互斥且完備的選項。我們將課程分為四個部分。首先,我們來看一個例子。希望這個例子對你來說並不陌生。
希望這能讓你想起之前處理失敗實驗的經驗。我們會探討一些可能出錯的地方。之後,我們會討論模型,因為一切都取決於我對模型的基本假設,而這些假設會決定我選擇的分析方法和實驗規模。看完PPT後,我們會實際示範如何分析實驗數據,也就是我將要展示的範例數據。
我們將討論 JMP 和 JMP Pro 中可用的一些選項。最後,我們將總結如何確定實驗規模。事實證明,對於合格/不合格實驗,重要的不是實驗運行次數,而是實驗運行的次數,也就是每個實驗條件下的試驗次數。我們將討論如何在 JMP Pro 中進行設置,以及如何設置模擬來確定合適的試驗次數。讓我們來看一個例子:我們正在製作小部件。我們目前的流程對失敗率不太滿意。
我們確定了四個不同的因素,我們認為它們有助於降低這些部件的故障率。這四個因素分別是添加劑、壓縮步驟(其中有三個因素需要改變)、溫度、壓力和保壓時間。問題是,部件是否有缺陷?我們對部件進行處理。如果有缺陷,我們就判定為故障。目前的缺陷率為 15%,我們將以此為基礎來確定實驗規模。
我們的目標是將故障率降低到 5%。但是,如果我們能夠識別出 3% 到 5% 的差異,我們就很滿意了。如果我們能夠偵測到缺陷率下降到,比如說 10%,那就更好了。我們希望能夠檢測到這一點。另外,我只想知道每次運行大約需要 10 分鐘。運行次數並非無限,我每小時大約可以跑 6 次。
好的,假設我們把這個因子輸入到 JMP 中。我們打開一個自訂設計器。我們決定做一個響應曲面設計。我們要增加三個中心點,這就是我們得到的設計。到目前為止一切順利。我們把設計發送給負責運行實驗的操作員,他們回傳了結果。我們有 24 次運行,大約需要 4 個小時來完成這個實驗。我們被告知,這些 0 和 1 分別代表有缺陷的觀測值和無缺陷的觀測值。現在,我要分析數據,我把它輸入到 JMP 中。
現在,我知道這些 0 和 1 不是連續數據,而是分類數據,也就是二元數據。我會按分類資料來處理。我可能對邏輯迴歸略知一二。因為我是在 JMP 中設計這個實驗的,所以響應曲面模型會出現在模型建立對話方塊中。我嘗試擬合分析,但一開始就應該擔心。對於這些參數估計值,我收到一則訊息,提示這些參數估計值不穩定。
假設我和一位對這類實驗比較了解的人討論過這個問題,他們告訴我,問題在於你只針對一組處理條件做了一次試驗。你需要做不只一次試驗才能得到準確的估計。假設我回去和操作員討論這個問題,因為他們不太贊成將我的實驗規模從一次試驗增加到五次。這樣一來,我的實驗將耗時約20小時。但我最終說服了他們,我們確實需要這樣做,於是決定重新進行實驗,現在每組實驗條件都進行五次試驗。
我收到了實驗數據。實驗結果新增了兩列數據。第一列是 Y5,代表失敗次數。第二列是 N,代表一組實驗條件下的試驗次數。這次,我打算不再直接處理計數數據,而是將失敗次數除以總試驗次數,並將結果視為連續數據。這樣,我就得到了給定實驗條件下的失敗比例。
我將把這些數據視為連續數據。這樣處理讓我感覺更自在,因為我更熟悉這種資料建模方式。和上次我們看到的模型一樣,不過這次我不使用邏輯迴歸,而是使用標準的租賃平方。好的,目前為止一切順利。我使用了我最喜歡的建模技術,也許還會用到我最喜歡的模型降維技術,然後得到了最終模型。同樣,目前為止一切順利。接下來我想做的就是最佳化。
我想知道哪些條件能讓誤差率盡可能降低。我使用了效能分析器中的優化器,它告訴我將總時間設定為 45 秒,溫度設定為攝氏 45 度,這樣就能預測誤差率低於零度。我可能會忽略這個預測,因為它非常接近零,我心想,也許它只是非常接近零,而不是低於零。但我知道從技術上講,這是不可能的。誤差率不可能低於零。即使我可能接受這個預測,我也會問自己,這個估計到底有多準確?
我的模型結果到底有多接近零?我是不是建構了一個糟糕的模型?一切都取決於我建立的模型……我所做的假設,當我將數據視為連續數據時,以及當我處理合格/不合格數據時,我應該做出的假設。這是我們典型的模型。等式左邊是響應值,也就是我們的觀測值。在我們的例子中,它是不合格的機率。抱歉,等式左邊是不合格的機率。
在右側,我們看到的是線性模型,也就是我們試圖建立的輸入和輸出之間的關係。這通常是我們考慮的重點。在這種情況下,典型的假設是這種關係是線性的,反應範圍是無限的,殘差服從常態分佈。殘差是指,當我用模型擬合資料後,剩下的部分就是殘差。我假設它們服從常態分佈,這意味著它們關於零對稱,並且具有所有這些優良的性質。這正是問題的一部分。
如果我們處理的是機率,那麼響應曲線實際上看起來更像是S形,而不是線性關係。這種線性關係並不成立。無界響應範圍也不成立,因為我知道既然處理的是機率,就不可能小於零,也不可能大於一。甚至最後一點,常態誤差的假設也不成立。仔細想想,當預測值越來越接近零時,殘差的可用空間就會越來越小。擬合值和零之間的範圍會逐漸縮小。
我不能接受接近零的對稱誤差。同樣,也不能接受隨著誤差值越來越接近一而出現的對稱誤差。這種情況必須有所取捨。我希望這個問題能有一個簡單的解決方法。或許只需要一個簡單的變換。但願如此,或許還可以使用不同的分佈。我們能在 JMP 中實現嗎?答案是,我們有三種不同的選擇。第一種選擇,我們在範例中已經見過,那就是邏輯迴歸。也就是對資料進行 Logit 變換。
在這種情況下,我們並非將機率本身視為反應,而是關注兩種不同反應水準的比值。即失敗機率除以成功機率,然後取其對數。取對數是為了讓這個關係呈現線性。另一種理解方式是,由於只有兩種不同的水平,因此也可以用失敗機率除以(1減去失敗機率)來表示。如果您之前使用過這類模型,並且聽說過賠率和對數賠率,那麼這就是它們的定義。
等式的第一部分定義了賠率。賠率是指一個水平與另一個水平之比。這就是我的賠率,然後我取它的對數。這是一種方法。另一種方法是使用所謂的逆正態分佈分析。使用逆正態分佈分析,我只是使用了不同的變換。在這個例子中,我使用了逆常態分佈。或者,如果我曾經在公式編輯器或使用 JSL 建立過這個公式,那麼它實際上就是常態分位數函數。
現在,JMP 中還有第三種選擇。這需要一些額外的工作,我們不會詳細講解它的用法,但我還是想介紹一下,因為在文獻中經常會看到它,那就是互補對數函數。 JMP 本身並不會直接提供這個函數,我們需要使用類似非線性平台之類的工具來建構它。它可以用最小極值分佈來近似,但我們今天先不討論這個。實際上,我們今天主要關注 JMP 中開箱即用的功能。
現在,我們需要做出第二個重要的假設,那就是,無論我們選擇哪一種變換,無論是 Logit 還是 Probit,我們都要假設誤差服從二項分佈。因為這裡涉及兩個部分。我不僅要進行變換,還要假設一個不同的分佈。正如我之前提到的,前兩個部分可以直接在 JMP 的平台上實現,所以很容易操作。我們將重點關注它們。最後一個部分可以使用非線性平台進行建模。值得一提的是,所有功能都可以在擬合模型平台中找到。在 JMP 中,我提供了三種不同的選項。
我可以使用邏輯回歸,我們在範例中已經見過它了。還有一個叫做廣義線性模型的選項,名義邏輯迴歸和廣義線性模型之間有著強烈的關聯性。對於 JMP Pro 用戶,我們還有廣義回歸,它提供了許多其他選項。現在,還有一個平台可以進行簡單的邏輯迴歸,就是用 X 擬合 Y。但是,由於我們處理的是實驗條件,而且通常有多個因素,所以我就不贅述了。不過,對於簡單的邏輯迴歸來說,用 X 擬合 Y 也是可行的。
在深入探討如何在 JMP 中實現這一點之前,我們需要先討論一下資料組織方式。因為數據組織方式決定了我們擁有哪些數據,以及我們如何組織數據。在「擬合模型」對話方塊中設定資料組織方式非常簡單。我舉一個簡單的例子。假設我們有一個雙因素實驗,即時間和溫度。我們已經完成了全因子實驗,因此我們擁有時間和溫度的所有可能組合。假設我們計劃進行五次試驗,每次試驗處理對應五次試驗。
我所說的「處理」指的是資料表中的每一行,也就是我們獨特的組合集合。我有三種不同的數據設定方式。第一種方式就是直接使用原始資料。資料表中的每一行對應一次試驗。你會注意到原始資料的第一行,它代表的是處理組合一,並給出了時間和溫度。在這個例子中,我的二元反應變數是綠色還是紅色。第一次響應是綠色。第二行同樣是處理組合一,這次回應是紅色,以此類推。
這就是原始格式。這三種方法都可以使用原始格式。現在,我可以進行匯總。有時匯總資料更有意義。匯總資料時,我會同時匯總處理條件和回應等級。你會注意到,在匯總後的資料堆疊中,第一行是處理條件一,包含了所有綠色,以及兩個觀察到綠色的案例。第二行是我的第二個處理組合,有三個綠色的觀測值,依此類推。我剛剛匯總的是我的處理組合和回應水準。
好的,這三種方法都可以使用這種總計堆疊格式。第三種組織方式,對許多人來說可能是最自然的,因為它看起來很像我用於線性模型的組織方式,那就是匯總分割格式。在這種情況下,我再次對處理組合進行了聚合,但只針對其中一個處理水平。你會注意到,在這種情況下,我統計了每次試驗中出現綠色觀測值的次數,以及試驗次數。假設我要使用自訂設計器建立實驗設計(DOE),那麼在輸入資料時,這就是我期望使用的格式。
如果我想使用匯總堆疊格式,實際上需要複製這些運行結果。我會分別複製一份用於綠色數據,一份用於紅色數據,然後稍微調整順序。邏輯迴歸不能使用這種格式,我必須使用其他兩種格式之一。廣義線性模型和廣義迴歸可以使用這種格式。如果您打算使用邏輯回歸,這一點需要注意。好了,現在開始吧。 PPT 就到此為止。接下來,我將開啟 JMP,討論如何利用我們看到的實驗數據來分析每個範例。
好的,讓我們來做邏輯迴歸。我們先從第一個例子──邏輯迴歸開始。我還注意到,這裡有一個匯總後的堆疊,格式也已設定好。其中有一列包含了通過和失敗的次數,也就是計數。這是匯總數據。另一列也包含了計數。好的,非常簡單明了。我們接下來要討論的所有內容都將在「擬合模型」下進行。因為我是用 JMP 設計的,所以它已經包含在我的模型裡了。
這是我設計的響應曲面模型。對話框裡已經預先填好了。但我只想指出,這裡的反應變數是名目變量,也就是合格/不合格。我還需要把計數也放進去,因為我已經匯總了數據。接下來我要選擇目標水平,這取決於我希望輸出結果呈現的方向,是從合格方向還是不合格方向來看。我來設定一下,把它改回合格。現在,我這裡有幾個不同的選項。
它們都是邏輯迴歸。我這裡有一個名目邏輯迴歸模型。如果我對逐步迴歸有所了解,我也可以對我的 Logit 模型,也就是我的邏輯迴歸模型,進行逐步迴歸。這也是一種選擇。好的,所以我們還是先用原來的名目邏輯迴歸模型吧。我要運行我的模型。同樣,我會使用一些資料降維技術或模型降維技術。我可能會手動從模型中刪除一些項目等等。或者我也可以直接使用逐步迴歸。
其實這並不重要,因為我一開始就用了正確的模型。讓我再從模型中移除一個項。好了。假設這就是我們的最終模型,我們對這個模型很滿意。讓我們進入分析器。我向下滾動到分析器,把它放大一點,這樣我們就能看得更清楚。現在,使用這個模型的一個好處是,我的通過和失敗情況是有界的,但機率必須介於 0 和 1 之間。讓我啟用期望函數。現在,它看起來會有點不同,因為它實際上被分成了兩組。
我已經設定了目標通過率和失敗率。我打算把失敗率設為零,因為我不想優化任何失敗。我會提高通過率的期望值,我們來最大化這個期望值。它再次告訴我相同的溫度持續時間。但是,我可以更準確地估算預測的失敗率,或者在這個例子中是預測的通過率。這告訴我,在這些設定下,我的通過率應該在 96% 左右,也就是大約 4% 的失敗率。
當然,它肯定不會低於零,而且比我預期的還要遠離零一些。好的,接下來我們來看廣義線性模型,我們將使用總計分割格式。如果你之前使用過線性模型,那麼這種格式應該很熟悉。這些很可能是我設計實驗中的觀測值。我統計了其中一個水準的觀測值數量,在本例中,我統計了不合格項目的數量,然後是試驗的總次數。
好的,我再次打開“擬合模型”對話框。這裡的設定略有不同。對於這個特定的組織,我有兩個連續變數。第一個變數是每個個體的計數,第二個變數是總計數。我已經預設選擇了廣義線性模型。我選擇了分佈,這裡預設是二項分佈。在這裡,我可以選擇 Logit 型號或 Probit 型號。它們的機率略有不同。我們就選擇 Logit 模型吧。預設情況下,Logit 模型和邏輯迴歸會給出相同的結果。
廣義線性模型的一個優點在於,它允許我放寬之前提到的一些假設。其中一個假設是誤差項服從二項分佈。二項分佈誤差是固定的,無論機率如何變化,誤差值都保持不變。而啟用過度離散模型則意味著,變異性可能比預期略大,或者誤差可能比預期略大。它在一定程度上放寬了二項分佈誤差的假設。
我還可以調整我的估計值以消除潛在的偏差。我只需啟用過度離散度。再次運行我的模型。這種方法的一個缺點是它不具備逐步回歸的能力。你需要手動操作,或者在決定最終使用哪個模型之前,先假設一個模型。同樣,我選擇手動操作。我將找出三個重要因素。你會注意到,如果將其與邏輯回歸進行比較,由於我啟用了過度離散度,我的變異性實際上比估計值略大。
我的 P 值略大。這時我需要問自己,即使這些結果不顯著,我是否真的要相信它們不值得保留在模型中等等。不過好消息是,我可以選擇放寬模型中的這個特定假設。同樣,如果我想啟用分析器並進行最佳化,也是可以的。我擁有同樣的強大功能。在這種情況下,組織結構略有不同,因為我建模的不是過去的失敗,而是機率。這是我們更熟悉的分析器。顯然,在這種情況下,我不想優化它,因為那會最大化失敗次數。我要最小化失敗次數。讓我們開始優化吧。
它再次告訴我,時間是 45 秒,溫度也是 45 秒。它會給我一個略有不同的估計值,儘管它們非常接近。同樣,好處在於我的值是有限制的。無論滑桿移動到哪裡,這些機率值都介於 0 和 1 之間。好的,最後一個例子,我們來談談廣義迴歸。這是 JMP Pro 獨有的功能。它為我提供了一些其他選項。我的起點相同,選擇“擬合模型”,設定也相同,因為我已經有了匯總後的分割資料。
不過,我選擇的是廣義回歸。現在,我要選擇不同的分佈。在這種情況下,我知道我的反應變數是二項分佈,因為它由兩個不同的變數構成。我有一個二項分佈的反應變量,或者我也可以選擇 beta-二項分佈。 Beta-二項分佈類似於我在廣義線性模型中使用過度離散選項的技術。這允許我考慮隨機率值變化的變異數。在這種情況下,我們將使用預設值。接下來,我們運行模型。
如果你之前用過廣義迴歸,你就會知道這個平台提供了所有模型降維技術。在這種情況下,我可能會使用其中的一種技術。讓我確認一下…我要強制執行遺傳假設。我們使用向前逐步回歸。這裡有很多不同的選項。如果你之前沒見過廣義回歸,我這裡有很多不錯的模型降維技術選項。我將使用向前逐步回歸,這是逐步回歸的預設選項。點擊“運行”,這就是我的最終模型。
再次強調,結果非常一致。這三個模型都給出了非常一致的結果。參數估計值會略有不同,機率也會略有不同。好的,現在的問題是,我進行的試驗次數是否夠多,足以讓這個實驗真正有意義?這就引出瞭如何合理安排實驗規模的問題。讓我切換回我的 PowerPoint 投影片,用幾張投影片簡單介紹一下實驗設定。
我們將採用這種方法來確定實驗規模。順便一提,這項功能僅在 JMP Pro 中提供。對於非 JMP Pro 用戶,您或許可以編寫 JSL 腳本來實現,但這會非常繁瑣。 JMP Pro 讓設定變得極為簡單。我們將從自訂設計器開始。我們將使用自訂設計器來建立我們預期的設計。在生成最終表格之前,我們將啟用模擬回應。
它位於左上角的熱點區域。建立資料表後,會出現一個對話框,我們可以在其中更改係數。在下一張投影片中,我將簡要介紹如何設定這些係數。我們將更改這些係數,並將它們更改為我們所需的數值。同樣,下一張投影片中我會更詳細地講解。更改係數後,我們將誤差設定為二項分佈,並選擇樣本大小(即我們希望看到的試驗次數),然後按一下「套用」。
模擬反應選項會產生兩列數據,因為我選擇了二項式誤差,所以一列是模擬試驗次數和試驗成功次數,另一列是試驗總次數。我們將使用這些數據進行整體模擬。接下來我們討論如何設定這些係數,因為這是確定實驗規模的關鍵步驟。這些係數的設定取決於底層模型,也就是我選擇的是Logit模型還是Probit模型。
我的範例將使用我們之前看到的Logit模型資料。這將決定我們如何設定這些值,也就是基線機率。如果你還記得我們之前的例子,我們說過,基線時的失敗率大約是15%。這就是我們的基線。然後我們必須問,我希望在多大的機率下能夠看到差異?再次提醒,我們說過,如果我們能夠看到10%的變化,我們就很滿意了。這就是我們希望在實驗中達到的規模,也就是能夠看到從15%到10%的改善。
接下來,我們將利用之前看到的變換來計算基線值,也就是我們想要偵測的機率為 10% 時的值。我們將計算這兩個值的差值,並將其作為係數。如果我們使用 Logit 模型,基線值就是 15% 除以 1 減去 15%。我們的基線值為 -1.73。如果我們想要觀察 10% 失敗率的變化,同樣,我只需將其代入公式。它是 0.1 除以 1 減去 0.1。這得到 -2.2。因此,係數就是這兩個值之間的差值。我將使用 0.5 作為係數。
PPT演示就到此為止。我們來看看實際操作是怎麼做的。我的實驗數據和實驗因子都已準備就緒。我將使用自訂設計器。我先把因子載進去。我要建造我想要的設計。如果你還記得,我說過,我有一個響應曲面設計。我們新增三個中心點。假設運行24次。我點擊“生成設計”,讓它運行並從演算法中確定最佳設計。在產生最後一個表格之前,我要點擊熱點,然後選擇「模擬回應」。現在,我要建立表格。這張表格會顯示我的設計,我要把係數改為我計算出來的數值。
讓我先重置一下這些參數。我之前說過截距是-1.73。我要把每個係數都設為0.5。我複製一下,這樣就可以貼上了。最後,我要把誤差分佈設為二項分佈。現在,我要點擊「應用」按鈕。請你留意一下那張表格。它會產生我分析要用到的兩列資料。我先退一步。我想設定一下樣本量。我不能忘記。如果你還記得的話,在最初的實驗中,我運行了五次。第二次運行實驗時,我又要重新套用這個設定。現在我已經把正確的方程式都填進去了。
這些列我將用於初始分析和模擬。現在,如果你願意,你實際上可以給這些效應一個正負號。所謂賦予正負號,是指根據你預期看到的關係,將它們設為負值或正值。由於時間關係,我還沒有詳細講解這一點。我有一張投影片,其中詳細講解瞭如何處理這些不同的效應,並判斷它們應該是正值還是負值。這樣做也是可以的。當然,它對結果的影響程度會比效應量本身的大小還要小。但是,在大多數設計中,除非效應是完全正交的,否則這些效應之間都存在相關性,因此效應是正值還是負值可能會對我的統計功效產生一定影響。
現在我已經完成了初始設計,接下來我要進入擬合模型。我要分析這個設計。我需要確保輸入模擬數據和試驗數據。通常情況下,我會使用廣義迴歸,並且再次強調,我會選擇二項分佈,因為它提供了豐富的模型簡化選項。好處在於,模擬資料會直接應用到模型中,我無需編寫任何腳本。我們來運行一下。同樣,我將使用前向選擇法。點擊“運行”按鈕。我向下滾動找到我的前向選擇模型,它就在這裡。
現在我已經獲得了單一觀測值,接下來我可以右鍵單擊。通常我會將滑鼠停留在某個機率值上。右鍵單擊後,在最底部會有一個“模擬”選項。我必須確保在這兩個選項中都選中了包含模擬成功次數的公式列(預設應該是選取的)。然後我會指定要進行的樣本試驗次數。現在,在點擊「開始」後,每次模擬迭代都會重新計算該公式列,並根據我的底層模型給出一組新的試驗次數。
我會運行 2500 次,然後將數據匯總成一份漂亮的報告。現在,不用浪費時間看著它不停地運行,速度很快。通常只需要半分鐘,最多一分鐘。我已經運行過結果了,這就是結果的樣子。這裡是我 2500 次運行的結果,不包括第一次初始運行。我還添加了一些額外的函數和公式,我很樂意分享。但產生這份報告時會加入這兩個腳本。功效分析只是分佈的一個子集。我們來看看功效分析。
這樣做可以讓我獲得大量數據,並了解所有運行結果中 P 值的分佈。如果你還記得本例所使用的模型,所有結果都具有統計意義。這告訴我,這是我透過模擬觀察到的 P 值分佈情況,我的預測值大約是萬分之一,這很好。我計算出了預測 P 值的置信區間。實際上,我認為這並非真正的置信區間,因為我們使用的是貝葉斯方法。
這更像是一個可信區間。或許應該說是一個信賴區間。但它的確會限定在那個機率值所在的範圍內。然而,一個有趣且重要的訊息是我拒絕原假設(在本例中為零假設)的次數。這告訴我,如果我選擇顯著水準 α = 0.01,即使我知道實際上我將其建模為真實效應,我也會大約有一半的機率拒絕原假設。如果我將顯著水準提高到 0.05,那麼我大約有四分之三的機率拒絕原假設,以此類推。
我利用這些資訊來問自己:我的實驗規模是否合適?我能否檢測到主效應、主效應和雙因素交互作用,以及模型中的任何其他效應?檢測次數和檢測比例是否足夠,才能讓我對選擇的實驗次數感到滿意?在這種情況下,我通常的做法是,不僅依賴一些內建報告,還會統計例如正確顯著效應的數量。
我會設定一個閾值,然後計算正確答案的數量。同樣,所有這些都會和材料一起打包,並附上一些解釋以及我構建所有這些模型的公式。再次強調,我需要使用我自己對風險的定義來確定,我是否捕捉到了足夠的顯著效應,從而使該實驗值得運行5次、10次或20次等等。好了,這就是我想在JMP中向您展示的內容。讓我們回到總結部分。
總而言之,無論我使用哪種技術,在對這些數據進行建模時,我都會使用「擬合模型」平台。我可以使用邏輯迴歸,在這種情況下,我可以選擇使用邏輯迴歸,也可以選擇在背景使用邏輯迴歸的逐步迴歸。我還可以設定廣義線性模型,預設情況下,它會給出與邏輯回歸相同的輸出,但額外允許我放寬誤差假設併校正偏差。此外,如果我安裝了 JMP Pro,還可以使用廣義迴歸,它不僅能夠實現邏輯迴歸或廣義線性模型的功能,而且還允許我進行一些模型生成操作。
在確定實驗規模時,我將使用自訂設計器建立實驗,然後使用 JMP 的內建模擬功能來執行我的自助法模擬實驗和自助法模擬分析。以上就是我想講的內容。補充幻燈片中會有更多信息,很遺憾我沒有時間一一講解,但我希望您喜歡以上內容,並希望它對您未來的工作有所幫助。非常感謝。