分段回归<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />有谁知道如何在 JMP 上执行分段回归并计算断点(两条线相交的位置)?
回复:分段回归对于那些还没有看过这个的人,这是我的同事写的一个可能有用的博客@杰瑞鱼关于如何在 JMP 中构建和操作分段拟合(使用非线性平台):分段非线性解第 3 部分:使用 JMP 的公式编辑器求解未知参数。
我将其包含在这里,因为它与本次讨论非常吻合。
回复:分段回归我最近尝试过这个,它对我来说比非线性平台实用程序更有意义。我有兴趣了解迭代方案如何收敛到我的解决方案?我尝试为我的数据选择一个合理的 d 值(切点),当我“锁定”d 的值并重新单击从使用以下工具启动非线性平台:
Nonlinear( Y( :Y ), X( :Ypred ), Newton, Finish );
代码的一部分。
有没有一种简单的方法可以更改这个简短的脚本来调用数据表? (手动输入 X 和 Y 的值)?
我确信这是一个“JSL 新手问题”,所以我提前道歉......
我以一种令人讨厌的方式将其复制粘贴到我保存的数据表中,其中包含列,{X,Y,Ypred}和我填充的数据:
Parameter( {a = 5, b = 45, c = -100, d = 0.109}, a + b * :X + c * (:X - d) * (:X > d) );
Nonlinear( Y( :Y ), X( :Ypred ), Newton, Finish );这就是我得出数据结果的方式!再次感谢您对社区的贡献。
回复:分段回归谢谢我会尝试一下!
回复:分段回归正如 Dodo 所建议的,分段回归可以使用非线性平台来完成。 下面是一个基于上面断棍示例的示例。
New Table( "piecewise",
Add Rows( 20 ),
New Column( "X",
Continuous,
Set Values( [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] )
),
New Column( "Y",
Numeric,
Set Values( [15, 12, 27, 31, 26, 31, 42, 47, 56, 56, 47, 46, 36, 44, 38, 35, 34, 35, 25, 19] )
),
New Column( "Ypred",
Numeric,
Formula( Parameter( {a = 20, b = 1, c = -10, d = 10}, a + b * :X + c * (:X - d) * (:X > d) ) )
)
);
Nonlinear( Y( :Y ), X( :Ypred ), Newton, Finish );
回复:分段回归如果这是一个简单的断棍关系,你可以这样做:
// Create a broken stick relationship with some noise;
x = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20];
y = [15, 12, 27, 31, 26, 31, 42, 47, 56, 56, 47, 46, 36, 44, 38, 35, 34, 35, 25, 19];
expr_FX = expr(a + b*x + c*(x-d):*(x>d));
expr_SSE = expr(sum((y-expr_FX)^2));
// Supply a set of starting values;
a = 20; b = 1; c = -10; d = 15;
print("Starting values:");
show(a, b, c, d);
sse = minimize(expr_SSE, {a, b, c, d}, << tolerance(1e-5));
print("Final estimates:");
show(a, b, c, d);
show(eval(expr_FX));
我基于《JMP 10 手册》第 8 章中的最小二乘示例,将表达式中的断棒关系替换为示例中的指数模型。断点将是参数 d,因为它是线斜率发生变化的 x 值。请注意,当您将两个矩阵 (xd) 和 (x>d) 相乘时,您将需要逐元素乘积:*而不是简单的乘法。您可能还需要一个相对较好的断点起始值,以便表达式收敛。在此示例中,所有输出都写入日志。
据推测,这也可以在非线性平台(分析|建模|非线性)中设置,但我还没有尝试过,因为我不太熟悉在数据表中使用公式。这些帮助有用?