大家好,
我试着找出为什么我在这里发布的剧本在别人的计算机上运行时,为什么我的工作完美无缺。事实证明,JSL中的最小二乘求解函数中的X和Y变量的顺序在JMP 14中相对于JMP 13被反转。当然,这使得我的初始脚本无法用于使用JMP版本<14的任何人,这有点烦人。这些微妙的变化是否记录在某处?
最好的问候,伊夫
非常感谢Milo的详细解释。还有一个问题:似乎在JMP 14中,X矩阵被增强(初始列为1s)对于解决方案而言并不重要。这是JMP 13的情况吗?除了通过使用我的脚本的独立用户之外,我无法访问JMP 13。我将按照您的解决方案检查它是哪个JMP版本。
再次感谢
那将是非常令人沮丧的。我很遗憾听到你是如何发现最小二乘Solve()JSL函数的变化的。
在像这样的JSL函数中交换参数的顺序是非常罕见的。当更改中断与先前版本的兼容性时,我们将其列在发行说明 。
我们正处于JMP的活跃开发环境中,但我们也尽力保持向后兼容性。你是正确的,参数的顺序从JMP 13.0(引入功能时)变为14.0。不仅如此,默认情况下,14.0中的最小二乘Solve()包含一个截距项。
推动变革的原因有很多。首先,Least Square Solve()是由JMP 13.0引入的(由我),所以它没有长时间流通。其次,我将顺序和默认拦截项串联切换,以便在几乎所有用例中,最小二乘Solve()应该导致脚本不运行而不是错误的数字,后者将特别难以发现。第三,在14.0中,我介绍了JSL函数Linear Regression(),它基本上解决了与Least Squares Solve()相同的问题,但是通过线性回归更加用户友好地访问标准输出(例如标准误差,t-测试,R ^ 2等)。使用这个新函数,将参数排序为y,X更有意义,因为它解决了ay = Xb问题。由于这两个函数之间的相似性,我们选择让它们以相同的方式运行,参数的顺序相同。
我决定切换Least Squares Solve()的顺序,以便它与Linear Regression()相匹配,但我最后调用它来切换它,因为对于JMP 14而言,它似乎更干净,更多直观。
如果你真的想要使用Least Squares Solve()在JMP 13或JMP 14中运行脚本,你可以这样做:
Names Default To Here(1);
// generate data<BR />random reset(123);
x = j(10,2,random normal());
beta = [1, 2];
y = x * beta + j(10,1,random normal(0,.2) );
<BR />// check version
jmpver = num(left(jmpversion(),2));
if(jmpver >= 14,
Least Squares Solve(y, X, <<NOINTERCEPT></NOINTERCEPT> // where in latest versions, the parameter order is switched <BR /> // and an intercept is added by default
/*else if*/ jmpver == 13,
Least Squares Solve(X, y) <BR /> // this function was introduced in JMP 13.0 with limited functionality
);
仅供参考,我注意到两个JMP版本的脚本索引的变化。
您能否提供一些JMP 13和JMP 14之间的语法示例?我不知道在这方面有任何改变,当然不是故意做的。
对不起,我刚刚重新阅读了您的消息。我错过了你指的是Least Squares Solve()函数。我正在寻找Fit Least Squares平台。
我来调查一下