回复:从图中提取范围我不知道直接的方法,但这里有一些想法。有些脚本需要一些工作,可能我怀疑对于小问题,没有一个会更快。
- 通过从双变量报告中的表中提取参数和标准误差,然后使用适当的公式创建列,将这些行中的每一行的公式保存到数据表中。然后使用分析器内置的优化器来解决每个问题。
- 使用蛮力方法保存相对较少的点,然后使用拟合模型为它们拟合新曲线,并且然后保存预测公式并使用优化器求解。
- 使用拟合模型进行拟合,您应该能够直接提取预测公式,但可能不是 CI。
- 使用蛮力方法并在最近的几个点之间进行插值,要么在最后两个点之间线性,要么在最近的三个点之间进行二次插值。
从二元图中提取因子范围如何使用任意 Y 值有效地提取此曲线的交叉点及其 95% CI。

dt = Open( "$sample_data/Growth.jmp" );
biv = Bivariate(
Y( :age ),
X( :ratio ),
Fit Line( {Line Color( {204, 121, 41} )}, save studentized residuals ),
SendToReport(
Dispatch(
{},
"Bivar Plot",
FrameBox,
{Grid Line Order( 3 ), Reference Line Order( 4 )}
)
)
);
biv << (Curve[1] << Save Studentized Residuals);
biv2 = Bivariate(
Y( :Studentized Residuals age ),
X( :ratio ),
Fit Polynomial( 2, {Confid Shaded Fit( 1 ), Line Color( {212, 73, 88} )} ),
SendToReport(
Dispatch(
{},
"ratio",
ScaleBox,
{Min( 0.2796875 ), Max( 1.2666259765625 ), Inc( 0.2 ), Minor Ticks( 1 )}
),
Dispatch(
{},
"Studentized Residuals age",
ScaleBox,
{Add Ref Line( 1.96, "Solid", "Black", "", 1 ),
Add Ref Line( -1.96, "Solid", "Black", "", 1 )}
)
)
);所以我想得到曲线和它的 95%CI 交叉 +/- 1.96 的比率值(所以总共 6 个值)。 有没有比我能想到的蛮力更好的解决方案:将预测值和平均置信限公式转储到表中,并将带有值的行添加到表中以查看它何时超过限制?
脚本编写回复:从二元图中提取因子范围您也许可以使用 Minimize() 函数和置信边界表达式。 请参阅帮助优化方法.
回复:从二元图中提取因子范围@马克贝利谢谢,我试过试一试,但语法对我来说不清楚。
这是我得到的,但现在我需要弄清楚如何为它提供正确的优化约束:
Names Default To Here( 1 );
dt = Open( "$sample_data/Growth.jmp" );
biv = Bivariate(
Y( :age ),
X( :ratio ),
Fit Line( {Line Color( {204, 121, 41} )}, save studentized residuals ),
SendToReport(
Dispatch(
{},
"Bivar Plot",
FrameBox,
{Grid Line Order( 3 ), Reference Line Order( 4 )}
)
)
);
biv << (Curve[1] << Save Studentized Residuals);
biv << close window();
biv2 = Bivariate(
Y( :Studentized Residuals age ),
X( :ratio ),
Fit Polynomial( 2, {Confid Shaded Fit( 1 ), Line Color( {212, 73, 88} )} ),
SendToReport(
Dispatch(
{},
"ratio",
ScaleBox,
{Min( 0.2796875 ), Max( 1.2666259765625 ), Inc( 0.2 ), Minor Ticks( 1 )}
),
Dispatch(
{},
"Studentized Residuals age",
ScaleBox,
{Add Ref Line( 1.96, "Solid", "Black", "", 1 ),
Add Ref Line( -1.96, "Solid", "Black", "", 1 )}
)
)
);
biv << (Curve[1] << Mean Confidence Limit Formula);
f =column(dt, n cols(dt)) << Get Formula;
fs = substitute(name expr(f), expr(:ratio), expr(x1));
/*A = [1 5];
b = [-1.96, 1.96];
minFun = Constrained Maximize(
f,
{x1( 0, 5 )},
<<LESSTHANEQ></LESSTHANEQ>
minimize(name expr(f), {})最后一部分不起作用。 谢谢你的帮助!
回复:从二元图中提取因子范围我想知道另一种方法。 如果您对目标响应使用预测刻画器和匹配目标合意性函数会怎样? 然后,您可以选择预测均值和均值的 95% 置信区间估计值。
我可能偏离了你最初的目标......
回复:从二元图中提取因子范围你的代码有点乱。 我清理它并完成了示例,尽管我可能仍在追求错误的目标。
Names Default To Here( 1 );
// example data set
dt = Open( "$sample_data/Growth.jmp" );
// fit first-order polynomial model to response
biv = Bivariate(
Y( :age ),
X( :ratio ),
Fit Line
);
// save residuals for next step
biv << (Curve[1] << Save Studentized Residuals);
biv << Close Window();
// fit second-order polynomial model to residuals
biv = Bivariate(
Y( :Studentized Residuals age ),
X( :ratio ),
Fit Polynomial( 2, {Confid Shaded Fit( 1 ), Line Color( {212, 73, 88} )} )
);
// save formulas for lower / upper 95% confidence bound
biv << (Curve[1] << Mean Confidence Limit Formula);
// get upper formula
f = Column( dt, N Cols( dt ) ) << Get Formula;
// replace predictor name with x
fs = Substitute( Name Expr( f ), Expr( :ratio ), Expr( x ) );
// initialize x, could get x that predicts mean residual = 0
x = 0.5;
// minimize expression that is Abs( residual ), or mean = 0
fa = Insert( Expr( Abs() ), Name Expr( fs ) );
Minimize( fa, { x } );
Show( x );回复:从二元图中提取因子范围是的,那个问题是目标值通常有多个交叉点(一个在左边,一个在右边),并且使用意愿最大化器你会随机得到两个中的一个。
我在拟合模型下尝试了逆预测,但不支持二次项。
回复:从二元图中提取因子范围是的,这确实适用于找到局部最小值,但仍然很难从那里以 1.96 到达下一个交叉点。 您仍然需要沿着曲线向上走,直到值超过 1.96。
为了临时解决这个问题,我为它构建了一个函数,它只需要很少的步骤并在两个方向上输出,直到值超过限制(或最大步数),但我曾期望在 JMP 中有一个求解器函数可以实现更好的算法(例如内置于非线性平台的算法)。 我想现在我有我需要的东西,但我总是乐于寻找更好的方法来做到这一点。
回复:从双变量图中提取因子范围您可以使用探查器中内置的优化器来执行此操作。设置响应限制以匹配目标,然后找到上限和下限,只需使用重置因子网格来定义要搜索的值范围,高于或低于最小值。
Profiler(
Y( :Lower 95% Mean Studentized Residuals age ),
Profiler(
1,
Desirability Functions( 1 ),
Lower 95% Mean Studentized Residuals age <<
Response Limits(
{Lower( -0.04, 0.0183 ), Middle( 1.96, 1 ), Upper( 3.96, 0.0183 ),
Goal( "Match Target" ), Importance( 1 )}
),
Term Value( ratio( 0.8, Min( 0 ), Max( 0.8 ), Lock( 0 ), Show( 1 ) ) )
),
SendToReport(
Dispatch(
{"Prediction Profiler"},
"1",
ScaleBox,
{Min( 0 ), Max( 0.8 ), Inc( 0.2 ), Minor Ticks( 0 )}
)
)
) << Maximize Desirability;
Profiler(
Y( :Lower 95% Mean Studentized Residuals age ),
Profiler(
1,
Desirability Functions( 1 ),
Lower 95% Mean Studentized Residuals age <<
Response Limits(
{Lower( -0.04, 0.0183 ), Middle( 1.96, 1 ), Upper( 3.96, 0.0183 ),
Goal( "Match Target" ), Importance( 1 )}
),
Term Value( ratio( 1.52, Min( 0.8 ), Max( 2 ), Lock( 0 ), Show( 1 ) ) )
),
SendToReport(
Dispatch(
{"Prediction Profiler"},
"1",
ScaleBox,
{Min( 0.8 ), Max( 2 ), Inc( 0.2 ), Minor Ticks( 0 )}
)
)
) << Maximize Desirability;
您还应该能够修改发送给最小化函数的表达式,只需减去 1.96 并最小化残差以获得相同的结果。出于某种原因,即使在调整容差后我得到的值也略有不同(在 profiler v 1.03 中为 1.07,最小化)。
fa = Insert( Expr( Abs() ), parse( "abs( " || char( Name Expr( fs ) ) || " - 1.96 )" ) );
// find lower value
x = 0.2;
Minimize( fa, { x(0.2,0.8) } );
Show( x );
// find upper value
x = 1;
Minimize( fa, { x(0.8,1.5) } );
Show( x );