如何使列表的变量适用于“Fit Life by X”中的分位数/概率估计?大家好,
我想制作一个用于可靠性估计的脚本。 我的任务之一是评估估计的分位数/概率。
在这些表达式中(请参阅下面的代码),如果我使用列表显式列出所有类别,例如 {0, 1, 2, 3},则表达式可以正常工作。 但是,如果我将变量用于列表,然后使用该变量而不是在代码中显式编写列表,则表达式不起作用。
这是一个例子。
下面的代码工作正常:
Lognormal Estimate Probability( Profile, {1000}, {0 ,1, 2, 3} )
以下代码不起作用:
list_Category_num = {0 ,1, 2, 3}
Lognormal Estimate Probability( Profile, {1000}, list_Category_num )
我尝试搜索这个论坛,到目前为止,尝试使用“eval()”、“eval list()”、“eval expr()”等命令,但问题仍然存在。
下面是完整的代码:
Fit Life by X(
// Set distribution and parameters
Distribution( Lognormal ),
Nested Model Tests( Location and Scale ),
Y( :ResponseVariable ),
X( :Category ),
Censor( :Censor ),
Censor Code( 1 ),
// Fit Lognormal and set confidence interval
<<FIT lognormal=""></FIT>
非常感谢您的帮助。
高级统计建模自动化和脚本编写数据探索和可视化实验设计可靠性分析视窗回复:如何使列表的变量适用于“Fit Life by X”中的分位数/概率估计?感谢您向技术支持报告该问题, @Bhume_Chant
我错过了“个人资料”。 你的观察是正确的。 在 JMP 16 中,需要“轮廓”。 即选择“Likelihood CI”类型。 请在您的脚本中添加“个人资料”。

从 JMP 17 开始,不再需要“轮廓”。 Wald 和 Lifelihood CI 均已报告。
回复:如何使列表的变量适用于“Fit Life by X”中的分位数/概率估计?非常感谢彭老师!
首先,我刚刚按照您的建议向 JMP 支持团队发送了一封电子邮件。 该案件的案件编号为:TS-00030985。
其次,非常感谢您还详细解释了包装平台对象和包装消息。 当我以后需要编写JSL时,我会记住这个重要的实践。
顺便说一句,关于您显示的代码,它们都有效,但我必须在 {1000} 前面添加“个人资料”一词,如下所示:
此代码适用于我正在使用的 JMP 版本:
Lognormal Estimate Probability(profile, {1000}, vvv )
此代码不会生成错误,但我使用的 JMP 版本没有任何反应:
Lognormal Estimate Probability({1000}, vvv )
我不确定我需要添加“配置文件”的原因是否与我正在使用的 JMP 版本相关。 我目前使用的是旧版本的 JMP(版本 16.2)。
回复:如何使列表的变量适用于“Fit Life by X”中的分位数/概率估计?感谢您让我注意到这一点, @马克贝利!
@Bhume_Chant首先请联系support@jmp.com报告此问题。 当前程序需要一个数字列表,可以是文字数字列表或变量列表,但不需要变量,它是一个列表。 这应该得到解决。 请联系技术支持。 我们很感激。
为了解决您当前的问题,这里有一个解决方法,与马克的建议一致。 但我提供了更多的见解,因此类似的技术可能在其他不需要“评估”行为的地方有用。 这是两个有效的代码片段。
这是第一个
vvv = {0,1,2,3};
obj = Fit Life by X(
Distribution( Lognormal ),
Nested Model Tests( Location and Scale ),
Y( :ResponseVariable ),
X( :Category ),
Censor( :Censor ),
Censor Code( 1 ),
);
eval(
substitute(
expr(
obj << set scriptables(
{
Lognormal Estimate Probability( {1000}, vvv )
}
)
),
expr(vvv), vvv
)
);
这是第二个,
vvv = {0,1,2,3};
eval(
substitute(
expr(
Fit Life by X(
Distribution( Lognormal ),
Nested Model Tests( Location and Scale ),
Y( :ResponseVariable ),
X( :Category ),
Censor( :Censor ),
Censor Code( 1 ),
<< set scriptables(
{
Lognormal Estimate Probability( {1000}, vvv )
}
)
)
),
expr(vvv),vvv
)
);
将它们与您的脚本进行比较,区别在于包装的表达式。 上面的两个片段包裹在平台对象的外部。 您的脚本包装了一个表达式,该表达式是一条消息。
现在我解释为什么环绕消息不起作用。 当消息被包装在 eval-substitute 技巧的一侧时,仍然需要平台实现来识别这个 eval-substitute 的含义。 在这种情况下,平台不希望它是一个表达式。 我怀疑大多数平台都是如此。
因此,根据我从这个案例中学到的知识,我的建议是使用平台对象级别之上的 eval-substitute 技巧。
回复:如何使列表的变量适用于“Fit Life by X”中的分位数/概率估计?现在可以了!
太感谢了!
回复:如何使列表的变量适用于“Fit Life by X”中的分位数/概率估计?这是脚本索引中示例的另一种方法:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Reliability/Devalt.jmp" );
obj = dt << Fit Life by X(
Y( :Hours ),
X( :Temp ),
Distribution( Lognormal ),
Censor( :Censor ),
Relationship( Arrhenius Celsius ),
Freq( :Weight )
);
p = obj << Probability( Lognormal, 30000, 10 );
Show( p );
回复:如何使列表的变量适用于“Fit Life by X”中的分位数/概率估计?您必须在启动平台后发送消息。 像这样的事情:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Reliability/Devalt.jmp" );
obj = dt << Fit Life by X(
Y( :Hours ),
X( :Temp ),
Distribution( Lognormal ),
Censor( :Censor ),
Relationship( Arrhenius Celsius ),
Freq( :Weight )
);
val = {0,1,2,3};
Eval(
Substitute(
Expr(
obj << Set Scriptables( {Lognormal Estimate Probability( Profile, {1000}, vvv ) } );
),
Expr( vvv ), val
)
);回复:如何使列表的变量适用于“Fit Life by X”中的分位数/概率估计?你好,马克,非常感谢你的帮助,但是你能帮我解决这个问题吗?
我尝试嵌入上面的脚本,没有错误,但也没有显示结果。 我不知道我哪里做错了。
这是按预期工作的脚本:
Fit Life by X(
Distribution( Lognormal ),
Nested Model Tests( Location and Scale ),
Y( :ResponseVariable ),
X( :Category ),
Censor( :Censor ),
Censor Code( 1 ),
<< set scriptables(
{
Lognormal Estimate Probability( Profile, {1000}, {0,1,2,3} )
}
)
);以下是预期结果:

现在,我尝试用脚本替换“对数正态估计概率”部分,如下所示:
vvv = {0,1,2,3};
Fit Life by X(
Distribution( Lognormal ),
Nested Model Tests( Location and Scale ),
Y( :ResponseVariable ),
X( :Category ),
Censor( :Censor ),
Censor Code( 1 ),
<< set scriptables(
{
eval(
substitute(
expr(Lognormal Estimate Probability( Profile, {1000}, vvv )),
expr(vvv), vvv
)
)
}
)
);没有错误,但也没有任何反应:

顺便说一下,我还附上了用于生成结果的虚拟数据。
非常感谢。
回复:如何使列表的变量适用于“Fit Life by X”中的分位数/概率估计?并非所有函数在调用时都会计算变量参数,因此您必须使用参数的文字值。 同时你可以使用表达式来解决这个问题。 人们有不同的风格。 这是一个例子来说明这一想法。
list_Category_num = {0 ,1, 2, 3};
Eval(
Substitute(
Expr( Lognormal Estimate Probability( Profile, {1000}, vvv ) ),
Expr( vvv ), list_Category_num
)
);