大家好,
我試著找出為什麼我在這裡發布的劇本在別人的計算機上運行時,為什麼我的工作完美無缺。事實證明,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平台。
我來調查一下