我正在嘗試創建一個腳本來捕獲非線性模型擬合的結果並將其輸出到圖表中。 該數據集是隨著時間的推移連續捕獲的,我在其中安裝了非線性模型(見附圖)。 我有 12 個不同的樣本,如果你想向下滾動的話,我有相同的圖表。
但是,我想以一種方式報告圖表,以便我可以看到僅與第 0、1、2、3、4、5 等天對應的行捕獲的數據,直到 21 天,而不干擾曲線通過樣本建立模型。 在這種情況下,我希望將實驗數據作為散點圖數據,將模型作為連續曲線數據或平滑曲線
我該怎麼做呢?
圖表產生器似乎沒有與第一個挑戰同時繪製實驗數據和模型。
我的理由是,我可能會使用某種資料過濾器,每當我呼叫腳本時都可以套用該篩選器,而不會幹擾模型列。 我是否需要使用 12 個樣本中每個樣本的新參數估計值來建立一個特定於模型的新資料表,然後呼叫圖形產生器?
我還嘗試使用 JMP 選單選項卡上的圖形/舊版/疊加圖。 這似乎同時繪製了數據和模型曲線,但在這種情況下,我意識到在我接受並保存每個樣本的參數估計值後,JMP 並未將參數估計值單獨應用於模型列上的每個樣本。 在這種情況下,模型公式僅使用為資料表中首先出現的樣本估計的參數,並將這些參數用於後續樣本。
然後,我是否需要建立一個新的資料表,該資料表使用模型公式使用確定的參數估計值產生 12 列,以便能夠將每個樣本的模型和實驗資料繪製在一起?
我希望這一點很清楚。 我可以上傳數據表等的螢幕截圖
我正在嘗試編寫一個腳本,為新參數估計打開一個新列。
運行非線性擬合後,我得到了估計值和誤差。 然後,我只保留感興趣的資料表,並嘗試以某種方式取得感興趣的值,以便在具有相同模型公式的新欄位中使用。 這個想法是根據估計值指定模型參數。
我需要一些幫助,因為我不知道這是否是正確的方法,或者我是否需要使用其他功能。 下面的腳本可能有點複雜,但這可能是因為我幾乎沒有程式設計經驗。 腳本顯然有效
@馬克貝利寫道:
我現在正在教學,所以我不能自由地檢查,但非線性可能會為您保存具有不同參數集的公式。 Match() 函數在這裡很有用。 您對群組進行配對並為每個結果複製模型,但為每個群組套用唯一的參數估計值。 它變成了某種分支。 就像某些語言中的 CASE 語句一樣。
直到粗體部分:
col9 = 新列(“模型”);
col9<< 設定公式 (參數({Y1_Y1_0 = 0.2, K1_K1_0 = 0.01, P1_P1_0 = 0.004, Y2_Y2_0 = 0.15, K2_K2_0 = 0.06, P2_P2_0 = 0.19(Yf (K1_K1_0 * Exp()) / Y1_Y1_0) * (P1_P1_0 - :天))) + Y2_Y2_0 * Exp(-Exp(((K2_K2_0 * Exp())) / Y2_Y2_0) * (P2_P2_0 - Exp())), : 0 )));
col10=newcolumn("錯誤");
col10<< 設定公式((:平均值 - :模型) ^ 2);
col10<<評估公式;
col10<<取得公式;
obj = 非線性(Y(:平均), X(:模型), 損失(:Err), 迭代限制(5000), By(:樣本));
obj << 去;
//傳迴向量列表,其中每個向量包含參數估計
obj << 取得估計值;
//另請參閱取得 SSE、取得參數名稱、取得 CI
//或者,製作一個表
_xx = obj << Xpath("//OutlineBox[@helpKey='非線性解']");
//只有2個組,所以只找到2個;每個包含兩個子表
fit_dt = (_xx[1]< est_dt = (_xx[1]< fit_dt << set Name("非林擬合錯誤");
est_dt << set Name("非林擬合估計");
名稱預設為此處( 1 );
DontClose = {"dt4", "非林適配誤差", "非林適配估計"}; // 要離開的表格的範例名稱
// 向後循環列表,因此表號不會改變
For( i = N 表(), i >= 0, i--,
If( 包含( DontClose, 資料表( i ) << 取得名稱 ),
繼續(),
關閉(資料表(i),「不儲存」)
)
);
dt = 資料表(“非林適配估計”);
dt2<
myList=:估計<<取得值
dt0 = 資料表(“dt4”);
dt0<< New Column("依樣本擬合模型");
col11="依樣本擬合模型";
col11 << 設定公式(參數({Y1_Y1_0, K1_K1_0, P1_P1_0, Y2_Y2_0, K2_K2_0, P2_P2_0}, If(:Days>0, (Y1_Y1_0 * Exp(-P2_0}, If(:Days>0, (Y1_Y1_0 * Exp(-Exp(100K) ( P1_P1_0 - :day))) + Y2_Y2_0 * Exp(-Exp(((K2_K2_0 * Exp()) / Y2_Y2_0) * (P2_P2_0 - :天)))),0), 設定屬性("預測", {:平均, Creator("非線性")}), By (:Sample)));
對於每一行(col11=設定公式(Match(“參數”,“估計”))));
col11<<評估公式;
col11<<取得公式;
有什麼建議麼?
我現在正在教學,所以我不能自由地檢查,但非線性可能會為您保存具有不同參數集的公式。 Match() 函數在這裡很有用。 您對群組進行配對並為每個結果複製模型,但為每個群組套用唯一的參數估計值。 它變成了某種分支。 就像某些語言中的 CASE 語句一樣。
不,不要使用寬格式(回應保存在十幾個資料列中),而是使用高格式(回應保存在一列中並使用第二列來識別樣本)。 現在,在大多數平台的「按」角色或「非線性」或「繪製曲線」平台中的「群組」角色中使用樣本 ID。