非線性曲線擬合的參數界限我正在嘗試對 1000 多個樣本的數據點進行擬合。我發現雙指數 5P函數的擬合效果最佳。但是,如果相同的樣本中有一兩個數據點略微偏離趨勢線,則擬合效果就會非常奇怪。對於典型的樣本群體,衰減率參數約為 0.2,而對於這些樣本,擬合結果在 10 左右。非線性擬合中的「參數界限」和增加的迭代次數限制選項可以解決這個問題。但是,透過 GUI 手動操作是不可能的。
有沒有辦法「全域」設定參數邊界和迭代次數(針對所有樣本)?
我也嘗試了腳本選項,但我不熟悉 JSL 腳本,也無法使用下面的腳本顯示合適的結果。
Names Default To Here( 1 );
dt = Current Data Table();
obj = Nonlinear( Y( :data ), X( :data Predictor ), By( :ID ) );
obj << Go;
obj << Parameter Bounds(
asympt( 14, 22 ),
scale1( 0, 100 ),
decayrate1( -0.2, 0.1 ),
scale2( -100, 0 ),
decayrate2( -0.2, 0.1 )
);
obj << Iteration Limit( 10000 );
obj << Finish;
G = obj << Get Estimates;
Show( G );
obj << Report View( "Summary" );
obj << get estimates;
注意:原始 JSL 由 txnelson 移至 JSL 顯示框
基礎資料分析與建模回覆:非線性曲線擬合的參數界限你好@eugur ,
我將向您展示如何在不使用 JSL 的情況下實現這一點,以便您理解整個過程的工作原理(除了起始部分)。因此,您應該先產生一個公式列,該列將提供空白參數值,然後您可以變更這些參數值,以便在非線性平台中找到最適合您資料的擬合值。首先,您需要建立公式列(我在這裡新增了一個簡短的腳本,但您也可以手動建立):
dt=current data table();
dt<
<NEW column=""></NEW>
<P>準備好後,打開非線性平台,將公式列放入「X,預測器公式」角色中,將您感興趣的 Y 值放入 Y 部分,然後點擊「執行」。平台啟動後,點擊紅色按鈕,選擇“參數邊界”,並輸入您想要使用的邊界值。</P> <P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><span class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_0-1749874842390.png" style="width: 278px;"><img src="https://us.v-cdn.net/6038925/uploads/images/76921iB16E7281FC0917D7/Ben_BarrIngh_0-1749874842390.png" role="button" title="Ben_BarrIngh_0-1749874842390.png" alt="Ben_BarrIngh_0-1749874842390.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P> <P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="Ben_BarrIngh_1-1749874859915.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/76922i0E0E2181BA64F9AD/Ben_BarrIngh_1-1749874859915.png" role="button" title="Ben_BarrIngh_1-1749874859915.png" alt="Ben_BarrIngh_1-1749874859915.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P> <BR /> <P>然後,您可以使用“Go”運行非線性平台來獲取使用這些邊界估計的參數。</P> <BR /> <P>希望有幫助!</P> <P>謝謝,</P> <P>本</P> <BR /> <BR />
回覆:非線性曲線擬合的參數界限嗨,本,
感謝您的回复,但我已經可以這樣做了,這不是我想要的。正如我在帖子中提到的,我嘗試擬合 1000 多個樣本的數據點,這意味著要擬合 1000 多條曲線。因此,在非線性平台中,我還需要在「依據」部分使用「ID」欄位。 (“分組”選項在“擬合曲線”中有效,但不知何故在這裡不起作用)。
如果您有多個樣本,則需要為每個樣本手動執行您解釋的操作(點擊紅色按鈕,選擇“參數界限”,並輸入您希望使用的界限)。如果您只有幾個樣本,這可能沒問題,但對於 1000 多個樣本則不行。我要求的是能夠一次為所有 1000 多個樣本設定參數界限和迭代次數。
回覆:非線性曲線擬合的參數界限你好@eugur ,
如果您不使用分組術語,則設定的參數邊界將針對所有 1000 多個樣本進行全域設定(分組在非線性模型中不起作用的原因在於,分組本身必須整合到您提供給非線性模型的預測公式中)。您現有的腳本應該可以運行,但您無需在第二行運行“Go”,這就是為什麼參數邊界未添加的原因,因為平台在運行過程中無法進行任何更改。這裡有一個範例,它使用「合併資料表」工具來取得單一報告,以便輕鬆查看每個樣本中的值是如何變化的。
dt=current data table();
id_no=N Items(Associative Array(dt:Batch)<
<GET keys=""></GET>
<BR /> <BR />
回覆:非線性曲線擬合的參數界限對於具有許多曲線 ID 的情況,「擬合曲線」效果最佳,但如果您的擬合函數未包含在「擬合曲線」的預編程函數庫中,則需要「擬合非線性」。
如您所注意到的,「分組」在「非線性擬合」中的作用有所不同,在本例中您並不想使用它。我建議使用“按”對曲線進行分組。
I prefer using the following syntax for this. Could you try this and let us know if it works:</CODE></P>
<PRE><CODE class=" language-jsl">Nonlinear(
Y( :data ),
X( :data predictor),
By( :ID ),
Parameter Bounds(
asympt( 14, 22 ),
scale1( 0, 100 ),
decayrate1( -0.2, 0.1 ),
scale2( -100, 0 ),
decayrate2( -0.2, 0.1 ) ),
Iteration Limit( 10000 )
);
回覆:非線性曲線擬合的參數界限謝謝本,
功能上可行。但我認為非線性平台使用了不同的求解器。幾乎 50% 的擬合結果不可接受。
回覆:非線性曲線擬合的參數界限你好,克里斯蒂安,
非常感謝您的回覆。您說得對,「擬合曲線」似乎效果更好。我使用的擬合函數( 雙指數 5P )包含在「擬合曲線」的預先編程函數庫中。但是,正如我之前提到的,對於相同的樣本(5%),擬合結果非常奇怪,這就是我想嘗試「擬合非線性」選項的原因。但即使設定了邊界,「擬合非線性」也只能準確擬合大約50%的樣本。
所以我的問題是:
- 是否可以加入擬合曲線的參數邊界?
- 如果不是,是否可以使用與擬合曲線相同的求解器和設定來擬合非線性?
回覆:非線性曲線擬合的參數界限你好@eugur ,你可以嘗試擴大你的迭代限制,甚至考慮使用 SSE 網格來查看是否有可能為你的樣本獲得合適的參數值 - 你可能還想考慮從默認使用的“Netwon”選項運行不同的迭代。
50% 的結果單獨失敗的原因是,當使用所有樣本時,對整體 SSE 模型擬合的影響會降低,因此單點導致失敗的可能性會降低,而當僅分析一個單點時,失敗的可能性更大。
回覆:非線性曲線擬合的參數界限你好,eugur,
1) 據我所知,Fit Curve 不支援參數邊界。 2) Fit Curve 使用與非線性不同的演算法,因此不能使用相同的求解器。
擬合曲線和擬合非線性表面上看起來很相似,但實際上它們在本質上卻截然不同。非線性是一種傳統的非線性最小平方法迴歸求解器。它具有最大的靈活性,但也需要最多的手動輸入。與線性迴歸不同,非線性迴歸擬合具有不確定性,因此即使對於「相似」的資料集,也無法保證給定的一組初始猜測總是會收斂。這並非 JMP 獨有;根據我的經驗,大多數非線性求解器都需要偶爾進行手動“調整”,這使得批量處理數百個數據集成為一項有趣的挑戰(但並非不可能!)。這正是 JMP 擬合曲線平台的用武之地。
擬合曲線 (Fit Curve) 是一個特例,它擁有一個小型的最佳化預設函數庫。它沒有使用完全通用的非線性迴歸求解器,而是為每個函數使用了專為該函數編寫的特殊演算法。這使得它速度極快,並且更容易針對各種數據收斂。 (我既不是軟體開發人員,也不是數學家,所以請原諒我的非技術解釋,這只是我的基本理解!)。據我所知,擬合曲線不支援參數邊界,可能是因為通常不需要它們。如果您發現您的情況需要參數邊界,那麼我們就可以重新使用非線性平台。 Ben 提出了一些好主意,如果擬合曲線不起作用,還可以嘗試使用非線性+腳本等其他方法——但我的建議始終是先嘗試擬合曲線,如果仍然無效,則僅將擬合非線性作為備用選項。
以下是一些您可能感興趣的連結:
設定參數限制的範例
擬合曲線模型的統計詳細信息
非線性與擬合曲線會產生不同的結果嗎? - JMP 使用者社群
-基督教