按類別擴展參數的非線性回歸<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? 使用的算法是什麼?
謝謝
比諾伊
回复:按類別擴展參數的非線性回歸在 Jeff Perkinson 指出一個與您想要做的類似的示例之後,我想添加到我之前的回復中。 我們不清楚您是否真的需要一個腳本來製作您需要的模型公式。 選擇幫助>示例數據庫, 打開非線性示例文件夾,最後打開藻類 Mitscherlich數據表。 打開公式編輯器與米切爾利希柱子。 它應該如下所示:

在這種情況下,就像你的情況一樣,2個參數α和測試版有條件的治療.
我打開我創建的數據模型並選擇科爾斯>新列... 我會叫它模型並添加一個公式列屬性。 我將在使用它們製作模型公式之前創建參數。 我點擊表格列在左上角並選擇參數. 我點擊新參數。 ..並輸入乙為名稱並給它一個起始值2 ,然後單擊好的. 我創造測試版= 0以同樣的方式。 這乙和測試版參數是無條件的,它們的值對所有類別都是通用的。
其他兩個參數不同。 我點擊新參數, 進入R0為了名字, 2為起始值,然後選擇展開分類,選擇列. 我點擊好的然後選擇類別柱子。 現在我有一個獨特的參數R0對於每個類別。 我做同樣的事情磷範圍。
我現在構建公式,在參數列表和表格列列表之間切換以製作此公式:

當我單擊參數列表中的分組參數時,編輯器會自動插入 Match(...) 表達式。 所以現在每個類別都有一個 B,一個 beta,以及一個 R0 和 P。
使用這種方法與第一個示例藻類導致這個公式:

該模型使用非線性生成與原始參數化完全相同的估計。
請理解,我們可能誤解了您的問題。 腳本很強大,但並不總是必要的。
回复:按類別擴展參數的非線性回歸我使用了三個原則來解決這個問題。 現在看起來很容易,但在我做對之前有一些混亂的錯誤開始。 我對模型公式進行了逆向工程,將問題分解為更小的問題,並從內到外構建了解決方案。 它假定存在三個具有給定名稱的數據列。 如果列名在運行之間發生變化,您將必須添加一個自定義對話框。但它確實可以容納任意數量的類別。 我不知道當您有大量類別時,Nonlinear 是否能夠解決模型。此外,您可能需要準備一個起始值列表並使用我的示例來使用唯一值。
我沒有您的數據表,但我認為您擁有的模型(類別、rRelax、tStress 列)有效。
/* 假設這些列存在或製作自定義對話框以將它們分配給腳本變量:
類別
放鬆
壓力
*/
// 查找所有類別
類別# = :類別<<獲取值;
// 用表達式從內到外構建公式
匹配表達式 p# =匹配 expr r0# =表達式(匹配( :類別) ) ;
參數列表# =列表(乙= 2 ,測試版= 0 ) ;
// 遍歷所有類別
為了( C = 1 , C <= N 項(類別# ) , C ++,
// 製作特定類別的 R0 參數
評估(
解析(
代替(
“插入(參數列表#,Expr(名稱(\!“R0_ccc\!” ) = 2))" ,
“cc” ,
類別# [ C ]
)
)
) ;
插入(匹配 expr r0# ,類別# [ C ] ) ;
評估(
解析(
代替(
“插入(匹配 expr r0#,Expr(名稱(\!“R0_ccc\!” )))” ,
“cc” ,
類別# [ C ]
)
)
) ;
// 製作特定類別的 P 參數
評估(
解析(
代替(
“插入(參數列表#,Expr(名稱(\!“P_ccc\!” ) = 2))" ,
“cc” ,
類別# [ C ]
)
)
) ;
插入(匹配表達式 p# ,類別# [ C ] ) ;
評估(
解析(
代替(
“插入到(匹配 expr p#,Expr(名稱(\!”P_ccc\!” )))” ,
“cc” ,
類別# [ C ]
)
)
) ;
) ;
//代入通用模型公式
公式表達式# =代替(
表達式(範圍( lll , rrr / ( 1 +乙* ( :放鬆/ :壓力) ^測試版+公私合營) ) ) ,
表達式( lll ) ,
參數列表# ,
表達式( rrr ) ,
名稱表達式(匹配 expr r0# ) ,
表達式(公私合營) ,
名稱表達式(匹配表達式 p# )
) ;
// 設置模型列公式
評估(
代替(
表達式(當前數據表() <<新列( “模型” ,公式( fff ) ) ) ,
表達式( fff ) ,
名稱表達式(公式表達式# )
)
) ;
回复:按類別擴展參數的非線性回歸你好,
謝謝回复。 我確實通過了手冊。 仍然無法得到我想要的東西。
我現在正在嘗試編寫這種非線性擬合併面臨一些問題。 需要一些幫助。 我在這裡重申這個問題:
我有需要由具有 4 個擬合參數的模型擬合的數據。 每個類別的擬合不是彼此獨立的。 上面帖子中顯示的擬合參數中的 2 個 B 和 beta 需要是唯一的,即回歸擬合為所有類別提取唯一的 B 和 beta。 而其他兩個參數 P 和 R0 可能因類別而異。
JMP 界面如下所示:

現在,我需要在 JSL 中編寫代碼。
我知道我們可以執行以下操作來獲取所有四個唯一參數:
dt << New Column("Model", Numeric, Continuous, Formula( Parameter( {B = 5, beta = 0.25, P = 10, R0 = 10}, R0 / (1 + B * (:Name("tRelax( s)" ) / :Name("tStress(s)" )) ^ beta) + P )));
然而,這不是我想要的。 而且我不想使用“分組”功能,因為它只有在提取是獨立的情況下才有幫助。
我複制公式時生成的代碼如下所示:
範圍(
{B = 2, 貝塔 = 0,
名稱(“R0_Category_D03_01_-1.8_100”)= 2,
名稱(“R0_Category_D03_01_-1.8_1000”)= 3,
名稱(“R0_Category_D03_01_-1.8_10000”)= 3,
名稱(“R0_Category_D03_01_-1.8_158”)= 3,
名稱(“R0_Category_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 * (:Name( "tR" ) / :Name( "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 創建關聯數組並在公式中使用它們,但沒有成功。
當然,在創建此公式後,我需要對列和數據運行非線性回歸擬合。
有人可以幫我編碼嗎?
謝謝
比諾伊
回复:按類別擴展參數的非線性回歸比諾伊,
了解模型擬合的好地方以及擬合背後的統計數據位於 Books > Specialized Models 下的 Help 部分。非線性擬合從第 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 組 fo 係數的模型。
[缺少圖像]