将 AIC 导出到新数据表的脚本<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我正在“拟合参数生存”平台中比较多个模型的 AIC 结果。 此时,我有一个脚本来运行所有模型并生成多个窗口,然后我将 AIC 和其他输出一一复制/粘贴到 Excel 文件中。 不用说,这是一个耗时且浪费的过程。 我是 JSL 的新手,有人能够帮助我创建一个自动化流程,从多个报告窗口中提取 AIC 和其他信息并将它们保存到单个数据窗口中吗? 我正在评估的附加信息是参数收敛、使用的观察结果以及审查和未经审查的值的数量。
谢谢你的帮助!
使用 VBA 宏将数据导入 JMP 并将 JMP 结果返回到 Weibull Analysis 上的 Excel 工作表嗨,大家好,
首先,我要感谢您分享您的脚本发现,它帮助我能够自动化我的数据查询过程。我正在使用 VBA-Macro excel 将表格复制到 JMP 中以执行威布尔分析并获取比例和形状值,然后复制到我的 VBA-Macro excel 文件中。下面是我使用的代码。 希望它对其他人也有帮助。
VBA-Excel 宏。
子 JMP()
将应用程序调暗为 JMP.Application
暗淡文档作为 JMP.Document
设置 app = CreateObject("JMP.Application")
应用程序可见 = 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( :姓名( "TTF,Hr" ) ),
检查器(:检查器),
审查代码( 1 ),
频率(:频率),
<<适合威布尔,
置信区间法(似然法),
<<设置尺度(非参数),
<<抑制图(非参数),
间隔类型(同时),
<<设置脚本(
{概率论文( 刻画器( 1, 置信区间( 1 ), 术语值( 名称( "TTF,Hr" )(4846.6174375, 锁定( 0 ), 显示( 1 )) ) ) ),
威布尔分布( 探查器( 1, 置信区间( 1 ), 项值( 名称( "TTF,Hr" )(4846.6, 锁定( 0 ), 显示( 1 )) ) ) ),
威布尔分位数( 刻画器( 1, 置信区间( 1 ), 项值( 概率( 0.5, 锁定( 0 ), 显示( 1 ) ) ) ) ),
威布尔危险( 探查器( 1, 置信区间( 1 ), 术语值( 名称( "TTF,Hr" )(4846.6, 锁定( 0 ), 显示( 1 )) ) ) ),
Weibull 密度( Profiler( 1, Term Value( Name( "TTF,Hr" )(4846.6, Lock( 0 ), Show( 1 )) ) ) ), 自定义估计( Weibull, 0 )}
),
发送至报告(
Dispatch( {"比较分布"}, "寿命分布", FrameBox, {网格线顺序( 2 ), 参考线顺序( 3 )} ),
Dispatch( {"统计", "模型比较"}, "", TableBox, {按列排序( 2, 1 )} )
)
);
// 自动将参数估计数据复制到新数据表中(例如:untitled.jmp 格式)
fmrep = fm << 报告;
fmrep[Outline Box("参数估计?" )][Table Box( 1 )] << 制作组合数据表;
dt1 = 当前数据表();
dt1 << 另存为( "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值, : Y高) ,
效果( :年龄, :流动性) ,
经过( :经过) ,
性格(参数生存) ,
分配(对数正态分布) ,
跑步(似然比检验( 1 ) ) ,
) ;
// 获取报表层的引用
FM代表=调频<<报告;
FM代表[ 1 ][大纲框( “参数化?” )][表格框( 1 )] <<制作组合数据表;
关闭( dt ,不保存) ;
// 这个脚本按照它应该的方式工作!
但为什么当我删除时按列= dt <<新专栏( ...) 和经过( :经过) ,该脚本不再生成表格?
由于我的目标是从多个报告创建单个组合数据表,因此如何让以下示例脚本发挥作用:
dt =打开( “$SAMPLE_DATA/可靠性/Tobit2.jmp” ) ;
// 制作不可见的报告
调频1 = dt <<适合模型(
是( :低Y值, : Y高) ,
效果( :年龄, ) ,
性格(参数生存) ,
分配(对数正态分布) ,
跑步(似然比检验( 1 ) ) ,
) ;
调频2 = dt <<适合模型(
是( :低Y值, : Y高) ,
效果( :流动性) ,
性格(参数生存) ,
分配(对数正态分布) ,
跑步(似然比检验( 1 ) ) ,
) ;
调频3 = dt <<适合模型(
是( :低Y值, : 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 ( :重量) ,
拟合线,
经过( :性别)
) ;
FM代表=调频<<报告;
FM代表[ 1 ][ “参数估计” ][表格框( 1 )] <<制作组合数据表;
有任何想法吗?
谢谢你,
J.P
回复:将 AIC 导出到新数据表的脚本我在下标中使用“参数估计”来定位特定的轮廓框,您可以使用“参数生存拟合 - 模型 633”。
回复:将 AIC 导出到新数据表的脚本哎呀! 我知道你想要一张桌子,而不是一本日记。 在这种情况下,“制作组合数据表”可能更直接。
回复:将 AIC 导出到新数据表的脚本根据马克的解释,这是一种方法:
dt =打开( “$SAMPLE_DATA/Reliability/Tobit2.jmp” ) ;
// 添加随机“by”列
按列= dt <<新专栏( “经过” ,数字,标称,公式(随机整数( 1 , 2 ))) ;
// 制作不可见的报告
调频= dt <<适合模型(
是( :低Y值, : Y高) ,
效果( :年龄, :流动性) ,
经过( :经过) ,
性格(参数生存) ,
分配(对数正态分布) ,
跑步(似然比检验( 1 ) ) ,
无形的
) ;
// 获取报表层的引用
FM代表=调频<<报告;
// 这将是一个列表,每个“by”组一个项目
大纲标题= FM代表<<获取标题;
// 制作一个空的显示框
卢布=排队框( NCOL ( 1 )) ;
//添加我们需要的内容
为了(哦= 1 ,哦<= N项(大纲标题) ,哦++,
卢布<<附加(
大纲框(大纲标题[哦] ,
( FM代表[哦])[表格框( 1 )] ;
) ;
) ;
) ;
关闭( dt ,不保存) ;
// 写日记
新窗户( “报告” , <<杂志,卢布) ;
唯一的困难是知道要包含哪些表框。 要弄清楚这一点,请右键单击轮廓节点的三角形,然后选择“编辑”>“显示树结构”。
回复:将 AIC 导出到新数据表的脚本感谢您的快速回复,马克! 这非常有帮助且具有教育意义,尽管起初它没有生成数据表,直到我将最后一位重写为
报告( BIV [ 1 ] )[ “参数估计” ][表格框( 1 )] <<制作组合数据表;
按照这个例子: 46983 - 使用“按”变量时如何从分布报告中创建汇总统计数据的组合数据表。
但是,我仍然无法将其转换为我的工作流程,可能是因为我想要的表格没有标题(例如“参数估计”)。 以下是一份报告的示例。 圆圈部分是我想要制作成数据表的部分。 我在底部提供了我正在使用的脚本示例。 挑战在于如何将一次生成的约 100 份报告中的圈出数据添加到一张数据表中。 我添加了我正在寻找的最终表格的屏幕截图,我目前正在手动将其输入到 Excel 中(恶心)。 我还需要一种将型号#(例如 633)添加到每一行的方法。
再次感谢你的帮助!
J.P


这是我正在使用的脚本的示例:
适合模型(
审查( :分散) ,
审查代码( “0” ) ,
是( :距离驱散天数) ,
效果( :重量,:年,:来源,:易位,:治疗,:地质学,:地点, ) ,
性格(参数生存) ,
分配(弗雷谢特) ,
跑步(似然比检验( 1 ) ) ,
发送至报告(
派遣(
{} ,
参数生存拟合,
大纲框,
{设置标题( “参数生存拟合 - 型号 632” )}
)
)
) ;
适合模型(
审查( :分散) ,
审查代码( “0” ) ,
是( :距离驱散天数) ,
效果( :重量,:年,:来源,:易位,:治疗,:地质学, ) ,
性格(参数生存) ,
分配(弗雷谢特) ,
跑步(似然比检验( 1 ) ) ,
发送至报告(
派遣(
{} ,
参数生存拟合,
大纲框,
{设置标题( “参数生存拟合 - 型号 633” )}
)
)
) ;
回复:将 AIC 导出到新数据表的脚本您可以通过右键单击报告中包含 AIC 值的表并选择“创建组合数据表”以交互方式生成此结果。
等效的脚本要求将与菜单命令同名的消息发送到负责在报告中显示 AIC 值的显示框对象。 使用以下示例来实现此想法:
- 开设大班
- 启动双变量平台,以身高、体重和性别作为分组变量
- 在两组中拟合一条线
- 获取报表层的引用
- 重复将报告中的显示树下标到第一个表的级别(例如,参数估计)
- 发送消息
dt =打开( “$SAMPLE_DATA/大类.JMP” ) ;
BIV = dt <<双变量(
Y( :高度) ,
X( :重量) ,
拟合线,
经过( :性别)
);
比4 = BIV <<报告;
比弗[ 1 ][ “参数估计” ][表格框( 1 )] <<制作组合数据表;