大家好,我叫戴爾‧休曼 (Dale Human),是通用電氣醫療集團 (GE Healthcare) 的工程師,工作地點在威斯康辛州密爾瓦基市。今天,我將和大家簡單聊聊如何建立模型,如何使用自助法 (bootstrap) 來評估預期結果,以及模型預測結果的偏差。如果想更深入了解模型,也可以使用蒙特卡羅模擬,根據輸入變數的變化來進一步評估系統預期偏差。內容很多,讓我們開始吧。首先,我先簡單介紹一下我的興趣所在。
這一切都歸結於新產品開發或研發等情況下,當你的樣本量很小時,你只能進行少量測試,並試圖根據這些測試或測量結果來決定下一步的計劃或系統可能的表現。在這種情況下,像是引導法和蒙特卡羅模擬這樣的工具就非常適用。讓我們來看看如何在 JMP 中實現這些操作。
我們先從一個相當簡單的系統開始。假設你有一個夾緊系統,這裡有一把螺絲刀,用來擰緊某個組件。我們在組件中安裝了一個測力感測器,用來測量在擰緊螺絲時組件所受的力。這是一個非常典型的機械應用。我們想知道,如果我測量螺絲上的扭矩,並由此得到測得的力,我們能否建立起扭矩與力之間的關係,並嘗試模擬該系統未來的運行情況?
我這裡有一個示例數據表,我會在這裡打開它。您可以看到,我們做了一些測試,在這個例子中是九次測試,我們對螺桿驅動器施加了一定的扭矩,並測量了力。我們希望了解力和施加的扭矩之間的關係。讓我們建立一個模型,因為我們只有一個反應變數和一個輸入變數(扭矩),所以我們可以使用「擬合 Y 對 X」功能。
我將進入“分析”選單,然後選擇“Y 對 X 擬合”。我們可以將測量力作為反應變量,將施加的扭矩作為輸入變量輸入對話框。 JMP 提示說,由於只有兩個變量,它將進行雙變量分析。我點選「確定」。和 JMP 一樣,我們先得到一個圖表,一個資料散點圖。我們可以直觀地觀察施加的扭矩和測量力之間的關係。正如您在這裡看到的,它們之間似乎存在某種關係。隨著扭矩的增加,測量力也趨於增加。這很合理。
看起來隨著扭力越來越大,這裡似乎開始出現一個平台期。在這個系統中,你可以想像一下,當扭矩達到一定程度時,組件會被完全夾緊,因此繼續施加更大的扭矩從力學角度來看並沒有什麼幫助,但我們確實看到了這種關係。我們來嘗試建立一個模型。我將選擇這裡的紅色三角形。你可以使用「擬合直線」來擬合線性關係,但如果我認為存在這種平台期效應,我將使用「特殊擬合」對話框,它允許我選擇 X 軸和 Y 軸的一些變換。
在這種情況下,我將選擇 X 的自然對數,這有助於捕捉該系統可能存在平台效應的趨勢,所以我選擇自然對數。我還關閉了中心多項式選項。您可以保留它,它不會改變任何結果,只是看待方程式的另一種方式。目前,我已將其關閉。我只需點擊“確定”。我們可以看到,這是我們的最佳擬合線。這本質上是使用分析中施加扭矩的自然對數進行最小二乘迴歸所得到的,這是我們的最佳擬合曲線。它似乎與我們的數據吻合得很好。
很好。我們已經有了根據分析結果建立的方程,所以我們可以看到這一點。如果您之前做過迴歸分析,您可能已經看過 R 平方值。我們這裡的 R 平方值看起來非常好,都遠高於 90%。調整後的 R 平方值和原始 R 平方值非常接近。在這種情況下,只有一個 X 變量,這也在意料之中。
如果你看一下均方根誤差(RMSE),它實際上類似於模型的標準差。它可能有點大,可能不太容易看出來。我接下來會查看我們應用的擬合結果,並透過點擊「置信區間」選項來啟用該擬合的置信區間。我們可以看到模型的不確定性。例如,假設我施加了 100 牛頓米的扭矩,那麼我測量的平均力的預期變化範圍大約在 1000 牛頓米左右。這就是信賴區間的寬度。
這個數值有點大。您可能在想,只有九個數據點,所以這個模型存在很大的不確定性,這很可能是事實。我們下面還有參數估計分析,其中顯示了模型參數的值,包括方程式中的斜率和截距值。此外,您還可以看到這些值的標準誤差,它量化了這些值的不確定性。
您可以看到,截距的標準誤差約為 2000 牛頓,斜率項的不確定度約為每牛頓 500 牛頓米。我們正在嘗試理解,未來是否真的會預期會出現如此大的波動。如果我們收集越來越多的數據,不確定度真的會這麼大嗎?
鑑於我們在建構這個模型時僅使用了很小的樣本(本例中只有九個數據點),我們該如何評估預期結果的真實性?或者說,由於樣本量小,我們是否高估了模型的誤差?一種方法是使用一種叫做自助法(Bootstrap)的技術。
我們來談談自助法(Bootstrap)。自助法其實是一種「簡單」的技術,它透過對原始資料進行多次重採樣,來嘗試重新估計待計算參數的值。在這個例子中,我們會多次重新估計模型的斜率和截距,以便更好地了解該系統未來可能存在的真正不確定性。這就是自助法的基本想法。如圖所示,我們以三個數據點作為樣本。
自助法(bootstrapping)的作用是從原始資料集中隨機抽取一個樣本。這裡,我們在這個方框裡放了一個隨機樣本,它包含三個資料點。不過,這次我是隨機選出的,剛好抽了第3行兩次,第1行一次。第2行沒有出現。這個過程需要重複很多次,成百上千次。每次抽取新樣本後,都需要重新計算系統中感興趣的參數。在本例中,我們最終需要查看模型的斜率和截距值。
無論你感興趣的參數是什麼,你都要對每個不同的樣本計算該參數,並且重複這個過程很多很多次,以幫助理解預期的變化範圍,即使我的數據集很小。這就是自助法的基本想法。它是一種常用的技術。它的優點在於它是非參數的。它不依賴常態性或其他類似的假設,因此適用於許多不同的情況。
當你的樣本量很小時,就可以使用這個方法。之所以會想到它,是因為你試圖估計模型或分析計算中的誤差。通常,你會使用方差之類的指標來觀察系統的變異性。記住,變異數的計算方法是除以 n 或 n 減 1。如果樣本量很小,那麼除數通常也很小,因此你傾向於高估預期的變異性,但如果繼續收集數據,這種預期可能並不現實。自助法(Bootstrap)就是一種嘗試在這種情況下估計更實際變異性的方法。
這就是自舉法的基本概念。舉個簡單的例子,在我們回到之前建立的模型之前,我們可以先看看這裡的數值分佈。我們同樣有九個測量力值。讓我們先對它們進行分佈分析。我將進入「分析分佈」選單,在這個例子中,我們先只查看力的分佈。讓我們來看看數值分佈。
我這裡有數據。你可以看到一個總計統計表,我暫時隱藏了分位數。這不是我關注的重點,但如果你看一下,你會發現這個例子中平均值約為 7100 牛頓,標準差約為 2000 牛頓。標準差相當大,因為我們的資料樣本量很小。這是由於樣本量 n 較小造成的。
我們能否確定這是否真的是我們預期未來整體變異的趨勢?考慮到我們只測量了總體中的九個樣本,我們可以嘗試使用自助法來判斷這是否是總體變異的合理預期。具體該如何操作呢? JMP 軟體讓這一切變得非常簡單。我們已經有了包含目標參數的表格,我們感興趣的是平均值和標準差。這兩個值都在表格中,所以我只需右鍵單擊該表格。你會看到之前可能見過的所有選單項,但在最底部是「自助法」。
這樣可以讓你多次對資料進行重採樣。對於每個單獨的樣本,它都會重新計算所有統計數據。然後你可以查看這些值的分佈,以便更好地了解你的系統在樣本量越來越大的情況下可能會如何運作。預設的樣本數為 2500,因此 JMP 會查看我測量的力值,並從這九個初始值中隨機抽取九個。同樣,有時它會多次抽取同一個值,就像我們在圖中看到的那樣。
你不可能每次都得到完全相同的九個數據點。這就是自助法的優勢。預設情況下,它會運行 2500 次。我點擊“確定”,讓它運行。這只需要幾秒鐘。這是一個非常簡單的計算。但請注意,如果你的模型非常複雜,那麼運行大量資料顯然會花費一些時間。如果你要計算的模型計算量非常大,就需要更長時間。在這個例子中,我們只是計算平均值和標準差。這很簡單。現在,JMP 建立了一個新的資料表。
你會看到它有 2501 行。因為它對我們的原始資料進行了 2500 次重採樣。第一行就是原始資料本身的值,也就是第 0 行。然後所有其他行都是針對此表中每個統計量的重採樣計算值。如果我把這些值單獨列出來,由於所有這些值都在同一個表中,JMP 會嘗試對每個統計量進行引導抽樣。目前我們並不關心其他所有值。我們真正想關注的是平均值,因為我真正想了解的是系統平均效能(在本例中為平均力)的預期變化範圍。
我將重點放在均值。 JMP 會自動為表格中的每個變數建立分佈分析。在這裡,我們可以運行腳本,它會打開所有這些不同變數的分析。現在,我們真正想關注的是平均值。我將按住 Ctrl 鍵並隱藏所有這些分佈分析。然後只顯示平均值,這樣螢幕會更清晰,方便大家查看。我將把它拖曳到分佈分析旁邊。
我打算再隱藏分位數。我並不關注分位數。也許你會對分位數感興趣,但讓我們來看看這裡計算出的值。這裡有2500個不同的平均值,它們是透過對這個樣本進行重採樣而得到的。我看平均值大約是7100牛頓,非常接近我們最初的值。然而,標準差卻小得多。我們最初的標準差大約是2100牛頓。
現在數值只有大約 670 牛頓,這是因為我們從這個龐大的總體中進行了多次重採樣。我們對標準差的估計可能越來越接近預期值,也就是這個總體中真實的變異範圍。這裡我們誇大了變異範圍,是因為樣本數較小。我們是從同一個總體重採樣的。所有這些計算中使用的所有數據點都來自與這九個數據點相同的總體,因為它們都取自相同的數據。
這或許更能真實反映我們預期在這個群體中看到的變異情況。這就是自助法的威力。現在你可能會想,如果我抽取一個更大的自助樣本,我的標準差會繼續縮小嗎?我們來試試。我回到原始數據。在這個表格中右鍵單擊,選擇“自助法”。這次我們抽取 10,000 個自助樣本。我點選「確定」。
運行還需要幾秒鐘,所以我們讓它運行。可能不只幾秒鐘。現在我們有一個包含 10,000 行的資料表,同樣,每一行都是同一總體的不同樣本。我們可以查看這個表中的分佈。我把它打開。我仍然只關注均值。我關閉所有分佈窗口,只打開均值窗口。我們把它放在其他視窗旁邊。抱歉,我稍微調整一下視窗位置,這樣我們就可以把它們放在一起看了。
現在我們有了一個包含 10,000 個數值的自助抽樣樣本。我們可以看到平均值仍然在 7100 左右,但標準差仍然在 670 左右。這其實並不奇怪,因為所有這些值都是從同一個總體計算出來的。這個總體有一定的平均數、一定的變異性和一定的標準差。我們不應該預期這些數值會發生變化,因為這兩項分析的樣本數都非常大。
這與先前的研究不同,因為這次的樣本數非常少。但這確實能讓你看到未來的發展趨勢。你可能會預期變異範圍更接近 670 牛頓,而不是 2000 牛頓。當然,圖表底部也計算了一些置信區間,不同的置信水準可以讓你了解整體預期變異範圍。
你會再次注意到,自助法樣本的數值彼此非常接近,而且比我們小樣本平均值的原始信賴區間略窄。這是因為我們使用了可能更符合實際的標準差估計值。這就是自助法的強大之處。它能讓你了解系統中的變異情況,即使你最初只有一小份資料樣本。好了,現在我們已經基本了解了自助法的作用,我將關閉這些表格,以免它們妨礙我們繼續討論。
回到我們剛才提到的日誌,我已經講解過如何進行自助法,並且已經示範過了。你的標準差和平均值實際上應該不會改變,因為它們代表了最初提取資料的總體。這就是自助法的原理。讓我們回到模型。我打開那部分,我們可以用同樣的方法來處理這個模型。在這個模型中,我們計算了最小平方法迴歸模型的斜率和截距參數的估計值。問題是,我真的認為這些估計值的誤差應該這麼大嗎?
我們可以像之前計算這些力的平均值一樣,對這些估計值進行自助法抽樣。同樣,你只需要右鍵單擊表格中的“估計值”列,選擇“自助法”,然後選擇抽樣次數。這次我選擇 2500,這樣速度會快一些。計算需要幾秒鐘。現在我們又得到了一個包含 2500 個值的表格。接下來,我將查看 JMP 產生的分佈分析。由於我們只有兩個估計值(一個用於截距,一個用於斜率),因此在該分析中只有兩個值。
我再次按住 Ctrl 鍵,同時關閉這兩個窗口,即可隱藏分位數。這裡截距的標準誤差約為 2000 牛頓,斜率的標準誤差約為 450 牛頓。那麼,我們從自助法中得到了什麼結果呢?如果我們查看自助樣本的標準差,它仍然約為 2000,在本例中為 2200。類似地,斜率自助法的標準差約為 475,略有不同,但接近最小平方法迴歸分析所得的原始值 452。你可能會想,等等,自助法並沒有起到作用,你說得對。在這種情況下,自助法並沒有起到太大作用。
這其實是意料之中的,因為如果你還記得最小平方法迴歸,它的目的是選擇能夠最小化模型變異數的擬合優度。斜率和截距的估計值之所以被選中,正是因為它們能夠最小化模型誤差。對於最小平方法迴歸來說,自助法的作用並不大。事實證明確實如此。我只是想用這個例子來說明如何將自助法應用於模型。
現在,如果您使用其他無法提供誤差估計的建模技術,例如神經網路分析或主成分分析,而分析結果無法直接告訴您預期變異是多少,標準誤差是多少,那麼您可以使用自助法來幫助了解模型中的誤差。但在這裡,我要向您展示的是,自助法的作用並不大。它通常與最小二乘分析的結果一致,因為最小二乘分析旨在最小化這種變異。
這個概念適用於任何建模技術。再次強調,因為自助法並非參數方法,它不會對資料的分佈做任何假設。因此,它可以應用於你可能使用的所有不同類型的建模技術。例如,你可以使用建模(或更準確地說是自助法)來幫助理解最小二乘迴歸的誤差。但這並非特別有用。如果你只是想了解平均值的變化,就像我們在這裡處理力的情況一樣,那麼你可以使用自助法來更真實地了解未來的變化趨勢,甚至在進行任何更詳細的建模之前就可以這樣做。你也可以這樣使用它。
這就是自助法的想法。我已經用最簡單的例子展示了它,即觀察均值的預期變異。此外,你也可以用它來理解模型估計的誤差。它不僅適用於最小平方法,也適用於其他一些方法。在這方面,它非常有用。
另一種評估系統變化影響的方法是蒙特卡羅模擬,JMP 也提供了非常簡單的蒙特卡羅模擬功能,它是建模平台的一部分。我們來看看蒙特卡羅模擬。從根本上講,蒙特卡羅模擬的作用是什麼?假設你有一個模型,或者更確切地說,你有一個方程式。這裡,我們根據分析結果建立了一個模型方程,這裡使用的是同一個模型。蒙特卡羅模擬的作用是,將變化注入到該模型的輸入中,並評估這種變化對輸出因子(即反應變數)的影響。
你的做法是假設輸入有某種變化。例如,我假設施加的扭矩服從常態分佈,中心值是一個感興趣的值,標準差為某個值。現在,我從這個分佈中隨機抽取大量值,然後將這些值代入方程式併計算輸出,以便了解輸入的變化情況。以下是我預期輸出的結果。這就是蒙特卡羅模擬的基本原理。
同樣,通常需要對大量樣本進行此操作,以幫助您了解回應中預期會出現哪些變化。 JMP 還允許您在輸出中註入其他類型的變化。這裡我就不贅述了,您只需知道這是一個可用的選項。我們如何使用 JMP 進行蒙特卡羅模擬呢?非常簡單。首先,您需要建立一個模型。在本例中,我們建構了一個最小平方法模型。接下來,我將進入模型擬合介面並啟用分析器。這就是您的起點。如果您之前看過分析器,它只是根據您先前的分析結果確定的模型方程式的圖形化表示,您可以調整輸入值 X,並觀察 Y 的變化。
您也可以透過性能分析器進行蒙特卡羅模擬。點選效能分析器旁的紅色三角形,即可啟用模擬器。這就是蒙特卡羅模擬器。它允許您指定 X 值的變化方式,並顯示響應變數在您進行此操作時將發生的變化。在這裡,我可以從下拉式選單中選擇 X 的變化方式,在本例中,X 代表施加的扭矩。我選擇“隨機”。選擇“隨機”後,您可以指定要用於該輸入變化的分佈。
例如,假設我們希望將該系統的扭力設定為 125 牛頓米,這是我們的典型扭力值。您已經使用即將使用的扭矩扳手進行了一些快速測量,並確定如果我將其編程為 125 牛頓米,則扭矩通常為 125 牛頓米,但標準偏差約為 3 牛頓米。您可以輸入您預期值的平均值和標準差。
然後你只需要點擊這裡的「類比」按鈕,JMP 就會計算一個很大的數值,這個數值就是你在這個框框裡輸入的數值。在這個例子中,它計算了 10,000 個值。 JMP 從平均值為 125、標準差為 3 的常態分佈中隨機抽取了 10,000 個不同的值。它使用先前確定的參數估計值,將這 10,000 個值代入你的模型方程,並計算所有這些變數的反應值。這個分佈圖展示了結果的樣子。
在這個視圖中,圖表看起來有點折疊,只是因為圖表的比例尺比較窄,您可以根據需要放大。您也可以讓 JMP 將這些值顯示在下面的表格中,這裡是「模擬到表格」選項。我將打開它並單擊“生成表格”按鈕。這裡顯示的是從常態分佈中隨機選擇的 10,000 個不同的施加扭矩值。這些值被代入公式,然後用於計算力。
JMP 已經為您產生了一份分佈分析報告,並保存在這裡。現在我打開它。這裡顯示的是測量力的分佈。這裡展示的是更高解析度的分佈圖,以便您更清楚地了解系統中的運作情況。這份測量力分佈圖展示了根據預設分佈,輸入扭力變化對系統反應的影響。
現在,您可以進行各種不同的分析,例如製程能力分析、公差區間分析等等。所有這些分析都可以在此時進行,以幫助您了解在輸入變數中存在這種變化的情況下,系統響應會如何變化。具體選擇哪種分析方法取決於您自己。希望您可以使用一些歷史資料。您已經查看了用於該系統的扭力扳手,並且已經注意到,扭力確實會根據這種分佈而變化,因此您可以選擇合適的分佈和參數。
你可能擁有領域專業知識,能夠思考系統中的運作機制,並得出結論:這些值應該服從均勻分佈;當然,你也可以進行猜測,因為這是一個模型。如果你不確定,可以先假設服從某種常態分佈,看看會發生什麼事。然後,你可以進行許多你可能感興趣的假設分析。這就是蒙特卡羅模擬。在 JMP 中操作非常簡單。蒙特卡羅模擬和自舉法都允許你評估系統中的變異性:自舉法基於小樣本,而蒙特卡羅模擬則基於已知的輸入變異性來評估輸出的變化。
我們今天討論了幾個不同的面向。再次強調,自助法是一種可以用來了解系統變異情況的技術,即使樣本量很少。而蒙特卡羅分析則允許你將變異注入模型的輸入,從而了解這會對模型的輸出產生什麼影響。這些都是非常常用、非常流行且功能強大的技術。一旦你建立了一個模型,這些工具就非常實用。這就是我今天要講的內容。非常感謝。