通过 JSL 和列号/名称在逐步回归中添加/删除效果大家好!
我确实需要这方面的帮助,因为我的论文使用的是 JMP 和 JSL。 我目前正在通过 JSL 使用 JMP 来分析一些数据,我的重点是逐步回归。 我将顺便附上一些代码片段,以便于提供帮助。
基本上
1.) 如何通过列号在初始模型上添加多重效果?
目前,我可以仅使用我想要的列号设置 Y,但无法使用列号添加 X。
我希望事情从此开始
obj = dt << Fit Model(Y(:Column Name(i)),
Effects(
:Effect1Name, :Effect2Name, /*and so on and so forth*/
),
Personality(Stepwise), Run Model(Stopping Rule(MinimumBIC))
);
对此
obj = dt << Fit Model(Y(:Column Name(i)),
Effects(
:Column(/*indices of columns to place as effects*/)
),
Personality(Stepwise), Run Model(Stopping Rule(MinimumBIC))
);
2.) 如何消除最不显着的影响?
运行原始脚本后,我发现有些效果并不是那么显着。 默认脚本将使用
obj << Remove(:/*hardcoded column name*/);
但我希望它灵活,这样我就可以自动化它,使它看起来像这样
obj << Remove(:Column Name(indextoremove));
但上面的代码片段会产生此错误消息
Term not found in access or evaluation of 'Column Name' , Column Name/*###*/(indextoremove)
谢谢!
回复:通过 JSL 和列号/名称在逐步回归中添加/删除效果<SPAN class="token string">^effect_cols^ doesnt appear to work within eval(parse(eval insert(Step_Str))); as the brackets "{" of the list still exist.</SPAN>回复:通过 JSL 和列号/名称在逐步回归中添加/删除效果你好,我们又见面了@cwillden !
受到我之前所做的事情的启发并结合您的代码片段,我更改了代码中的一些内容。 现在,它起作用了!
非常感谢你!
回复:通过 JSL 和列号/名称在逐步回归中添加/删除效果你好@cwillden ,
感谢回复! 你极大地解决了我的第一个问题(添加多种效果)!
关于第二个问题,我已经能够删除 p 值最大的项。 然而,我相信这不是我用来删除术语的标准。
我正在做的事情(如果我是通过点击方法而不是脚本来执行此操作)是:
- 加载表。
- 运行拟合模型模块
- 添加 Y 和 X。
- 选择逐步回归
- 构建模型。 (点击“前往”)
- 单击“运行”以显示报告。
- 转至参数估计表。
- 根据 Prob>|t| 检查并删除项。
我相信您发送的代码是根据逐步拟合窗口的当前估计表的 Prob>F 删除项。 我想要做的是根据 Prob>|t| 删除术语报告的参数估计表:拟合模型窗口。
再次感谢!
回复:通过 JSL 和列号/名称在逐步回归中添加/删除效果你好@pedbundoc ,
欢迎来到社区,祝您论文顺利。
与其他对话框输入不同,效果输入不仅仅是列列表。您还可以在该参数中指定更高阶的效果。您可以使用“column(1)、column(2)、column(3)、column(1)*column(2)、column(2)*column(2)”等构建效果列表。此外,在任何情况下,您都不能(我相信)在 Column() 函数中指定多个索引。更好的解决方案是获取列引用列表并使用列索引对列表进行子集化,如下所示:
dt = Current Data Table();
all_cols = dt << Get Column Reference();
//let's say factors are columns 2-4
effect_cols = all_cols[2::4];
现在,JMP 似乎不喜欢让我直接插入变量effect_cols 作为拟合模型脚本的Effects 参数。它查找名为“effect_cols”的列,而不是评估列表。因此,您可以从字符串中解析拟合模型脚本,我们将其替换为effect_cols的评估,如下所示:
Step_Str = "\[step = dt << Fit Model(
Y( Column(5) ),
Effects(
^effect_cols^
),
Personality( "Stepwise" ),
Run
);]\";
eval(parse(eval insert(Step_Str)));
如果您只有主效应,这应该对您有用。否则,你就必须更有创意。还是完全可行的。
现在,关于消除效果的问题。只有当您给它一个与其中一个效果的名称匹配的字符串参数时,Remove 才会起作用。您可以像我们之前那样使用 eval(parse(eval insert())) 序列来解析字符串,其中我们将其子放入包含要删除的效果名称的变量中。下面是一个示例,我采用最大 p 值的效应并将其删除:
//Get a reference to the report window containing the stepwise object
step_rprt = step << Report;
//get the term names and current p-values from Current Estimates
terms = step_rprt["Current Estimates"][StringColBox(1)] << Get;
pvals = step_rprt["Current Estimates"][NumberColBox(5)] << Get;
//Remove Intercept from each
remove from(terms,1); //remove intercept
remove from(pvals,1); //remove p-value for intercept
max_index = Contains(pvals, max(pvals)); //get index of max p-value
//create an expression to remove the term with the largest p-value
remove_worst = parse(eval insert("\[step << Remove("^terms[max_index]^");]\"));
//Evaluate the expression
eval(remove_worst);希望有帮助!