腳本? 將非線性模型列公式應用於多列我在第 1 列中有一個帶有 2 個參數的模型公式,我想將該模型擬合到 80 個不同的數據列(第 2 - 82 列),其中每個數據列都有這 2 個自定義參數。 是否有捷徑可尋?
我必須寫一個腳本嗎?
回复:腳本? 將非線性模型列公式應用於多列最終將此作為解決方案收斂:
名稱默認為 Here( 1 );
dlg = 列對話框(
標題(“非線性回歸”),
yCol = Col List( "Y, 響應",
數據類型(數字),
敏科爾( 1 )
),
xCol = Col List( "X, 預測公式",
數據類型(數字),
最小科爾(1),
最大科爾( 1 )
)
);
如果(dlg[“按鈕”]!= 1,
Throw("用戶取消");
);
刪除自(dlg);
評估列表(dlg);
dt = 當前數據表();
n 適合 = N 項( yCol );
公式 = xCol[1] << 獲取公式;
n parms = N Items( Arg( 公式, 1 ) );
parm = J( n 適合, 2* n parms, .);
clmnm={};
parmnm = Arg(公式,1);
parclnm = As List(J(1,n parms));
對於 ( i = 1, i<= n parms, i++,
parmnm[i]=Char(parmnm[i]);
parclnm[i]=Left(parmnm[i],芒格(parmnm[i],1,"=")-1);
);
For( f = 1, f <= n 適合, f++,
嘗試(
nl fit = dt << Nonlinear( Y( yCol[f] ), X( xCol[1] ), Newton, 僅限數值導數 (1), Finish, Go );
parm[f,[1,2]] = Transpose( Report( nl fit )["Solution"][NumberColBox(5)] << Get As Matrix );
parm[f,[3,4]] = Transpose( Report( nl fit )["Solution"][NumberColBox(6)] << Get As Matrix );
);
clmnm[f]=列(yCol[f])< );
dt = As Table(parm);
dt<列 = 列 (1);
For( f = 1, f <= n 適合, f++,
col[f]=clmnm[f];
);
對於 ( i = 1, i<= n parms, i++,
col = 列(i+1);
col << 設置名稱(parclnm[i]||“估計”);
col = Column(i+1+n 參數);
col << 設置名稱(parclnm[i]||“ApproxStdError”);
);
回复:腳本? 將非線性模型列公式應用於多列我想到了!
謝謝你!
回复:腳本? 將非線性模型列公式應用於多列它在這一步出錯
parm[f,0] = Transpose( Report( nl fit )["Parameter Estimates"][NumberColBox(1)] << Get As Matrix );
回复:腳本? 將非線性模型列公式應用於多列謝謝你!
現在測試...
調試時收到以下錯誤
無法在訪問或評估“下標”時下標顯示框,報告(nl fit)[/*###*/“參數估計”]
@馬克貝利寫道:
這個解決方案有點棘手。 只有當您使用的模型不是 Fit Curve 庫中的模型時,它才有效。 (如果是,則 Nonlinear 會啟動 Fit Curve,它希望模型按名稱指定,但此腳本未提供。)根據您聲稱實際模型更複雜,那麼我抓住機會是不在擬合模型庫中並編寫了這個腳本:
Names Default to Here( 1 );
dlg = Column Dialog(
Title( "Nonlinear Regression" ),
yCol = Col List( "Y, Response",
Data Type( Numeric ),
Min Col( 1 )
),
xCol = Col List( "X, Predictor Formula",
Data Type( Numeric ),
Min Col( 1 ),
Max Col( 1 )
)
);
If( dlg["Button"] != 1,
Throw( "User cancelled" );
);
Remove From( dlg );
Eval List( dlg );
dt = Current Data Table();
n fits = N Items( yCol );
formula = xCol[1] << Get Formula;
n parms = N Items( Arg( formula, 1 ) );
parm = J( n fits, n parms, . );
For( f = 1, f <= n fits, f++,
nl fit = dt << Nonlinear( Y( yCol[f] ), X( xCol[1] ), Newton, Finish );
parm[f,0] = Transpose( Report( nl fit )["Parameter Estimates"][NumberColBox(1)] << Get As Matrix );
);
As Table( parm );
首先打開 JMP 數據表,然後打開並運行此腳本。 選擇所有響應列(示例中的第 2-82 列)並單擊是,回應. 單擊包含模型公式的列(示例中的第 1 列),然後單擊十、預測公式,. 然後點擊好的.
回复:腳本? 將非線性模型列公式應用於多列這個解決方案有點棘手。 只有當您使用的模型不是 Fit Curve 庫中的模型時,它才有效。 (如果是,則 Nonlinear 會啟動 Fit Curve,它希望模型按名稱指定,但此腳本未提供。)根據您聲稱實際模型更複雜,那麼我抓住機會是不在擬合模型庫中並編寫了這個腳本:
Names Default to Here( 1 );
dlg = Column Dialog(
Title( "Nonlinear Regression" ),
yCol = Col List( "Y, Response",
Data Type( Numeric ),
Min Col( 1 )
),
xCol = Col List( "X, Predictor Formula",
Data Type( Numeric ),
Min Col( 1 ),
Max Col( 1 )
)
);
If( dlg["Button"] != 1,
Throw( "User cancelled" );
);
Remove From( dlg );
Eval List( dlg );
dt = Current Data Table();
n fits = N Items( yCol );
formula = xCol[1] << Get Formula;
n parms = N Items( Arg( formula, 1 ) );
parm = J( n fits, n parms, . );
For( f = 1, f <= n fits, f++,
nl fit = dt << Nonlinear( Y( yCol[f] ), X( xCol[1] ), Newton, Finish );
parm[f,0] = Transpose( Report( nl fit )["Parameter Estimates"][NumberColBox(1)] << Get As Matrix );
);
As Table( parm );
首先打開 JMP 數據表,然後打開並運行此腳本。 選擇所有響應列(示例中的第 2-82 列)並單擊是,回應. 單擊包含模型公式的列(示例中的第 1 列),然後單擊十、預測公式,. 然後點擊好的.
回复:腳本? 將非線性模型列公式應用於多列您可以在沒有腳本的情況下完成,但它需要大量的點擊。 假設您已經將非線性模型設置為列公式,請執行以下步驟:
- 選擇表格 > 堆疊。
- 選擇所有響應列(在您的示例中為 2-82)並單擊 Stack。
- 確保選擇了複製公式的選項。
- 輸入數據列的名稱,例如 Response。
- 輸入標籤列的名稱,例如曲線。
- 單擊確定。
- 選擇分析 > 專業模型 > 非線性。
- 選擇預測變量列(在您的示例中為 83)並單擊 X
- 選擇模型列(在您的示例中為 1)並單擊 Y。
- 選擇曲線列並單擊依據。
- 單擊確定。
- 現在為每條曲線單擊 Go。 (這是乏味的部分。)
- 右鍵單擊任何“參數估計”報告並選擇“製作組合數據表”。
此過程應為您提供一個包含所有參數估計值的新數據表。
回复:腳本? 將非線性模型列公式應用於多列標記,
謝謝。
您對所有驗證問題的回答都是肯定的。
公式可以是任何東西,但為了簡單起見,假設它是 y = h*exp(-b*x^(0.65)),h 和 b 作為參數,x>0。
實際公式要復雜得多,但這種額外的複雜性不應影響解決方案。
回复:腳本? 將非線性模型列公式應用於多列我再問:第1列公式中表達的非線性模型(f(X))是什麼? 兩個參數是什麼?
驗證:預測變量 (X) 是最後一列並且用於第 1 列的公式中?
驗證:個人回答 (Y) 在第 2-82 列?
驗證:您想分別將 Y = f(X) 擬合到每個 Y 並捕獲每個 Y 的參數估計值?
回复:腳本? 將非線性模型列公式應用於多列是的,預測變量存在於另一列中。
如果您願意,我們可以將其稱為第 83 列。
我想我的目標輸出將是一個表格,該表格顯示每列兩個參數的最佳擬合值以及相關的置信區間。
回复:腳本? 將非線性模型列公式應用於多列在第 1 列中存儲為公式的非線性模型是什麼? 該公式通常是預測變量的函數。 哪一列包含預測變量值?
如果這種情況很簡單,我可以寫一個腳本。