Nichtlineare Regression mit um Kategorien erweiterten Parametern<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hi
Ich habe einen Datensatz, den ich mit einem nichtlinearen Modell mit vier Anpassungsparametern A, B, C und D anpassen muss. Der Datensatz (Y, Spalte) muss mit „Kategorien“, einer Spalte, getrennt werden. Also ist Y für jede eindeutige „Kategorie“ ein eindeutiger Datensatz.
Ich muss alle Daten anpassen und die Parameter A, B, C, D finden, mit der Bedingung, dass ich ein eindeutiges C und D für alle Datensätze in allen „Kategorien“ benötige, während A, B in den „Kategorien“ variieren können.
Dazu erstelle ich eine Spalte für das Modell und erstelle die Parameter C, D und für A und BI erstelle Parameter, wobei „In Kategorien erweitern, Spalte auswählen“ aktiviert ist, und ich wähle „Kategorien“ für die Spalte aus und führe eine nichtlineare Regressionsanpassung durch . Ich bekomme das optimale C und D in allen Kategorien und unterschiedliche A und B in allen Kategorien.
Meine Frage lautet: Wie findet es ein EINZIGARTIGES C und D in allen Kategorien? Passt es zu jedem Datensatz und findet C1, D1, C2, D2 usw. für jeden Datensatz und nimmt später den Median / Mittelwert oder etwas anderes?
Oder findet es den Bereich der C- und D-Werte und erstellt feine Punkte innerhalb von C und D und passt erneut alle Datensätze an und wird immer feiner, bis der Fehler innerhalb der Grenzen liegt?
Ich muss die Methode kennen, weil ich sicher sein möchte, dass ich das tue, was ich tun muss.
Vielen Dank
Binoy
Betreff: Nichtlineare Regression mit um Kategorien erweiterten ParameternEntschuldigung für die Verspätung. Ich dachte, wir wären fertig!
Mein vorheriger Beitrag zeigt die Formel mit einem gemeinsamen B und Beta und bedingte Parameter ein Kategorie Ebenen. Was brauchst du noch? Das Skript in meiner ersten Antwort automatisiert den Aufbau einer solchen Formel. Ich kann nicht verstehen, was Sie sonst noch vom Standpunkt des Modells verlangen könnten.
Sie fragen, wie die Nichtlinear Plattform löst ein solches Problem (Schätzung der Parameter)? Es verwendet a Numerisches Optimierungsverfahren und ein verlustfunktion zu überwachen. Es nutzt das Gegebene Startwerte und variiert sie dann, um das Ergebnis der Verlustfunktion zu verbessern (Minimierung). Die Standardverlustfunktion ist Summe der quadrierten Fehler , oder kleinsten Quadrate .Es überwacht mehrere Änderungsmaße, um festzustellen, wann Konvergenz erreicht ist und aufhört.
Betreff: Nichtlineare Regression mit um Kategorien erweiterten ParameternHi,
Gibt es ein Update zu dieser Frage, die ich gestellt habe?
Vielen Dank
Binoy
Betreff: Nichtlineare Regression mit um Kategorien erweiterten ParameternHi,
Ich kenne diese Methode, es manuell zu tun. Ich verstehe, dass es ziemlich einfach ist, es manuell zu tun. Allerdings muss ich mein Skript als Teil eines größeren Systems automatisieren und daher notwendig.
Vielen Dank für Ihre Zeit und Mühe.
Binoy
Betreff: Nichtlineare Regression mit um Kategorien erweiterten ParameternExzellent!!! Lief wie am Schnürchen. Das ist ungefähr die Antwort auf meinen früheren Beitrag (leicht anders als der ursprüngliche Beitrag.)
Danke für deine Zeit und dein Skript.
Nun zur Bonusfrage (eigentlich meine ursprüngliche Frage 
In dieser nichtlinearen Regressionsanpassung haben wir 2 Parameter B und Beta, die für alle Kategorien gleich bleiben, während P und R0 zwischen ihnen variieren. Jetzt geben wir nicht durch irgendeine Gleichung an, wie sich B und Beta in den Kategorien unterscheiden. Wie findet JMP also das beste B und Beta, das für alle Kategorien funktioniert? Welcher Algorithmus wird verwendet?
Vielen Dank
Binoy
Betreff: Nichtlineare Regression mit um Kategorien erweiterten ParameternIch möchte meine vorherige Antwort ergänzen, nachdem Jeff Perkinson auf ein Beispiel hingewiesen hat, das dem ähnelt, was Sie tun möchten. Uns ist nicht klar, ob Sie wirklich ein Skript benötigen, um die von Ihnen benötigte Modellformel zu erstellen. Auswählen Hilfe > Beispieldatenbibliothek , öffne das Nichtlineare Beispiele Ordner und öffnen Sie schließlich die Algen Mitscherlich Datentabelle. Öffne das Formel-Editor mit dem Mitscherlich Säule. Es sollte so aussehen:

in diesem Fall, wie in Ihrem Fall, die 2 Parameter Alpha und Beta sind bedingt Behandlung .
Ich öffne das Modell Ihrer Daten, das ich erstellt habe, und wähle es aus Spalten > Neue Spalte... Ich werde es anrufen Modell und füge a hinzu Formel Spalteneigenschaft. Ich werde die Parameter erstellen, bevor ich sie verwende, um die Modellformel zu erstellen. Ich klicke Tabellenspalten oben links und wählen Sie aus Parameter . Ich klicke Neuer Parameter. .. und eintreten B für den Namen und geben Sie ihm einen Startwert von 2 , dann klick OK . Ich erschaffe Beta = 0 auf die gleiche Weise. Das B und Beta Parameter sind bedingungslos und ihr Wert ist allen Kategorien gemeinsam.
Die anderen beiden Parameter sind unterschiedlich. Ich klicke Neuer Parameter , Eintreten R0 für den Namen, 2 für den Startwert und wählen Sie aus In Kategorien erweitern, Spalte auswählen . Ich klicke OK und wählen Sie dann die aus Kategorie Säule. Jetzt habe ich einen eindeutigen Parameter für R0 für jede Kategorie. Ich mache das gleiche für die P Parameter.
Ich erstelle die Formel, die jetzt zwischen der Liste der Parameter und der Liste der Tabellenspalten wechselt, um diese Formel zu erstellen:

Der Editor fügt automatisch den Match(...)-Ausdruck ein, wenn ich auf den gruppierten Parameter in der Parameterliste klicke. Jetzt gibt es also für jede Kategorie ein B, ein Beta und ein R0 und P.
Die Verwendung dieses Ansatzes mit dem ersten Beispiel Algae führt zu dieser Formel:

Dieses Modell erzeugt mit Nonlinear genau dieselben Schätzungen wie die ursprüngliche Parametrisierung.
Bitte haben Sie Verständnis dafür, dass wir Ihre Frage möglicherweise falsch interpretiert haben. Skripte sind leistungsfähig, aber nicht immer notwendig.
Betreff: Nichtlineare Regression mit um Kategorien erweiterten ParameternIch habe drei Prinzipien verwendet, um dieses Problem zu lösen. Es sieht jetzt einfach aus, aber es gab einige chaotische Fehlstarts, bevor ich es richtig hinbekommen habe. Ich habe die Modellformel zurückentwickelt, das Problem in kleinere Probleme unterteilt und die Lösung von innen nach außen aufgebaut. Es wird davon ausgegangen, dass drei Datenspalten mit Vornamen vorhanden sind. Sie müssten ein benutzerdefiniertes Dialogfeld hinzufügen, wenn sich die Spaltennamen zwischen den Läufen ändern würden. Es bietet jedoch Platz für eine beliebige Anzahl von Kategorien. Ich weiß nicht, ob Nonlinear das Modell lösen kann, wenn Sie eine große Anzahl von Kategorien haben. Vielleicht möchten Sie auch eine Liste mit Startwerten erstellen und mein Beispiel verwenden, um eindeutige zu verwenden.
Ich habe Ihre Datentabelle nicht, aber mein Modell von dem, was Sie meiner Meinung nach (Kategorie, rRelax, tStress-Spalten) funktioniert haben.
/* davon ausgehen, dass diese Spalten vorhanden sind, oder einen benutzerdefinierten Dialog erstellen, um sie Skriptvariablen zuzuweisen:
Kategorie
Entspannen Sie sich
tStress
*/
// Alle Kategorien finden
Kategorie# = : Kategorie << Werte erhalten ;
// Formel von innen nach außen mit Ausdrücken erstellen
Übereinstimmungsausdruck p# = Übereinstimmungsausdruck r0# = Ausdruck ( Passen ( : Kategorie ) ) ;
Parameterliste # = Aufführen ( B = 2 , Beta = 0 ) ;
// über alle Kategorien iterieren
Zum ( c = 1 , c <= N Artikel ( Kategorie# ) , c ++,
// kategoriespezifischen R0-Parameter erstellen
Bewertung (
Analysieren (
Ersatz (
"Insert Into( parameter list#, Expr( Name( \!"R0_ccc\!" ) = 2 ) )" ,
"ccc" ,
Kategorie# [ c ]
)
)
) ;
Einfügen in ( Übereinstimmungsausdruck r0# , Kategorie# [ c ] ) ;
Bewertung (
Analysieren (
Ersatz (
"Insert Into( match expr r0#, Expr( Name( \!"R0_ccc\!" ) ) )" ,
"ccc" ,
Kategorie# [ c ]
)
)
) ;
// kategoriespezifischen P-Parameter erstellen
Bewertung (
Analysieren (
Ersatz (
"Insert Into( parameter list#, Expr( Name( \!"P_ccc\!" ) = 2 ) )" ,
"ccc" ,
Kategorie# [ c ]
)
)
) ;
Einfügen in ( Übereinstimmungsausdruck p# , Kategorie# [ c ] ) ;
Bewertung (
Analysieren (
Ersatz (
"Insert Into( match expr p#, Expr( Name( \!"P_ccc\!" ) ) )" ,
"ccc" ,
Kategorie# [ c ]
)
)
) ;
) ;
// Substituieren in allgemeine Modellformel
Formelausdruck# = Ersatz (
Ausdruck ( Parameter ( III , rrr / ( 1 + B * ( : Entspannen Sie sich / : tStress ) ^ Beta + ppp ) ) ) ,
Ausdruck ( III ) ,
Parameterliste# ,
Ausdruck ( rrr ) ,
Name Ausdruck ( Übereinstimmungsausdruck r0# ) ,
Ausdruck ( ppp ) ,
Name Ausdruck ( Übereinstimmungsausdruck p# )
) ;
// Spaltenformel des Modells festlegen
Bewertung (
Ersatz (
Ausdruck ( Aktuelle Datentabelle () << Neue Spalte ( "Modell" , Formel ( F f f ) ) ) ,
Ausdruck ( F f f ) ,
Name Ausdruck ( Formelausdruck # )
)
) ;
Betreff: Nichtlineare Regression mit um Kategorien erweiterten ParameternHi,
Danke für die Antwort. Ich bin das Handbuch durchgegangen. Ich konnte immer noch nicht bekommen, was ich suchte.
Ich versuche jetzt, diese nichtlineare Anpassung zu skripten und stehe vor einigen Problemen. Hilfe benötigen. Ich wiederhole das Problem hier:
Ich habe Daten, die von einem Modell mit 4 Anpassungsparametern angepasst werden müssen. Die Passformen für jede Kategorie sind NICHT UNABHÄNGIG voneinander. 2 der Anpassungsparameter, B und Beta, wie im obigen Beitrag gezeigt, müssen eindeutig sein, dh die Regressionsanpassung extrahiert ein eindeutiges B und Beta für alle Kategorien. Während die anderen beiden Parameter P und R0 je nach Kategorie variieren können.
Die JMP-Oberfläche sieht in etwa so aus wie unten gezeigt:

Jetzt muss ich das in JSL codieren.
Ich weiß, dass wir Folgendes tun können, um alle vier eindeutigen Parameter zu erhalten:
dt << New Column("Model", Numeric, Continuous, Formula( Parameter( {B = 5, beta = 0.25, P = 10, R0 = 10}, R0 / (1 + B * (:Name( "tRelax( s)" ) / :Name( "tStress(s)" )) ^ beta) + P )));
Dies ist jedoch nicht das, was ich möchte. Und ich möchte die "Gruppierungs" -Funktion nicht verwenden, da dies nur helfen würde, wenn die Extraktionen unabhängig wären.
Der Code, der generiert wird, während ich die Formel kopiere, wird unten gezeigt:
Parameter(
{B = 2, Beta = 0,
Name( "R0_Kategorie_D03_01_-1.8_100" ) = 2,
Name( "R0_Kategorie_D03_01_-1.8_1000" ) = 3,
Name( "R0_Kategorie_D03_01_-1.8_10000" ) = 3,
Name( "R0_Kategorie_D03_01_-1.8_158" ) = 3,
Name( "R0_Kategorie_D03_01_-1.8_1580" ) = 3,
Name( "P_Kategorie_D03_01_-1.8_100" ) = 0,
Name( "P_Kategorie_D03_01_-1.8_1000" ) = 1,
Name( "P_Kategorie_D03_01_-1.8_10000" ) = 1,
Name( "P_Kategorie_D03_01_-1.8_158" ) = 0,
Name( "P_Kategorie_D03_01_-1.8_251" ) = 0},
Exp( -B * (:Name( "tR" ) / :Name( "tS" )) ^ beta ) *
Übereinstimmung( :Kategorie,
"D03_01_-1.8_100", Name ("R0_Kategorie_D03_01_-1.8_100"),
"D03_01_-1.8_1000", Name ("R0_Kategorie_D03_01_-1.8_1000"),
"D03_01_-1.8_10000", Name ("R0_Kategorie_D03_01_-1.8_10000"),
"D03_01_-1.8_158", Name ("R0_Kategorie_D03_01_-1.8_158"),
"D10_05_-2.6_6310", Name( "R0_Kategorie_D10_05_-2.6_6310" )
) + Übereinstimmung( :Kategorie,
"D03_01_-1.8_100", Name ("P_Kategorie_D03_01_-1.8_100"),
"D03_01_-1.8_1000", Name ("P_Kategorie_D03_01_-1.8_1000"),
"D03_01_-1.8_10000", Name ("P_Kategorie_D03_01_-1.8_10000"),
"D03_01_-1.8_158", Name ("P_Kategorie_D03_01_-1.8_158"),
"D10_05_-2.6_6310", Name( "P_Kategorie_D10_05_-2.6_6310" )
)
)
Ich muss dies automatisieren und kann es daher nicht so verwenden, wie es ist.
Ich kann Arrays für P_XXX und R0_XXX aus der Spalte „Kategorie“ erstellen.
Ich dachte darüber nach, zugehörige Arrays für jedes dieser P und R0 zu erstellen und sie in Formeln zu verwenden, aber es hat nicht geklappt.
Nachdem ich diese Formel erstellt habe, muss ich natürlich die nichtlineare Regressionsanpassung an der Spalte und den Daten ausführen.
Kann mir bitte jemand helfen, das zu codieren?
Vielen Dank
Binoy
Betreff: Nichtlineare Regression mit um Kategorien erweiterten ParameternBinoy,
Ein guter Ort, um ein Gefühl dafür zu bekommen, wie Ihr Modell passt und welche Statistiken hinter der/den Passform(en) stehen, finden Sie im Abschnitt „Hilfe“ unter „Bücher“ > „Spezialisierte Modelle“.Nichtlineare Anpassungen beginnen auf Seite 105. Michael Andersons Vorschlag zur Gruppierung Ihrer Anpassungen zeigt auch, wie die einzelnen Kategorien angepasst sind, und Sie sehen auch ein Diagramm der kombinierten Anpassungen.Ein Beispiel aus der Hilfe ist unten dargestellt.Sie können auch Ihren eigenen Parametersatz verwenden, der in Kapitel 7 gezeigt wird.Der Statistikabschnitt beginnt auf Seite 152 von Kapitel 7.

Betreff: Nichtlineare Regression mit um Kategorien erweiterten ParameternHi,
Danke für die Antwort.
Um klarer zu sein. Ich kenne eine Methode, um zu tun, was ich will. Ich möchte wissen, wie es gemacht wird.
In dem unten gezeigten Beispiel entsprechen B und Beta den in der Frage gestellten C und D, während P ein Parameter wie A oder B ist, der je nach Kategorie variieren kann.
Unten ist ein Screenshot der Anpassung, die durchgeführt wird, mit B und Beta als Parameter, die für alle Kategorien KONSTANT bleiben, während P ein Parameter ist, der zwischen den Kategorien variieren kann.
Die Frage ist, wie bekommt es das beste B und Beta über alle Kategorien hinweg? Findet es anfangs verschiedene B und Beta für jede Kategorie und erstellt es einige Statistiken, um das beste B und Beta zu erhalten, das für alle Kategorien gut genug ist? Wenn ja, welche Statistik wird verwendet.
Vielen Dank
Binoy

Betreff: Nichtlineare Regression mit um Kategorien erweiterten ParameternEs hört sich so an, als ob Sie eine Gruppierungsvariable in der nichtlinearen Plattform verwenden möchten.Tragen Sie Ihre X- und Y-Variablen in die entsprechenden Felder der Plattform ein und setzen Sie dann die Spalte „Kategorien“ in das Feld „Gruppe“.Wenn Sie danach Modelle anpassen, wird das Ergebnis für jede Gruppe berechnet.Wenn Sie also 4 Kategorien hätten, würden Sie 4 Modelle mit 4 Koeffizientensätzen erhalten.
[Bild fehlt]