Finden Sie die Neigung für eine Datenzeile und keine Spalte<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Die Daten sind zeitlich nach Thema und in einer Zeile angegeben. Siehe folgendes Beispiel:
<SPAN class="number token" style="color: #008080; font-weight: bold;">subject(001) data -0.069965723</SPAN> <SPAN class="number token" style="color: #008080; font-weight: bold;">0.492749371</SPAN> <SPAN class="number token" style="color: #008080; font-weight: bold;">0.955245597</SPAN> <SPAN class="number token" style="color: #008080; font-weight: bold;">1.346963522</SPAN> <SPAN class="number token" style="color: #008080; font-weight: bold;">1.701118239</SPAN> <SPAN class="number token" style="color: #008080; font-weight: bold;">2.523141195</SPAN> columns _1 _2 _3 _4 _5 _8
Ich habe Tausende solcher Reihen, in denen die Steigung benötigt wird.
Alles was ich wirklich brauche, ist die Steigung für jede Zahlenreihe in der Reihe.
Eine neue zusätzliche Spalte nach jeder Serie sollte den Neigungswert für diese bestimmte Serie enthalten.
Ich habe in einem SAS-Forum gefragt, ob SAS damit umgehen kann. Frage mich, ob JMP kann ?? Jede Hilfe wäre sehr dankbar.
Nikolaus
Re: Finde die Steigung für eine Datenzeile, keine SpalteHier ist eine andere Methode. Es hat nur einen Vorteil: Das Skript dupliziert lediglich, was Sie JMP interaktiv ausführen könnten. Ich habe eine Beispieldatentabelle angehängt, um die ich das Skript entwickelt habe.
// Setzt einen Zeiger auf die Beispieldaten
Namen standardmäßig hier ( 1 ) ;
dt = aktuelle Datentabelle () ;
// Stapeln Sie die 6 Datenspalten aus jeder Zeile
gestapelt = dt << Stapel (
Säulen( : _3 . : _4 . : _5 . : _6 . : _7 . : _8) .
Quellbezeichnungsspalte ( "Etikette" ) .
Gestapelte Datenspalte ( "Daten" )
) ;
// Erstellen Sie eine neue Spalte, die den Zeitfaktor darstellt
gestapelt << neue Spalte ( "Zeit" . Formel( Num ( Substrate ( : Etikette . 2 . 1 )) - 2 )) ;
// Analyse der Daten für jede Zeile (Schüler) durchführen
Biw = gestapelt << Bivariate (unsichtbar .
Y ( : Daten ) .
X ( : Zeit ) .
Linie anpassen ({Linienfarbe ({ 213 . 72 . 87 })}) .
von (_1)
) ;
// Erstellen Sie eine Datentabelle aus der Schätzwertausgabe
dtslope = Bericht (biv [ 1 ]) [ "Parameterschätzungen" ] [ 1 ] << kombinierte Datentabelle erstellen;
// Befreie die Intercept-Daten
dtslope << auswählen wo ( : Begriff == "Abfangen" ) ;
dtslope << Zeilen löschen;
// Wählen Sie die nicht gewünschten Spalten aus und löschen Sie sie
dtslope : x << ausgewählt ( 1 ) ;
dtslope : y << ausgewählt ( 1 ) ;
dtslope : Begriff << ausgewählt ( 1 ) ;
dtslope : Name ( "~ Vorurteile" ) << ausgewählt ( 1 ) ;
dtslope : Standardfehler << ausgewählt ( 1 ) ;
dtslope : t Verhältnis << ausgewählt ( 1 ) ;
dtslope : Name ( "prob> | t |" ) << ausgewählt ( 1 ) ;
dtslope << Spalten löschen;
// Benennen Sie die Spalte "Schätzwert" in "Slope" um
dtslope : Schätzen << Name setzen ( "Steigung" ) ;
// Füge die Neigung der ursprünglichen Datentabelle hinzu
dt << Aktualisieren (
Mit (dtslope) .
Match-Spalten ( : _1 = : _1)
) ;
Re: Finde die Steigung für eine Datenzeile, keine SpalteHier ist ein Beispiel für eine Spaltenformel zur Berechnung der Steigung zwischen den Spalten. Es ist nicht klar, was die X-Werte sind, aber ich gehe davon aus, dass sie wie in Ihrem Beispiel durch die Spaltennamen definiert werden. Wie Sie sehen, ist die X-Matrix jetzt hart codiert. Die Formel könnte allgemeiner formuliert werden, wenn die X-Werte z. B. in der ersten Zeile (oder in einer Tabellenvariablen) enthalten sind.
// Beispieltabelle
dt = Neue Tabelle ( "Slope_Across_Columns.jmp" .
Zeilen hinzufügen ( 2 ) .
Neue Spalte ( "Gegenstand" . Charakter . Werte ({ "001" . "002" })) .
Neue Spalte ( "_1" . Werte ([ - 0,069965723 . 2 ])) .
Neue Spalte ( "_2" . Werte ([ 0,492749371 . 4 ])) .
Neue Spalte ( "_3" . Werte ([ 0,955245597 . 6 ])) .
Neue Spalte ( "_4" . Werte ([ 1.346963522 . 8 ])) .
Neue Spalte ( "_5" . Werte ([ 1.701118239 . 10 ])) .
Neue Spalte ( "_8" . Werte ([ 2.523141195 . 16 ]))
) ;
// Formelausdruck
F = Eval Expr (
Lokal ({ ich = 1 . n = Ausdruck ( N Col ( Aktuelle Datentabelle ()) - 1 ) . X = J ( n . 1 . 1 ) || [ 1 . 2 . 3 . 4 . 5 . 8 ] . Y } .
Y = Matrix ( Wiederholen ({ ich ++ ; Säule ( ich ) []} . n )) ;
( Inverse ( X ` * X ) * X ` * Y ) [ 2 ] ;
)
) ;
// Formelspalte hinzufügen
dt << Neue Spalte ( "Steigung" . Numerisch . Formel ( Name Ausdruck ( F ))) ;
Re: Finde die Steigung für eine Datenzeile, keine SpalteHallo nkormanik .
Die Antwort ist ja.
Im Allgemeinen müssten Sie die Daten transponieren und die Berechnungen durchführen. Wenn die Datentabelle zu groß ist, denke ich, ist es einfacher, eine Matrix zu transponieren. Daher umfasst der Prozess im Allgemeinen das Extrahieren der Daten in eine Matrix, das Transponieren und die Berechnung der Steigungen. Guck dir das an. Es führt alle verschiedenen Schritte zur Veranschaulichung aus. Es ist nicht sehr robust (wenn Sie fehlende Werte haben) oder etwas komisches.
Beste,
ron
// eine Datentabelle erstellen
dt = neue Tabelle ( "Daten in Zeilen" .
Zeilen hinzufügen ( 100 ) .
neue Spalte ( "Gegenstand" . Formel ( Reihe ())) .
neue Spalte ( "Steigung" ) .
neue Spalte ( "R2" ) .
fügen Sie mehrere Spalten hinzu ( "Säule" . 20 . numerisch )
) ;
// Werte für die Datenspalten setzen
zum ( ich = 4 . ich <= 23 . ich ++
: Säule ( ich ) << Formel (( ich / 2 ) + Zufällig Normal ()) << Eval-Formel << Formel löschen ;
) ;
// beginne zu arbeiten
// Holen Sie sich die Tabelle als Matrix
Datenmatrix = dt << GetAllColumnsAsMatrix ;
// entferne die Spalten, die nicht für Regressionsberechnungen verwendet werden (Spalten 1-4)
Datenmatrix [ 0 . 1 :: 3 ] = [] ;
// transponiere die Matrix
Daten = Datenmatrix ";
// mache eine x-Variable für die Zeit.
X = ( 1 :: ncol ( Datenmatrix )) ";
// füge eine Spalte von 1 für den Intercept-Begriff hinzu
X = J ( Nrow ( X ) . 1 ) || X ;
// Jetzt haben wir alle Daten, die wir für die Berechnungen benötigen, in Matrixform
zum ( irow = 1 . irow <= nrows ( dt ) . irow ++ // Für jede Reihe
// Einzelne Daten einzeln extrahieren
Y = Daten [ 0 . irow ] ;
// Berechne die Schätzungen der kleinsten Quadrate
β = Inv ( X `* X ) * X `* Y ;
dt : Steigung [ irow ] = β [ 2 ] ;
// berechne R2
N = NRows ( Y ) ;
Ybar = Bedeuten ( Y ) ;
R2 = ( β `* X `* Y - N * Ybar ^ 2 ) / ( Y `* Y - N * Ybar ^ 2 ) ;
dt : R2 [ irow ] = R2 ;
) ;