将 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个)] <<制作组合数据表;