Wie kann ich R2 zwischen zwei Variablen (z. B. Spalten) in einem sich bewegenden Fenster (z. B. 10 Datenpaare gleichzeitig) berechnen?
Sina
Danke @Mark_Bailey Und @ron_horne . Das war sehr hilfreich!!
Ich verstehe.
Hier ist ein Beispiel, das auf der Datentabelle „Big Class“ im Ordner „Sample Data“ basiert. Es passt zu einer gleitenden linearen Regression mit einer Spanne von 5. Es gibt den R-Quadrat-Wert in jeder Zeile zurück. Sie können dieses Skript ausführen, um zu sehen, wie es funktioniert.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// example creates a new column with a moving R square with a span of 5
// for regression of :weight versus :height
dt << New Column( "Moving R Square",
Numeric,
Continuous,
Formula(
If( Row() > 2 & Row() < (N Row()-1),
x = J( 5, 1, 1 ) || :height[Index( Row() - 2, Row() + 2 )]`;
y = :weight[Index( Row() - 2, Row() + 2 )]`;
sst = Sum( (y - Mean( y )) ^ 2 );
b = (Inv( x` * x ) * x` * y);
yhat = x * b;
sse = Sum( (y - yhat) ^ 2 );
(sst-sse) / sst;
,
Empty()
)
)
);
Sie können den Teil dieses Skripts auswählen, der in den Klammern nach dem Formelargument steht, und diesen Ausdruck in eine neue Spaltenformel in Ihrer Datentabelle einfügen und dann die Spaltennamen so ändern, dass sie mit Ihren X- und Y-Datenspalten übereinstimmen.
Danke @Mark_Bailey .Was ist die Funktion zur Berechnung von R2 in JSL? (Es tut mir leid, ich bin neu im JSL-Skripting und konnte es online nicht finden.)
Siehe diese Diskussion über Durchführen einer linearen Regression in einer Spaltenformel . Dieser Ansatz könnte erweitert werden, um R-Quadrat- oder andere Ergebnisse zu erhalten.