參數按類別擴展的非線性迴歸<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />你好
我有一個資料集,需要使用非線性模型進行擬合,具有四個擬合參數:A、B、C 和 D。 資料集(Y,列)需要使用「類別」(即一列)進行分隔。 因此,每個唯一「類別」的 Y 都是一組唯一的資料。
我需要擬合所有數據並找到參數 A、B、C、D,條件是我需要為所有「類別」中的所有資料集提供唯一的 C 和 D,而 A、B 可能因「類別」而異。
為此,我為模型建立列並建立參數 C、D,為 A 和 BI 建立參數,選取“擴展為類別,選擇列”,並為列選擇“類別”,然後進行非線性迴歸擬合。 我在所有類別中獲得最佳 C 和 D,在類別中獲得不同的 A 和 B。
我的問題是:它如何在所有類別中找到唯一的 C 和 D? 它是否適合與每個資料集對應的資料集,並為每個資料集找到 C1、D1、C2、D2 等,然後取中位數/平均值或其他值?
或者它是否找到 C 和 D 值的範圍並在 C 和 D 內創建精細點並再次擬合所有數據集並越來越精細直到誤差在限制範圍內?
我需要知道方法,因為我想確保我正在做我需要做的事情。
謝謝
比諾伊
回覆:參數按類別擴展的非線性迴歸抱歉耽擱了。 我以為我們就完了!
我之前的文章展示了一個常見的公式乙和貝塔和條件參數類別水平。 你還需要什麼? 我的第一個回復中的腳本會自動建立這樣的公式。 從模型的角度來看,我無法理解您可能還需要什麼。
你是否想問如何非線性平台解決這樣的問題(估計參數)? 它使用一個數值最佳化程式和一個損失函數監視。 它使用給定的起始值然後改變它們以改善損失函數的結果(最小化)。 預設損失函數為誤差平方和, 或者最小平方法。它監視多種變化指標以確定何時收斂達到並停止。
回覆:參數按類別擴展的非線性迴歸你好,
我問的這個問題有更新嗎?
謝謝
比諾伊
回覆:參數按類別擴展的非線性迴歸你好,
我確實知道這種手動執行的方法。 我知道手動完成很容易。 但是,我需要將我的腳本自動化,作為更大系統的一部分,因此是必要的。
感謝您的時間和精力。
比諾伊
回覆:參數按類別擴展的非線性迴歸出色的!!! 工作起來就像一個魅力。 這就是我之前帖子的答案(與原始帖子略有不同。)
感謝您的時間和腳本。
現在是獎金問題(實際上是我原來的問題
在這個非線性迴歸擬合中,我們有 2 個參數 B 和 beta,它們對於所有類別都保持相同,而 P 和 R0 在它們之間有所不同。 現在我們沒有透過任何方程式指定 B 和 beta 如何在類別之間變化,那麼 JMP 如何找到適用於所有類別的最佳 B 和 beta 呢? 使用什麼演算法?
謝謝
比諾伊
回覆:參數按類別擴展的非線性迴歸在傑夫·珀金森指出了一個與你想要做的類似的例子之後,我想對我之前的回應進行補充。 我們不清楚您是否真的需要一個腳本來製作您需要的模型公式。 選擇幫助>樣本資料庫, 打開非線性範例資料夾,最後打開米切爾利希藻類數據表。 打開公式編輯器與米切爾利希柱子。 它應該看起來像這樣:

在這種情況下,就像你的情況一樣,這兩個參數α和貝塔是有條件的治療。
我打開我創建的資料模型並選擇科爾斯>新專欄... 我會稱之為模型並添加一個公式列屬性。 我將在使用參數建立模型公式之前建立參數。 我點擊表格列並選擇左上角參數。 我點擊新參數。 ..並輸入乙的名稱並給它一個起始值2 ,然後按一下好的。 我創造貝塔= 0以同樣的方式。 這乙和貝塔參數是無條件的,它們的值對於所有類別都是通用的。
另外兩個參數不同。 我點擊新參數, 進入羅0對於名字來說, 2作為起始值,然後選擇展開類別,選擇列。 我點擊好的然後選擇類別柱子。 現在我有一個唯一的參數羅0對於每個類別。 我為磷範圍。
我現在建立公式,在參數列表和表列列表之間切換以產生此公式:

當我單擊參數清單中的分組參數時,編輯器會自動插入 Match(...) 表達式。 所以現在每個類別都有一個 B、一個 beta、一個 R0 和 P。
在第一個範例藻類中使用此方法可得出以下公式:

模型使用非線性產生與原始參數化完全相同的估計值。
請理解我們可能誤解了您的問題。 腳本很強大,但並不總是必要的。
回覆:參數按類別擴展的非線性迴歸我使用了三個原則來解決這個問題。 現在看起來很容易,但在我做對之前有一些混亂的錯誤開始。 我對模型公式進行逆向工程,將問題分解為更小的問題,並從內到外建立解決方案。 它假設存在三個具有給定名稱的資料列。 如果列名稱在運行之間發生變化,您將必須新增自訂對話方塊。但它確實可以容納任意數量的類別。 我不知道當您有大量類別時,非線性是否能夠解決模型。此外,您可能需要準備一個起始值列表,並使用我的範例來使用唯一的值。
我沒有你的資料表,但我認為你有的模型(類別、rRelax、tStress 欄位)有效。
/* 假設這些列存在或建立自訂對話方塊以將它們指派給腳本變數:
類別
放鬆
t應力
*/
// 尋找所有類別
類別# = :類別<<獲取值;
// 用表達式從內到外建構公式
匹配表達式 p# =匹配表達式 r0# =表達式(匹配( :類別) ) ;
參數列表# =清單(乙= 2 ,貝塔= 0 ) ;
// 迭代所有類別
為了( C = 1 , C <= N 項(類別# ) , C ++,
// 建立類別特定的 R0 參數
評估(
解析(
代替(
"Insert Into( 參數列表#, Expr( Name( \!"R0_ccc\!" ) = 2 ) )" ,
“CCC” ,
類別# [ C ]
)
)
) ;
插入(匹配表達式 r0# ,類別# [ C ] ) ;
評估(
解析(
代替(
"插入( 符合 expr r0#, Expr( 名稱( \!"R0_ccc\!" ) ) )" ,
“CCC” ,
類別# [ C ]
)
)
) ;
// 建立類別特定的 P 參數
評估(
解析(
代替(
"Insert Into( 參數列表#, Expr( Name( \!"P_ccc\!" ) = 2 ) )" ,
“CCC” ,
類別# [ C ]
)
)
) ;
插入(匹配表達式 p# ,類別# [ C ] ) ;
評估(
解析(
代替(
"插入( 符合 expr p#, Expr( 名稱( \!"P_ccc\!" ) ) )" ,
“CCC” ,
類別# [ C ]
)
)
) ;
) ;
// 代入一般模型公式
公式表達式# =代替(
表達式(範圍( lll ,呃/ ( 1 +乙* ( :放鬆/ : t應力) ^貝塔+點對點) ) ) ,
表達式( lll ) ,
參數列表# ,
表達式(呃) ,
名稱表達式(匹配表達式 r0# ) ,
表達式(點對點) ,
名稱表達式(匹配表達式 p# )
) ;
// 設定模型列公式
評估(
代替(
表達式(目前數據表() <<新專欄( “模型” ,公式( FF ) ) ) ,
表達式( FF ) ,
名稱表達式(公式表達式# )
)
) ;
回覆:參數按類別擴展的非線性迴歸你好,
謝謝回覆。 我確實看過手冊。 仍然無法獲得我正在尋找的東西。
我現在正在嘗試編寫這個非線性擬合的腳本,並面臨一些問題。 需要一些幫助。 我在這裡重申一下這個問題:
我有需要透過具有 4 個擬合參數的模型進行擬合的數據。 每個類別的適合度並非互相獨立。 上面貼文中所示的 2 個擬合參數 B 和 beta 需要是唯一的,即迴歸擬合為所有類別提取唯一的 B 和 beta。 而其他兩個參數 P 和 R0 可能因類別而異。
JMP 介面如下所示:

現在,我需要在 JSL 中對此進行編碼。
我知道我們可以執行以下操作來獲取所有四個唯一參數:
dt << 新列("模型", 數值, 連續, 公式( 參數( {B = 5, beta = 0.25, P = 10, R0 = 10}, R0 / (1 + B * (:Name( "tRelax( s)" ) / :Name( "tStress(s)" )) ^ beta) + P )));
然而這不是我想要的。 我不想使用“分組”功能,因為它只有在提取是獨立的情況下才有幫助。
我複製公式時產生的程式碼如下所示:
範圍(
{B = 2,貝塔 = 0,
名稱(“R0_類別_D03_01_-1.8_100”)= 2,
名稱(“R0_類別_D03_01_-1.8_1000”)= 3,
名稱(“R0_類別_D03_01_-1.8_10000”)= 3,
名稱(“R0_類別_D03_01_-1.8_158”)= 3,
名稱(“R0_類別_D03_01_-1.8_1580”)= 3,
名稱(“P_Category_D03_01_-1.8_100”)= 0,
名稱(“P_Category_D03_01_-1.8_1000”)= 1,
名稱(“P_Category_D03_01_-1.8_10000”)= 1,
名稱(“P_Category_D03_01_-1.8_158”)= 0,
名稱(“P_Category_D03_01_-1.8_251”)= 0},
Exp( -B * (:名稱( "tR" ) / :名稱( "tS" )) ^ beta ) *
匹配(:類別,
"D03_01_-1.8_100", 名稱( "R0_Category_D03_01_-1.8_100" ),
"D03_01_-1.8_1000", 名稱( "R0_Category_D03_01_-1.8_1000" ),
"D03_01_-1.8_10000", 名稱( "R0_Category_D03_01_-1.8_10000" ),
"D03_01_-1.8_158", 名稱( "R0_Category_D03_01_-1.8_158" ),
"D10_05_-2.6_6310", 名稱("R0_Category_D10_05_-2.6_6310")
) + 匹配(:類別,
"D03_01_-1.8_100", 名稱( "P_Category_D03_01_-1.8_100" ),
"D03_01_-1.8_1000", 名稱( "P_Category_D03_01_-1.8_1000" ),
"D03_01_-1.8_10000", 名稱( "P_Category_D03_01_-1.8_10000" ),
"D03_01_-1.8_158", 名稱( "P_Category_D03_01_-1.8_158" ),
"D10_05_-2.6_6310", 名稱("P_Category_D10_05_-2.6_6310")
)
)
我需要自動化此操作,因此不能按原樣使用它。
我可以從「類別」列中為 P_XXX 和 R0_XXX 建立陣列。
我正在考慮為每個 P 和 R0 建立關聯數組並在公式中使用它們,但沒有成功。
當然,在創建此公式後,我需要對列和資料執行非線性迴歸擬合。
有人可以幫我編碼嗎?
謝謝
比諾伊
回覆:參數按類別擴展的非線性迴歸比諾伊,
要了解模型的擬合情況以及擬合背後的統計數據,最好的地方是「書」>「專業模型」下的「幫助」部分。非線性擬合從第 105 頁開始。Michael Anderson 對擬合進行分組的建議還將顯示各個類別的擬合情況,並且您還將看到組合擬合的圖表。下面顯示了幫助中的範例。您也可以使用自己的參數集,如第 7 章所示。統計部分從第 7 章第 152 頁開始。

回覆:參數按類別擴展的非線性迴歸你好,
謝謝回覆。
更清楚地說。 我知道一種方法可以做我想做的事。 我想知道它是如何完成的。
在下面所示的範例中,B 和 beta 對應於問題中詢問的 C 和 D,而 P 是像 A 或 B 一樣的參數,可以在不同類別之間變化。
以下是正在完成的擬合的螢幕截圖,其中 B 和 beta 作為對所有類別保持不變的參數,而 P 是可以隨類別變化的參數。
問題是它如何獲得所有類別中最好的 B 和 beta 值? 它是否最初為每個類別找到不同的 B 和 beta,並進行一些統計以獲得對所有類別都足夠好的最佳 B 和 beta? 如果是這樣,使用的統計數據是什麼。
謝謝
比諾伊

回覆:參數按類別擴展的非線性迴歸聽起來您想在非線性平台中使用分組變數。將 X 和 Y 變數放入平台的相應欄位中,然後將「類別」列放入「群組」欄位中。當您之後擬合模型時,它將計算每組的結果。因此,如果您有 4 個類別,您將獲得 4 個具有 4 組係數的模型。
[圖片缺失]