通常需要將隨時間變化的曲線分類到不同的類別。例如,細胞生長曲線可能具有不同的形狀類型(例如,雙相生長),這些形狀類型表徵了細胞的生長行為。這些不同的曲線類型使得難以自動、準確地從曲線中提取表徵參數(例如,生長起始延遲、生長速率、最終生長水平等)。
大家好,我叫傑瑞‧菲什 (Jerry Fish)。歡迎參加本次講座,我和我的同事凱爾·普羅布斯特 (Kyle Probst) 將探討如何使用函數資料瀏覽器 (Functional Data Explorer) 對曲線形狀進行分類。我目前在 JMP 工作,是一名 JMP 員工,至今已有 7 年,主要負責為中西部地區的客戶提供支援。如果您恰好身處中西部地區,歡迎隨時聯繫我,我非常樂意為您提供任何 JMP 方面的協助。
這就是我們正在討論的典型曲線特徵。今天,Kyle 會對此進行更詳細的解釋。我們討論的是細胞生長曲線。生長曲線指的是,當你提供細胞某些營養物質時,例如,你感興趣的是這些特定細胞的生長速度。你可能會得到一條類似這樣的曲線:一開始細胞沒有生長。突然,細胞開始生長,並在末端達到平台期。這可能是一條典型的曲線。 Kyle 將簡要介紹一些我們感興趣的關鍵參數。
問題在於我們需要對不同類型的曲線進行分類。左上角這條曲線就是我剛才展示的。我們稱之為單相曲線。它只有一個生長模式,之後就能維持下去,所以細胞會繼續存活。右上角這條曲線也是單相曲線。它只有一個轉變,但最後細胞會逐漸死亡。也許這一點很重要,或者在你的業務中,這可能是你感興趣的關鍵特徵。
我們稱這種生長模式為雙相生長,因為它有兩個生長階段。第一個階段生長趨於平穩,然後是第二個生長階段。最後,在還有一些情況下植物完全停止生長,我們當然也會對這種情況感興趣。
現在,這些測試可能包含數百個測試結果,我們不想逐一篩選。如果我們知道每條曲線的具體情況,例如,這條曲線就可以用 JMP 中的「擬合曲線」功能進行建模。這條曲線和這條曲線(雙相生長曲線)可能更適合在非線性平台上建模,因為在那裡我們可以更靈活地控製曲線的形狀。我們不想每次都查看每條曲線來決定要應用哪種模型。如果可以的話,我們希望實現這個系統的自動化。
接下來,我把麥克風交給凱爾,讓他自我介紹一下,並簡單談談這條曲線,以及它為何如此重要,還有我們正在做的事情。凱爾?
謝謝傑瑞。你的介紹很棒。正如傑瑞所提到的,我們在凱瑞製藥的細胞營養業務部門做了很多工作,主要評估微生物的生長情況。我先簡單介紹一下自己。我叫凱爾‧普羅布斯特,是凱瑞製藥的高級科學家,在位於威斯康辛州貝洛伊特的北美總部工作。我負責支持我們公司的細胞營養業務,我們為微生物、哺乳動物細胞和其他細胞提供蛋白質水解物和酵母萃取物等營養物質,其中許多都用於生物製藥產業生產救命藥物。
傑瑞在這裡使用的數據來自我們實驗室常用的一種特定檢測方法。這種方法屬於高通量篩選,我們使用微孔板讀數儀來測量微生物的生長曲線,就像他在這裡展示的那樣。我們通常使用600奈米波長下的光密度值(OD600)來測量微生物的生長情況,它與微生物的生長密切相關。測量濁度非常簡單,就是測量濁度,它是業界用來量化微生物生長的標準指標。
我們利用這些生長曲線,根據某些關鍵績效指標(KPI)來比較和選擇最佳原料。我們感興趣的關鍵KPI包括生長速率、滯後期、最終細胞密度等等。 Jerry正在努力實現從這些生長曲線中自動提取這些量化值,從而避免我們逐一分析,並最終獲得良好的擬合效果。
這是我們在使用一些標準方法進行這項工作時遇到的最大挑戰之一。你不一定總是能得到非常理想的擬合結果,這取決於曲線的形狀。遺憾的是,並非所有曲線都像我們示範中的曲線一樣是完美的單相曲線。這就是為什麼傑瑞一直有興趣幫助我們完成這方面的工作。
總之,你現在看到的這條曲線,我會解釋一下這些參數的意義。我們通常關注的關鍵績效指標(KPI)包括滯後期。滯後期是指細胞在開始生長前處於休眠狀態的時間。理解這一點很重要。拐點時間是指細胞達到最大生長速率所需的時間。拐點處的斜率代表最大生長速率。這是我們通常測量的另一個重要參數。最終漸近線代表最終細胞密度,也就是達到的細胞密度,它與所有微生物的生長方式密切相關。
在進行這些工作之前,我們實際上需要將原始數據處理成一種格式,以便創建這些曲線,從而方便我們進行比較,無論是通過視覺比較,還是像傑瑞在這裡向我們展示的那樣,對這些曲線進行量化。我們之前寫過一篇論文,我在那篇論文中介紹了我們如何處理原始數據,以及如何使用JMP的一些實用工具來完成這項工作。
即使像我這樣腳本編寫新手,也能透過一些方法節省大量時間和精力。這些方法就叫做「JMP 插件建構器:自動化微生物生長特性分析」。一定要去看看。
傑瑞,我把麥克風交還給你。我覺得我已經說得夠多了。可能我已經說得比你多了。
那很完美。
謝謝你,傑瑞。
太好了,凱爾。謝謝你提供的背景資訊。我建議你查閱凱爾作為第一作者發表的那篇論文,了解我們對這種格式的數據做了哪些預處理,比如把所有時間點都向上調整,讓它們都從0開始,以及把數據截斷在30小時,這個截斷點是我們隨意選擇的。謝謝你,凱爾。
Kyle 和 Kerry 很貼心地提供了大約 330 條曲線供我們分析。我仔細查看並嘗試用肉眼對這些曲線進行分類,看看它們是如何分組的。我把上面提到的所有曲線都稱為“單相持續型”,它們持續上升並達到某個漸近值。而那些曲線上升到某個峰值後便開始衰減,有些衰減得很厲害,有些則不太厲害,有些數據還會出現一些波動,我把它們都歸類為「單相衰減型」。雖然這些曲線的行為有些奇怪,但我還是把它們都歸類為「單相衰減型」。
我把這些歸類為雙相生長曲線。所有曲線都包含一個生長階段、一條漸近線,然後是另一個生長階段。也許這種變化很細微,也許很明顯,但這就是它們的特徵。當然,這裡還有一些沒有生長的曲線。
我們來看看數據,看看能否從中了解一些信息,以及如何利用 FDE(功能數據瀏覽器)來幫助我們。 FDE 是 JMP Pro 的功能。接下來我們要討論的工具主要都是 JMP Pro 的工具。資料本身,這裡有一列是測試編號,例如測試編號 1_1。這是測試時間。如果我們向下捲動到 30 小時,就會看到 OD600 欄位中的資料。我個人認為,第一個資料集沒有成長。
情況就是這樣。有測試 1_1,然後是 1_2,依此類推。這個資料集大約有 40,000 行,包含了大約 330 個不同的測試。
現在,這裡還有一個名為「驗證」的欄位。在 JMP Pro 中,您可以選擇驗證模型。在 FDE 中,「驗證」的含義與 JMP 在其他平台上的含義略有不同。我們稍後會詳細介紹。但我想快速向您展示如何設定此“驗證”列。它位於「分析」、「預測建模」和「建立驗證列」下。
首先,我們需要告訴 JMP,我們需要設定分組列。對於所有 1_1 數據,我們希望將其分組為訓練集或驗證集。我們不希望在同一個測試中同時包含訓練集和驗證集。我們可以將測試編號設定為分組列來實現這一點。然後,我還希望確保在訓練集和驗證集中,無生長曲線、單相死亡曲線、單相持續生長曲線和雙相生長曲線的數量或百分比相等。這叫做分層。如果我把資料類型輸入到分層設定中,就完成了所有需要做的。
然後我在這裡進行指定。我選擇將 60% 的運行結果用於訓練集,剩餘的 40% 用於驗證集。然後我們只需運行“開始”,就能得到這一列,其中大約 60% 的試驗結果用於訓練,40% 用於驗證。
現在,我要刪除我剛剛建立的那一列。它將隨機地將訓練集和驗證集分配給不同的運行,而我想確保我使用的運行與我在隨附論文中展示的分析所使用的運行完全一致。我會刪除我剛剛創建的那一列,但我就是這樣得到這一列的。
現在我們準備好進入功能資料探索模式。依序點選「分析」、「專業化」、「FDE」。接下來,我們需要向 JMP 說明不同列的含義。 “測試編號”是 ID。 “時間”是 X 變數。 「OD」(細胞生長測量值)是 Y 輸出。我將把“類型”作為補充變數保留下來。它不會在本次分析中使用,我會在後續步驟中再添加。現在我只是把它保留下來。然後,我在這裡添加驗證,最後點擊“確定”。
這是「函數資料瀏覽器」視窗。頂部的圖表只是所有曲線的疊加。如果我展開它,下方會顯示所有單獨的曲線。現在,在「函數資料瀏覽器」中,我們首先需要做的就是將函數擬合到每個資料曲線上。這在紅色熱點模型下方完成。然後,我們可以從以下不同的選項中進行選擇:B樣條、P樣條、傅立葉變換和小波轉換。
我打算用B樣條函數。它們比較容易理解。不過,用P樣條函數也完全可以。如果我這裡的每個訊號都有重複的特徵,那麼傅立葉基函數就適用。小波函數非常流行,而且越來越受歡迎,可以用來擬合這類數據,甚至是具有尖峰的頻譜數據。小波函數在這方面表現優異。但我今天還是決定用B樣條函數。
JMP 將執行兩項操作。它會對所有資料進行排序,並為我選擇兩個參數。其中一個參數是階數。階數可以是階躍函數,也可以是一系列分段函數:線性段、二次段或三次段,這些分段函數用於將訊號分解成樣條曲線。
現在,樣條曲線擬合在這些被稱為節點的點之間。 JMP 也會確定節點的數量和位置,以便更好地擬合下面的所有函數。在本例中,JMP 選擇了一個 17 個節點的三次樣條曲線擬合。您可以控制這些設定。如果您願意,可以更改它。我打算嘗試獲得更好的擬合效果。我將使用 JMP 自動選擇的這個設定。
JMP 會如何處理這些數據呢?首先,它會確定一條總體平均曲線。這條曲線是我們剛才看到的所有曲線的總體平均值。這些曲線是形狀函數,也稱為特徵函數。想像一下,如果我們有一個係數,它乘以較高的形狀函數 1,例如這個係數是 +2,然後我們再添加一個係數,它的值為 -1,乘以形狀函數 2,再乘以形狀函數 3,乘以 2/2,然後乘以形狀函數 4,乘以 5;我們將所有這些乘積(乘以每個函數)相加,然後加到曲線上,我們就會得到平均函數。
問題是,要重構每條曲線,每個函數前面的係數應該是什麼?由於每個曲線都不同,因此會得到不同的係數,這些係數稱為函數主成分(FPC),分別記為1、2、3和4。在這種情況下,JMP提示:“需要四個函數主成分來描述每條曲線。”
這有點複雜,但關鍵在於這四個係數表徵了這條曲線。我將結合這四個係數以及我們已掌握的三次樣條擬合和樣條分解中17個節點的資訊。如果我知道所有這些資訊,我就可以重構出曲線1是一條無成長曲線,而這是曲線2,這是曲線2_1。
如果您仔細觀察——我們把畫面放大一點——這裡顯示的是原始數據和擬合數據。原始資料以黑色表示,您可以看到一部分。希望您能看清楚。紅色數據是擬合結果,也就是樣條擬合。您可以看到,我們擬合這些曲線的效果非常好。
我們需要這些功能性主成分才能繼續建模,所以我點擊紅色熱點並選擇「儲存這些摘要」。這將建立一個新的資料表,其中每行對應一個測試。這是 1_1,測試編號 1_1。我將其識別為無增長,所以類型,記住,我們將它作為補充變數保留下來。這就是最終結果。在我看來,這是一條無成長曲線。它位於訓練集中,而不是驗證集中。以下是該測試的前四個主成分。
然後我們這裡還有很多其他數據,像是每條曲線的平均值、標準差和中位數。這些數據可能對我們有用,但今天我不想討論它們。我打算把它們都刪掉,只留下這四個資料。
每個測試我都做了這樣的評估,並且我憑肉眼觀察對每個評估結果進行了判斷。然後這裡有一列寫著「訓練」。如果我往下翻,大概在某個地方,找到了,那裡還有一堆驗證行。
現在的問題是,「我能否利用我們剛剛確定的這些FPC值建立一個模型來預測類型?」 如果可以,那就太好了。我們只需要知道對於一條新的曲線,「它的FPC值是多少?」我們可以把它們代入這個神奇的公式,最終就能預測出曲線的類型。
因為我們使用的是 JMP Pro,並且使用了 FDE,所以我們可以存取 JMP Pro,進行模型篩選。這裡,我們的 Y 反應變數是類型。我想知道我是否可以預測類型。我想在這裡使用驗證。我們來看看。我想使用 FPC 作為 X 輸入。借助模型篩選工具,JMP Pro 將運行所有這些不同的模型,並將它們進行比較,以確定哪個模型的預測效果最佳。
現在,我要添加一些參數……有些模型允許雙向交互作用和二次項,所以我把它們也加進去。我還要在這裡設定一個隨機種子,2、3、4、5,這樣結果才能和論文裡的結果一致。通常情況下,我不會設定這個。我會讓 JMP 自動產生一個任意的種子。好了。
現在,JMP 會依序運行這些模型並進行比較。這裡快速展示所有運行模型的比較結果,並以均方根誤差 (RMSE) 排序。 RMSE 最低的是神經增強模型,巧合的是,它也是 JMP Pro 模型。決策樹和名目邏輯模型等都是 JMP 的標準模型,但神經增強樹模型表現良好。它還顯示該模型的誤分類率為 5%,這是所有模型中最好的。我們稍後會詳細討論這一點。
我現在要運行這個神經增強模型,看看結果如何。結果如下。我們之前討論過混淆矩陣。左邊是訓練數據,右邊是驗證數據。我們先來看驗證數據。
當我明確指出某個試驗是雙相生長時,神經增強模型預測了八次雙相生長,也預測了一次單相持續生長。總共九次試驗中,我猜錯了一次。這就是我們在混淆矩陣中看到的情況。你可以看到,理想情況下,所有數字都應該位於主對角線上。目前有些數字的位置還不理想。模型並不完美,但已經相當不錯了。我們的成功率達到了95%。
如果您更想看分數而不是計數,那麼這張表就是分數形式的。然後,您可能熟悉接收者操作特徵曲線(ROC曲線)。很有意思,但我們確實會犯一些錯誤。現在,這些錯誤……請容許我稍等片刻。我需要取得這些數字,這樣我才能知道該與您討論哪些錯誤。
如果我回顧一下,這裡有…嗯,我預測的是單相死亡,但我的演算法,我的神經增強演算法,三次預測為雙相死亡。它一共預測對了39次,只有3次預測為雙相死亡。我們來看看這三次試驗的結果。
如果我回到我的主資料集,這裡有一個腳本可以開啟圖形產生器。這裡顯示了我所有的曲線,它們都疊加在一起了。我想要的是這三條曲線:124_2、144_2 和 176_2。最初我目測這三條曲線時,我認為它們是單相的。它們只有一個峰值,然後就逐漸下降。下降的幅度不大,但我還是把它們描述為單相下降。
程序提示:「不,這三條曲線是雙相生長曲線。」我們仔細看看。這條綠色的曲線出現了,果然,它這裡有個小小的波動。我肉眼沒注意到,但JMP程式說:「嘿,我覺得這是一條雙相生長曲線。」這很重要嗎?我不知道。這得由Kyle公司的人來告訴我們。但它確實識別出了這條曲線,並說:“不,我覺得這是一條雙相生長曲線。”
如果你一直往後看這兩條曲線,似乎一開始就有一些成長,然後趨於平穩,之後又出現了一條更大的成長曲線。也許它們是雙相生長曲線。也許JMP的分析結果比我肉眼判斷的還要好。
這是另一條曲線。這是編號 60_2 的曲線。它在哪裡?就在這兒。我說過,這條曲線是單相衰減的。果然,它先上升,然後又回到這裡。它開始增長,然後就停止了。我相信你們已經注意到,這條曲線非常陡峭,幾乎達到了儀器的分辨率。總之,我們現在的測量範圍非常小。這條曲線其實根本沒有開始成長。所以 JMP 的分析結果是:「不,這是一條無成長曲線。」這很不錯。它漏掉了這條曲線,但漏掉的原因是它太小了,不切實際。我認為這些結果很有意思。
我們現在有了一個模型。你看,我可以關閉圖表建立器了。我們有了一個模型,這個神經增強模型,它能讓我們檢視誤分類率。但是當我們有新數據時該怎麼辦呢?我之前沒跟你們說的是,在原始資料集的第 190 行——好了,找到了——191 行,我本來想把它隱藏並排除,不過沒關係,它本來就是排除的資料。
假設 191_2 運行中的這些資料是新資料。這些數據沒有包含在先前的運行或分析中。我將選擇“匹配單元格”,然後清除它。好了。現在我想重複這個過程。就演算法而言,這現在是新數據。無論如何,它都是單相的,肉眼可見。看看 JMP 會如何處理。我該如何操作呢?我將重複相同的步驟。
我需要注意的一點是,必須確保所有訓練資料行都保留在這裡,就像最初那樣,因為我要進行專門的建模 FDE。我點擊這裡“調用”。設定裡的所有東西都一樣。我點擊“確定”,然後進行相同的 B 樣條擬合。這樣做之後,我在這裡得到了完全相同的結果,所以擬合僅基於訓練運行。
現在,我需要從中提取這些功能性摘要,也就是功能主成分(FPC)。我需要的就是這個……它在哪裡?哦,它在下面。 191_2。我需要這些功能性主成分。如果我知道它們,就可以把它們代入神經網路公式,得到預測結果。與其嘗試複製貼上什麼的,我還是直接儲存摘要吧。
然後我向下滾動到最底部的 191_2 行,就是這一行,我要提取這四個數字。這些是新試驗的功能主成分。我複製它們,Ctrl+C。哦,讓我看看,我好像忘了做一件事。我漏掉了一個步驟。建立這個模型之後,我們還需要保存它。我把公式存回資料表。現在,在資料表裡,不管它保存到哪裡了,現在多了很多列。
這就是我們最初的樣子,四個FPC,現在右邊多了這些額外的列。它們包含神經網路公式。每一列都是一個小計算器,然後在這裡匯總,分組計算出每種曲線類型的機率。最後,最有可能的類型就是你最終得到的結果。
我只需要把 191_2 的這些數字複製下來,然後再回到這個資料集。滾動到最底部。這就是 191_2。這是一個新的數據集,所以我通常不知道它是什麼。我只需要把這些數字貼到這裡,JMP 就會計算所有這些不同的列,進行評估,最終得出結論:這是一個單相死亡資料集,而事實也的確如此。這是我憑肉眼判斷的。你可以根據需要取得任意數量的新資料集,得到函數主成分,然後把它們放在這裡,就完成了。
讓我們回到期刊,總結一下。我們的結論是:函數資料瀏覽器 (Functional Data Explorer) 結合 JMP Pro 中的其他建模工具,可以用來表徵曲線。我目前達到了 95% 的準確率,但我們還可以採取一些措施來進一步提高準確率。由此產生的建模過程可以用於預測這些新的曲線類型,從而節省時間並避免錯誤,所有步驟都在隨附的論文中進行了詳細說明。
可能的模型……不,抱歉,我有幾張投影片順序弄錯了。關於未來工作的建議是,預先篩選數據,排除無成長的情況。如果 OD600 值不超過某個閾值 0.05,那麼顯然就沒有成長。我們會直接剔除這些數據,完全不需要考慮。
嘗試使用不同類型的樣條曲線、不同的複雜度、不同的節點數量,然後編寫腳本來自動執行所有這些步驟。我們完全可以做到這一點,而且可以大大提高速度。
現在,有了這些曲線之後,如果你得到的是單相持續成長曲線,就像我們展示的第一條曲線一樣,你可以在 JMP 中使用擬合曲線平台進行處理。你會得到這樣的方程,然後從中提取 A、B 和 C 參數的滯後時間、最大成長率和漸近線。
如果你的生長曲線是雙相生長曲線,你可以這麼做。實際上,它是兩條單相生長曲線疊加而成的。你可以使用 JMP 的非線性平台來解決這個問題。就像我之前說的,如果生長曲線沒有變化,你只需要設定一個限制。如果在整個生長過程中,OD600 值始終小於 0.05,那麼就判定為沒有生長。
對於單相衰減,我想有幾種不同的方法可以實現。我採用的一種方法是,將原始的單相衰減曲線(趨近於漸近線)乘以隨時間遞減的線性函數。這樣就能得到一個斜率。然後,讓非線性求解器求解 M 以及 A、B 和 C。
我們的節目到此結束。正如我所說,我們會提供一個包含所有步驟的PDF文件。希望它對您有所幫助。非常感謝我的搭檔Kyle。我們下次再見。保持JMPy精神!