將 AIC 導出到新數據表的腳本<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我正在比較 Fit Parametric Survival 平台中多個模型的 AIC 結果。 此時,我有一個腳本可以運行所有模型並生成多個窗口,然後我將 AIC 和其他輸出一一複制/粘貼到一個 excel 文件中。 不用說,這是一個耗時且浪費的過程。 我是 JSL 的新手,有人能幫我製作一個自動化流程,從多個報告窗口中提取 AIC 和其他信息,並將它們保存到一個數據窗口中嗎? 我正在評估的附加信息是參數收斂、使用的觀察結果以及審查和未審查值的數量。
謝謝你的幫助!
使用 VBA 宏將數據導入 JMP 並將 JMP 結果返回到 Weibull Analysis 上的 Excel 工作表嗨,大家好,
首先,我要感謝您分享您的腳本發現,它幫助我能夠自動化我的數據查詢過程。我正在使用 VBA-Macro excel 將我的表複製到 JMP 中以執行 Weibull 分析並獲取比例和形狀值並複製到我的 VBA-Macro excel 文件中。下面是我使用的代碼。 希望它對其他人也有幫助。
VBA 宏 Excel。
子 JMP()
將應用程序調暗為 JMP.Application
Dim doc 作為 JMP.Document
設置 app = CreateObject("JMP.Application")
app.Visible = True
設置 doc = app.OpenDocument("C:\Users\ABC\Desktop\WS.jsl")
結束子
JSL 腳本(另存為 WS.jsl 格式)
//! <<<如果你想自動運行下面的 JSL 腳本,它必須在你的 JSL 文件的第一行>>>。
dt = Open( "C:\Users\ABC\Desktop\Book1.xlsm" ); <<< JSL將excel文件打開成JMP數據表執行下面的weibull分析>>>
fm = 壽命分佈(
Y( :Name( "TTF,Hr" ) ),
審查員(:審查員),
審查代碼( 1 ),
頻率(:頻率),
<<適合威布爾,
置信區間法(似然),
<<設置比例(非參數),
<<抑製圖(非參數),
間隔類型(同時),
<<設置腳本(
{概率紙(Profiler(1,置信區間(1)),術語值(名稱(“TTF,Hr”)(4846.6174375,鎖定(0),顯示(1))))),
Weibull 分佈(刻畫器(1,置信區間(1)),術語值(名稱(“TTF,Hr”)(4846.6,鎖定(0),顯示(1))))),
威布爾分位數(刻畫器(1,置信區間(1),項值(概率(0.5,鎖定(0),顯示(1)))))),
Weibull Hazard( Profiler( 1, Confidence Intervals( 1 ), Term Value( Name( "TTF,Hr" )(4846.6, Lock( 0 ), Show( 1 )) ) ) ),
威布爾密度(Profiler(1,術語值(名稱(“TTF,Hr”)(4846.6,鎖定(0),顯示(1))))),自定義估計(威布爾,0)}
),
發送報告(
Dispatch( {"Compare Distributions"}, "Life Distribution", FrameBox, {Grid Line Order( 2 ), Reference Line Order( 3 )} ),
Dispatch( {"統計", "模型比較"}, "", TableBox, {按列排序( 2, 1 )} )
)
);
// 自動將參數估計數據複製到新數據表中(例如:untitled.jmp 格式)
fmrep = fm << 報告;
fmrep[Outline Box("Parametric Estimate ?" )][Table Box( 1 )] << 製作組合數據表;
dt1 = 當前數據表();
dt1 << SaveAs( "c:\Users\ABC\Desktop\AAA.xlsx" ); // 在桌面位置將 untitled.jmp 文件保存為 excel 文件(在本例中我將其命名為 AAA.xlsx)。
關閉(dt,不保存);
關閉(dt1,不保存);
上面的腳本非常適合我。
只是想用我最近的發現和學習來回饋這個社區。
謝謝!
吉姆
回复:將 AIC 導出到新數據表的腳本尤里卡! 謝謝杰夫、馬克和伊恩! 你們在短時間內教會了我很多東西,並為我提供了解決方案,可以節省我數小時不必要的點擊、複製和粘貼!
現在,如果你們中有人知道如何在模型不收斂時為警告文本添加一列,那將是錦上添花。 但我對我們所取得的成就感到滿意!
回复:將 AIC 導出到新數據表的腳本當您在平台啟動中使用 By() 時,JMP 將返回結果平台的列表。 沒有它,JMP 將返回單個平台,而不是在列表中。
由於此處的示例使用了 By(),因此它們需要索引到平台列表中以逐個引用特定的平台。 那是 [1] 中的:
fmrep1[1][Outlinebox("Parametric ?")][TableBox(1)]<<make combined data table;您沒有在任何平台啟動中使用 By(),因此不需要 [1]。
要將所有表放入一個數據表中,最簡單的方法是從單個窗口中的所有報告開始。
您可以使用 New Window() 來創建您自己的報表窗口。
dt = Open( "$SAMPLE_DATA\Reliability\Tobit2.jmp" );
myWin = New Window( "My Window",
fm1 = dt << Fit Model(
Y( :YLow, :YHigh ),
Effects( :age, ),
Personality( Parametric Survival ),
Distribution( LogNormal ),
Run( Likelihood Ratio Tests( 1 ) ),
);
fm2 = dt << Fit Model(
Y( :YLow, :YHigh ),
Effects( :liquidity ),
Personality( Parametric Survival ),
Distribution( LogNormal ),
Run( Likelihood Ratio Tests( 1 ) ),
);
fm3 = dt << Fit Model(
Y( :YLow, :YHigh ),
Effects( :age, :liquidity ),
Personality( Parametric Survival ),
Distribution( LogNormal ),
Run( Likelihood Ratio Tests( 1 ) ),
);
);
combined = myWin[Outline Box( "Parametric ?" )][Table Box( 1 )] << make combined data table;
請注意,我們不需要獲取報告對象,因為我們有對報告窗口的引用,我的勝利, 已經。
要獲得類似於您在原始帖子中顯示的表格,您需要 Split() 從製作組合數據表中獲得的表格。
combined <<Split(
Split By( :Column 1 ),
Split( :Column 2 ),
Remaining Columns( Drop All )
);
我知道您還想要一列來指示行代表哪個模型。 根據您決定運行哪些模型的方式,您自己保留該列表並在數據表中添加包含該信息的列可能更容易。
如果您不知道指定的模型,可以從參數化生存報告中提取它,但這並不容易。
-傑夫
回复:將 AIC 導出到新數據表的腳本好吧,所以我們越來越近了。 即使我粘貼了錯誤的腳本,傑夫也給了我正確的答案。 以下腳本為示例數據提供了所需的表:
dt =打開( “$SAMPLE_DATA/可靠性/Tobit2.jmp” ) ;
// 添加一個隨機的 'by' 列
按列= dt <<新專欄( “經過” ,數字,標稱,公式(隨機整數( 1個, 2個))) ;
// 製作隱形報告
調頻= dt <<擬合模型(
是( :低, : Y高) ,
效果( :年齡, :流動性) ,
經過( :經過) ,
性格(參數生存) ,
分配(對數正常) ,
跑步(似然比檢驗( 1個) ) ,
) ;
// 獲取報表層的引用
調速表=調頻<<報告;
調速表[ 1個][大綱框( “參數化?” )][表格框( 1個)] <<製作組合數據表;
關閉( dt ,不保存) ;
// 這個腳本按照它應該的方式工作!!
但是為什麼當我刪除按列= dt <<新專欄( ...) 和經過( :經過) ,該腳本不再生成表格?
由於我的目標是從多個報告創建一個組合數據表,我如何讓下面的示例腳本工作:
dt =打開( “$SAMPLE_DATA/可靠性/Tobit2.jmp” ) ;
// 製作隱形報告
調頻1 = dt <<擬合模型(
是( :低, : Y高) ,
效果( :年齡, ) ,
性格(參數生存) ,
分配(對數正常) ,
跑步(似然比檢驗( 1個) ) ,
) ;
調頻2 = dt <<擬合模型(
是( :低, : Y高) ,
效果( :流動性) ,
性格(參數生存) ,
分配(對數正常) ,
跑步(似然比檢驗( 1個) ) ,
) ;
調頻3 = dt <<擬合模型(
是( :低, : Y高) ,
效果( :年齡, :流動性) ,
性格(參數生存) ,
分配(對數正常) ,
跑步(似然比檢驗( 1個) ) ,
) ;
// 獲取報表層的引用
fmrep1 =調頻1 <<報告;
fmrep1 [ 1個][大綱框( “參數化?” )][表格框( 1個)] <<製作組合數據表;
謝謝大家!!!
J.P
回复:將 AIC 導出到新數據表的腳本您在這一行中遇到了一些下標錯誤:
fmrep[1]["Parameter Estimates"][TableBox(1)] << Make Combined Data Table;
相反,它應該是:
fmrep[Outlinebox("Parametric ?")][TableBox(1)]<<make combined data table;您可以使用 Outlinebox(1) 或將完整標題放在那裡但通配符“?”使它更通用一些。
-傑夫
回复:將 AIC 導出到新數據表的腳本馬克和伊恩,感謝您的寶貴時間! 不過,我仍然沒有做對,因為我下面的腳本版本仍然不會生成表格。 我試過結合你的兩個例子:
dt =打開( “$SAMPLE_DATA/大類.JMP” ) ;
biv = dt <<雙變量(
是( :高度) ,
X ( :重量) ,
擬合線,
經過( :性別)
) ;
調速表=調頻<<報告;
調速表[ 1個][ “參數估計” ][表格框( 1個)] <<製作組合數據表;
有任何想法嗎?
謝謝你,
J.P
回复:將 AIC 導出到新數據表的腳本我在下標中使用“參數估計”來定位特定輪廓框的地方,您可以改用“參數生存擬合 - 模型 633”。
回复:將 AIC 導出到新數據表的腳本糟糕! 我知道你想要一張桌子,而不是日記。 在這種情況下,“製作組合數據表”可能更直接。
回复:將 AIC 導出到新數據表的腳本基於 Mark 的解釋,這裡有一種方法:
dt =打開( “$SAMPLE_DATA/可靠性/Tobit2.jmp” ) ;
// 添加一個隨機的 'by' 列
按列= dt <<新專欄( “經過” ,數字,標稱,公式(隨機整數( 1個, 2個))) ;
// 製作隱形報告
調頻= dt <<擬合模型(
是( :低, : Y高) ,
效果( :年齡, :流動性) ,
經過( :經過) ,
性格(參數生存) ,
分配(對數正常) ,
跑步(似然比檢驗( 1個) ) ,
無形的
) ;
// 獲取報表層的引用
調速表=調頻<<報告;
// 這將是一個列表,每個“by”組一個項目
大綱標題=調頻代表<<獲取標題;
// 製作一個空的顯示框
潤滑劑=排隊箱( NCol ( 1個)) ;
// 添加我們需要的內容
為了( o = 1個, o <= NI項目(大綱標題) , o ++,
潤滑劑<<附加(
輪廓框(大綱標題[ o ] ,
(調頻代表[ o ])[表格框( 1個)] ;
) ;
) ;
) ;
關閉( dt ,不保存) ;
// 寫日記
新窗戶( “報告” , <<雜誌,潤滑劑) ;
唯一的困難是知道要包括哪些表格框。 要解決這個問題,請右鍵單擊輪廓節點的三角形,然後選擇“編輯”>“顯示樹結構”。
回复:將 AIC 導出到新數據表的腳本感謝您的快速回复,馬克! 這非常有幫助和教育意義,儘管起初它沒有生成數據表,直到我將最後一點重寫為
報告( biv [ 1個] )[ “參數估計” ][表格框( 1個)] <<製作組合數據表;
通過以下示例: 46983 - 在使用 By 變量時,如何從分佈報告中創建匯總統計的組合數據表.
但是,我仍然無法將其轉化為我的工作流程,可能是因為我想要的表格沒有標題(例如“參數估計”)。 以下是一份報告的示例。 圈起來的部分就是我要製作成數據表的部分。 我在底部包含了我正在使用的腳本示例。 挑戰在於如何將同時生成的約 100 份報告中圈出的數據添加到一個數據表中。 我已經添加了我正在尋找的決賽桌的屏幕截圖,我目前正在手動將其輸入到 Excel 中(糟糕)。 我還需要一種方法來將模型#(例如 633)添加到每一行。
再次感謝你的幫助!
J.P


這是我正在使用的腳本示例:
擬合模型(
審查( :分散的) ,
審查代碼( “0” ) ,
是( :分散天數) ,
效果( :重量,:年,:來源,:易位,:治療,:地質學,:地點, ) ,
性格(參數生存) ,
分配(弗雷謝) ,
跑步(似然比檢驗( 1個) ) ,
發送報告(
派遣(
{} ,
參數生存擬合,
輪廓框,
{設置標題( “參數化生存擬合 - 632 型” )}
)
)
) ;
擬合模型(
審查( :分散的) ,
審查代碼( “0” ) ,
是( :分散天數) ,
效果( :重量,:年,:來源,:易位,:治療,:地質學, ) ,
性格(參數生存) ,
分配(弗雷謝) ,
跑步(似然比檢驗( 1個) ) ,
發送報告(
派遣(
{} ,
參數生存擬合,
輪廓框,
{設置標題( “參數生存擬合 - 模型 633” )}
)
)
) ;
回复:將 AIC 導出到新數據表的腳本您可以通過右鍵單擊報告中包含 AIC 值的表並選擇製作組合數據表來以交互方式生成此結果。
等效腳本需要將與菜單命令同名的消息發送到負責在報告中顯示 AIC 值的顯示框對象。 使用以下示例來說明這個想法:
- 開大課
- 啟動以身高、體重和性別作為分組變量的雙變量平台
- 在兩組中擬合一條線
- 獲取對報表層的引用
- 將報告中的顯示樹重複下標到第一個表的級別(例如,參數估計)
- 發送消息
dt =打開( “$SAMPLE_DATA/大類.JMP” ) ;
biv = dt <<雙變量(
Y( :高度) ,
X( :重量) ,
擬合線,
經過( :性別)
);
biv4 = biv <<報告;
二進製文件[ 1個][ “參數估計” ][表格框( 1個)] <<製作組合數據表;