Steigungs- und SchnittpunktfunktionenIch war sehr überrascht, als ich herausfand, dass JMP keine Steigungs- oder Schnittpunktfunktion hat. Kann das wirklich so sein?
Es wäre toll, wenn Funktionen wie Slope(xMatrix, yMatrix), Intercept (xMatrix, yMatrix), Col Slope(xCol, yCol, By Vraiables) und Col Intercept(xCol, yCol, By Vraiables) wurden hinzugefügt (und Diagnosefunktionen wie R2, SE usw.), was einfache lineare RMS-Regressionskoeffizienten ergibt.
Ich weiß, dass ich die Regressionen in Bivariate durchführen, eine Datentabelle mit Steigungen usw. erstellen und meine ursprüngliche Tabelle damit aktualisieren kann, aber das ist nicht dynamisch und für eine große Anzahl von Regressionsanalysen nicht praktikabel.
Ich hoffe, dass Sie solche Funktionen in Zukunft hinzufügen werden.
Betreff: Steigungs- und Schnittpunktfunktionen** Bearbeiten:
Basierend auf diesem Beitrag habe ich die JSL-Funktion Linear Regression() in JMP 14 hinzugefügt. Die JSL zum Extrahieren der Steigung und des Achsenabschnitts ist jetzt viel einfacher:
coefs = Linear Regression( y, X )[1]; <BR />coefs[1]; // intercept
coefs[2]; // slope
Verschiedene Diagnosedaten wie T-Test-Statistik, p-Wert und R-Quadrat werden ebenfalls zurückgegeben und (optional) übersichtlich im Protokollfenster ausgedruckt.Beachten Sie, dass die lineare Regression() ist fähig zu mehr als eine einfache lineare Regression. Im Skriptindex finden Sie drei verschiedene Beispiele für die Verwendung der Funktion mit allen optionalen Funktionen.
***
Jesper,
Danke für die Empfehlung. Das ist ein guter Vorschlag und ich werde versuchen, in einer zukünftigen Version von JMP eine bessere Lösung hinzuzufügen.In der Zwischenzeit habe ich in JMP 13 eine JSL-Funktion namens Least Squares Solve hinzugefügt, die für Sie nützlich sein könnte.
In zwei Codezeilen können Sie Schätzungen für den Achsenabschnitt, die Steigung und die Standardfehler erhalten (den Code zum Extrahieren der Ergebnisse nicht mitgerechnet).Es ist allgemeiner als das, was Sie verlangen, und mit einigen Kenntnissen der linearen Algebra am einfachsten zu verstehen. Außerdem werden keine R^2-Werte oder Modellanpassungsdiagnosen gemeldet, die auf Plattformen wie „Fit Y by X“ verfügbar sind.
Um Ihnen zu zeigen, wie Sie eine einfache lineare Regression mit Least Squares Solve anpassen, habe ich einen Zufallsvektor für x und dann y generiert, der linear von x abhängt.
// Generating some data
intercept = 2; slope = 4;
x = J(100,1,Random Normal());
y = intercept + x * slope +J (100,1,Random Normal(0,.3));
In JMP 13 erfordert Least Squares Solve eine Entwurfsmatrix und es wird kein Intercept-Term für Sie hinzugefügt. Um einen Achsenabschnitt hinzuzufügen, müssen Sie dem beobachteten x eine Spalte mit Einsen hinzufügen. Die JSL hierfür ist:
// add an intercept term by adding a column of 1s to the design matrix, X
X.design = J(nrow(x),1) || x;
Wenn Sie mit linearer Algebra vertraut sind, löst Least Squares Solve die mit dem Modell verknüpften Normalgleichungen:
y = X.design * Beta + Fehler
Da X.design jedoch zwei Spalten hat und die erste eine Spalte mit Einsen ist, vereinfacht sich dieses Modell auf eine einfache lineare Regression, d. h. für einzelne i:
y_i = Achsenabschnitt + Steigung * x_i + Fehler_i.
// Solve for intercept, slope, and variance terms for each
{beta, var} = Least Squares Solve(X.design, y);
Least Squares Solve() gibt die geschätzten Beta-Koeffizienten (in diesem Fall Achsenabschnitt und Steigung) sowie die zugehörigen Varianzen und Kovarianzen zurück. Beachten Sie, dass der Standardfehler die Quadratwurzel der Varianz einer Schätzung ist. Um den Achsenabschnitt, die Steigung und ihre jeweiligen Standardfehler zu extrahieren, lautet der Code:
// To retrieve the intercept, slope, and their associated standard errors:
beta[1]; //the intercept
beta[2]; //the slope
sqrt(var[1,1]); // the standard error for the intercept
sqrt(var[2,2]); // the standard error for the slope
Ich hoffe das hilft,
Milo
Betreff: Steigungs- und SchnittpunktfunktionenEs führt die Berechnungen durch, die ich möchte, aber nicht auf die Weise, die ich bevorzugen würde. Auch hier kann ich die Berechnungen durchführen, das ist also nicht das Problem. Ich denke nur, dass es einen einfacheren Weg geben könnte (sollte).
Betreff: Steigungs- und SchnittpunktfunktionenHallo Jesper,
Hast du den ... gesehen Add-In zum Sammeln von Steigungen und Abschnitten ?
Ich glaube, das wird tun, was Sie wollen.
Prost,
Stan
Betreff: Steigungs- und SchnittpunktfunktionenDanke
Ich glaube, ich habe das letztere Beispiel auch gesehen, als ich nach der Lösung suchte. Ich glaube jedoch immer noch nicht, dass es mein Problem löst. Mein Problem ist nicht, dass ich Steigung und Achsenabschnitt nicht berechnen kann, sondern dass es unnötig umständlich erscheint, dies zu tun.
In Ihrem Beispiel muss ich die Funktionen skripten und außerdem Code generieren, um x- und y-Matrizen für jede relevante By-Variable aus meiner Tabelle zu extrahieren.
Meine Frage bezieht sich nicht auf Hilfe bei den Berechnungen. Ich möchte nur meinen Wunsch nach diesen integrierten Funktionen zum Ausdruck bringen. Wenn es sie gäbe, würde ich sie regelmäßig verwenden. Und jetzt vermisse ich sie genauso häufig.
Jesper
Betreff: Steigungs- und SchnittpunktfunktionenDer JMP-Skripthandbuch hat einen Abschnitt über Statistische Beispiele im Datenstrukturen Abschnitt über Matrizen Das zeigt, wie man die Matrixoperationen verwendet, um eine lineare Regression zu berechnen.
Ich habe dieses Beispiel verwendet, um die von Ihnen gesuchten Funktionen „slope()“ und „intercept()“ zu erstellen.
slope = Function( {x, y},
{beta},
If( !(Is Matrix( x ) & Is Matrix( y ) & N Col( x ) == 1 & N Col( y ) == 1),
Show( "x or y arguments are not matrices or they have more than one column" );
Throw();
,
x = J( N Row( x ), 1 ) || x; // put in an intercept column of 1s
beta = Inv( X` * X ) * X` * Y; // the least square estimates
beta[2];
)
);
intercept = Function( {x, y},
{beta},
If( !(Is Matrix( x ) & Is Matrix( y ) & N Col( x ) == 1 & N Col( y ) == 1),
Show( "x or y arguments are not matrices or they have more than one column" );
Throw();
,
x = J( N Row( x ), 1 ) || x; // put in an intercept column of 1s
beta = Inv( X` * X ) * X` * Y; // the least square estimates
beta[1];
)
);
Y = [98, 112.5, 84, 102.5, 102.5, 50.5, 90, 77, 112, 150, 128, 133, 85, 112];
X = [65.3, 69, 56.5, 62.8, 63.5, 51.3, 64.3, 56.3, 66.5, 72, 64.8, 67, 57.5, 66.5];
s = slope( x, y );
i = intercept( x, y );
Show( s, i );
Der Statistische Beispiele Der Abschnitt erweitert das Beispiel, um zu zeigen, wie Residuen und andere Diagnoseergebnisse auch für die multiple Regression berechnet werden.
Ich werde dieses Beispiel unten wiederholen.
// open the data table
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// get data into matrices
x = (Column( "Age" ) << Get Values) || (Column( "Height" ) << Get Values);
x = J( N Row( x ), 1, 1 ) || x;
y = Column( "Weight" ) << Get Values;
// regression calculations
xpxi = Inv( x` * x );
beta = xpxi * x` * y; // parameter estimates
resid = y - x * beta; // residuals
sse = resid` * resid; // sum of squared errors
dfe = N Row( x ) - N Col( x ); // degrees of freedom
mse = sse / dfe; // mean square error, error variance estimate
// additional calculations on estimates
stdb = Sqrt( Vec Diag( xpxi ) * mse ); // standard errors of estimates
alpha = .05;
qt = Students t Quantile( 1 - alpha / 2, dfe );
betau95 = beta + qt * stdb; // upper 95% confidence limits
betal95 = beta - qt * stdb; // lower 95% confidence limits
tratio = beta :\</img> stdb; // Student's T ratios
probt = (1 - t Distribution( Abs( tratio ), dfe )) * 2; // p-values
// present results
New Window( "Big Class Regression",
Table Box(
String Col Box( "Term", {"Intercept", "Age", "Height"} ),
Number Col Box( "Estimate", beta ),
Number Col Box( "Std Error", stdb ),
Number Col Box( "TRatio", tratio ),
Number Col Box( "Prob>|t|", probt ),
Number Col Box( "Lower95%", betal95 ),
Number Col Box( "Upper95%", betau95 )
)
);
Betreff: Steigungs- und SchnittpunktfunktionenIch sehe, dass es eine Problemumgehung bietet. Ich konnte die Berechnungen bereits durchführen, allerdings nicht auf einfache Weise. Mein Beitrag war eher eine Feature-Anfrage. Das Fehlen dieser Funktionen scheint ein seltsames Versäumnis zu sein.
Betreff: Steigungs- und SchnittpunktfunktionenVielleicht haben Sie es bereits gesehen, aber falls nicht, gibt es einen entsprechenden Thread Hier .