Hallo zusammen,
Ich kratzte sich am Kopf und versuchte herauszufinden, warum ein Skript, das ich hier gepostet hatte, nicht auf dem Computer eines anderen Computers funktionierte, als es fehlerhaft auf meinem arbeitete. Es stellt sich heraus, dass die Reihenfolge der X- und Y-Variablen in der Least Squares Solve-Funktion in JSL in JMP 14 relativ zu JMP 13 invertiert wurde. Das macht mein erstes Skript natürlich unbrauchbar für alle, die eine JMP-Version <14 verwenden, was etwas nervig ist. Sind diese subtilen Änderungen irgendwo dokumentiert?
Viele Grüße, Yves
Vielen Dank Milo für Ihre ausführliche Erklärung. Noch eine Frage: In JMP 14 scheint es für die Lösung unerheblich zu sein, ob die X-Matrix (mit einer ersten Spalte von 1s) erweitert wird. Ist dies auch bei JMP 13 der Fall? Ich habe keinen Zugriff mehr auf JMP 13, außer durch einen unabhängigen Benutzer, der mein Skript verwendet hat. Ich werde Ihre Lösung in Bezug auf die Überprüfung der JMP-Version verfolgen.
Danke noch einmal
Das wäre sehr frustrierend. Es tut mir leid zu hören, dass Sie die Änderung in der JSL-Funktion "Least Squares Solve ()" entdeckt haben.
Das Vertauschen der Reihenfolge der Parameter in einer solchen JSL-Funktion ist außerordentlich selten. Wenn eine Änderung die Kompatibilität mit früheren Versionen unterbricht, listen wir sie in der Versionshinweise .
Wir befinden uns in einer aktiven Entwicklungsumgebung bei JMP, tun aber unser Bestes, um auch die Abwärtskompatibilität aufrechtzuerhalten. Es stimmt, dass sich die Reihenfolge der Parameter von JMP 13.0 (als die Funktion eingeführt wurde) in 14.0 geändert hat. Nicht nur das, aber standardmäßig enthält Least Squares Solve () in 14.0 einen Intercept-Begriff.
Es gab eine Reihe von Gründen, die die Veränderung motivierten. Zunächst wurde Least Square Solve () in JMP 13.0 (von mir) eingeführt und war daher nicht lange im Umlauf. Zweitens habe ich die Reihenfolge und den voreingestellten Abschnittsbegriff in Tandem geändert, so dass Least Squares Solve () in fast allen Anwendungsfällen dazu führen sollte, dass ein Skript nicht ausgeführt wird und nicht in falschen Zahlen. Letzteres wäre besonders schwer zu entdecken. Drittens habe ich in Version 14.0 die JSL-Funktion Linear Regression () eingeführt, die im Wesentlichen das gleiche Problem wie Least Squares Solve () löst, jedoch mit einem benutzerfreundlicheren Zugriff auf die Standardausgabe über eine lineare Regression (z. Tests, R ^ 2 usw.). Mit dieser neuen Funktion war es sinnvoller, die Parameter als y, X zu ordnen, da sie das Problem ay = Xb lösen. Aufgrund der Ähnlichkeiten zwischen diesen beiden Funktionen haben wir uns dazu entschieden, dass sie sich auf dieselbe Weise verhalten, wobei die Parameter in derselben Reihenfolge liegen.
Ich ging hin und her über die Entscheidung, die Reihenfolge für Least Squares Solve () so zu ändern, dass sie mit der linearen Regression () übereinstimmte, aber am Ende machte ich den Aufruf zum Umschalten, da für JMP 14 und weiter sauberer und mehr schien intuitiv.
Wenn Sie wirklich möchten, dass ein Skript in JMP 13 oder JMP 14 mit Least Squares Solve () ausgeführt wird, können Sie Folgendes tun:
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
);
Zu Ihrer Information, ich habe die Änderung im Scripting-Index der beiden JMP-Versionen festgestellt.
Können Sie hier einige Beispiele für die Syntax angeben, die sich zwischen JMP 13 und JMP 14 unterschiedlich verhält? Mir ist keine Änderung bekannt, die in diesem Bereich vorgenommen wurde, schon gar keine, die absichtlich vorgenommen wurde.
Entschuldigung, ich habe gerade Ihre Nachricht noch einmal gelesen. Ich habe vermisst, dass Sie sich auf die Funktion "Least Squares Solve ()" bezogen haben. Ich habe mir die Plattform der Fit Least Squares angesehen.
Lass mich nachforschen.