Nichtlineare Regression mit um Kategorien erweiterten Parametern<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo
Ich habe einen Datensatz, den ich mithilfe eines nichtlinearen Modells mit den vier Anpassungsparametern A, B, C und D anpassen muss. Der Datensatz (Y, Spalte) muss mithilfe von „Kategorien“, einer Spalte, getrennt werden. Y für jede eindeutige „Kategorie“ ist also 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 ich Parameter mit aktivierter Option „In Kategorien erweitern, Spalte auswählen“, wähle „Kategorien“ für die Spalte aus und führe eine nichtlineare Regressionsanpassung durch . Ich erhalte das optimale C und D für alle Kategorien und unterschiedliche A und B für alle Kategorien.
Meine Frage lautet: Wie findet es ein EINZIGARTIGES C und D in allen Kategorien? Passt es an den Datensatz, der jedem Datensatz entspricht, findet C1, D1, C2, D2 usw. für jeden Satz 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, passt den gesamten Datensatz erneut an und geht immer feiner vor, bis der Fehler innerhalb der Grenzen liegt?
Ich muss die Methode kennen, da ich sicher sein möchte, dass ich das tue, was ich tun muss.
Danke
Binoy
Betreff: Nichtlineare Regression mit um Kategorien erweiterten ParameternEntschuldigung für die Verzögerung. Ich dachte, wir wären fertig!
Mein vorheriger Beitrag zeigt die Formel mit einem Common B Und Beta und bedingte Parameter auf Kategorie Ebenen. Was brauchst du noch? Das Skript in meiner ersten Antwort automatisiert die Erstellung einer solchen Formel. Ich kann nicht verstehen, was Sie sonst noch von einem Modellstandpunkt aus benötigen.
Fragen Sie sich, wie das? 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 Ausgangswerte 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 den Zeitpunkt zu bestimmen Konvergenz erreicht ist und es stoppt.
Betreff: Nichtlineare Regression mit um Kategorien erweiterten ParameternHallo,
Gibt es ein Update zu dieser Frage, die ich gestellt habe?
Danke
Binoy
Betreff: Nichtlineare Regression mit um Kategorien erweiterten ParameternHallo,
Ich kenne diese Methode, es manuell zu machen. Ich verstehe, dass es ziemlich einfach ist, es manuell zu machen. Allerdings muss ich mein Skript automatisieren, da es Teil eines größeren Systems ist und daher notwendig ist.
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 für meinen früheren Beitrag (etwas anders als der ursprüngliche Beitrag).
Vielen Dank für Ihre Zeit und Ihr Skript.
Nun zur Bonusfrage (eigentlich meine ursprüngliche Frage). 
In dieser nichtlinearen Regressionsanpassung haben wir zwei 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 B und Beta zwischen den Kategorien variieren. Wie findet JMP also das beste B und Beta, das für alle Kategorien funktioniert? Welcher Algorithmus wird verwendet?
Danke
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 benötigte Modellformel zu erstellen. Wählen Helfen > Beispieldatenbibliothek , öffne das Nichtlineare Beispiele Ordner, und öffnen Sie schließlich den Algen Mitscherlich Datentabelle. Öffne das Formeleditor mit dem Mitscherlich Spalte. Es sollte so aussehen:

in diesem Fall, wie in Ihrem Fall, die 2 Parameter Alpha Und Beta sind abhängig von der Behandlung .
Ich öffne das von mir erstellte Modell Ihrer Daten und wähle es aus Spalten > Neue Spalte... Ich werde es nennen Modell und füge ein hinzu Formel Spalteneigenschaft. Ich werde die Parameter erstellen, bevor ich sie zur Erstellung der Modellformel verwende. Ich klicke Tabellenspalten oben links und wählen Sie 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. Der B Und Beta Parameter sind bedingungslos und ihr Wert ist allen Kategorien gemeinsam.
Die anderen beiden Parameter sind unterschiedlich. Ich klicke Neuer Parameter , eingeben R0 für den Namen, 2 Geben Sie den Startwert ein und wählen Sie aus Erweitern Sie die Kategorien und wählen Sie eine Spalte aus . Ich klicke OK und wählen Sie dann die aus Kategorie Spalte. Jetzt habe ich einen eindeutigen Parameter für R0 für jede Kategorie. Ich mache das Gleiche für die P Parameter.
Ich erstelle jetzt die Formel und wechsle zwischen der Liste der Parameter und der Liste der Tabellenspalten, 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 ein B, ein Beta und ein R0 und P für jede Kategorie.
Die Verwendung dieses Ansatzes mit dem ersten Beispiel Algen führt zu dieser Formel:

Dieses Modell erzeugt mit Nichtlinearität genau die gleichen 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 leistungsstark, 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 hinbekam. Ich habe die Modellformel rückentwickelt, das Problem in kleinere Probleme unterteilt und die Lösung von innen nach außen aufgebaut. Dabei wird davon ausgegangen, dass drei Datenspalten mit Vornamen vorhanden sind. Sie müssten ein benutzerdefiniertes Dialogfeld hinzufügen, wenn sich die Spaltennamen zwischen den Durchläufen ändern würden. Es unterstützt jedoch 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 vorbereiten und mein Beispiel verwenden, um eindeutige Werte zu verwenden.
Ich habe Ihre Datentabelle nicht, aber mein Modell dessen, was Sie meiner Meinung nach haben (Kategorie-, rRelax-, tStress-Spalten) hat funktioniert.
/* Gehen Sie davon aus, dass diese Spalten vorhanden sind, oder erstellen Sie einen benutzerdefinierten Dialog, um sie Skriptvariablen zuzuweisen:
Kategorie
tEntspannen
tStress
*/
// alle Kategorien finden
Kategorie# = : Kategorie << Werte abrufen ;
// Formel von innen nach außen mit Ausdrücken erstellen
Übereinstimmung mit expr p# = Übereinstimmung mit Ausdruck r0# = Ausdruck ( Übereinstimmen ( : Kategorie ) ) ;
Parameterliste# = Aufführen ( B = 2 , Beta = 0 ) ;
// alle Kategorien durchlaufen
Für ( C = 1 , C <= N Artikel ( Kategorie# ) , C ++,
// Kategoriespezifischen R0-Parameter erstellen
Bewertung (
Analysieren (
Ersatz (
"Einfügen in( Parameterliste#, Ausdruck( Name( \!"R0_ccc\!" ) = 2 ) )“ ,
„ccc“ ,
Kategorie# [ C ]
)
)
) ;
Einfügen in ( Übereinstimmung mit Ausdruck r0# , Kategorie# [ C ] ) ;
Bewertung (
Analysieren (
Ersatz (
"Einfügen in( match expr r0#, Expr( Name( \!"R0_ccc\!" ) ) )" ,
„ccc“ ,
Kategorie# [ C ]
)
)
) ;
// Kategoriespezifischen P-Parameter erstellen
Bewertung (
Analysieren (
Ersatz (
"Insert Into( Parameterliste#, Ausdruck( Name( \!"P_ccc\!" ) = 2 ) )“ ,
„ccc“ ,
Kategorie# [ C ]
)
)
) ;
Einfügen in ( Übereinstimmung mit expr p# , Kategorie# [ C ] ) ;
Bewertung (
Analysieren (
Ersatz (
"Einfügen in( match expr p#, Expr( Name( \!"P_ccc\!" ) ) )" ,
„ccc“ ,
Kategorie# [ C ]
)
)
) ;
) ;
// in allgemeine Modellformel einsetzen
Formelausdruck# = Ersatz (
Ausdruck ( Parameter ( lll , rrr / ( 1 + B * ( : tEntspannen / : tStress ) ^ Beta + ppp ) ) ) ,
Ausdruck ( lll ) ,
Parameterliste# ,
Ausdruck ( rrr ) ,
Namensausdruck ( Übereinstimmung mit Ausdruck r0# ) ,
Ausdruck ( ppp ) ,
Namensausdruck ( Übereinstimmung mit expr p# )
) ;
// Modellspaltenformel festlegen
Bewertung (
Ersatz (
Ausdruck ( Aktuelle Datentabelle () << Neue Spalte ( "Modell" , Formel ( F f f ) ) ) ,
Ausdruck ( F f f ) ,
Namensausdruck ( Formelausdruck# )
)
) ;
Betreff: Nichtlineare Regression mit um Kategorien erweiterten ParameternHallo,
Danke für die Antwort. Ich habe das Handbuch durchgelesen. Ich konnte immer noch nicht finden, was ich suchte.
Ich versuche jetzt, ein Skript für diese nichtlineare Anpassung zu erstellen, 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 die einzelnen Kategorien sind NICHT UNABHÄNGIG voneinander. Zwei 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-Schnittstelle sieht etwa wie unten dargestellt aus:

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 )));
Das ist jedoch nicht das, was ich will. Und ich möchte die Funktion „Gruppierung“ nicht verwenden, da sie nur dann hilfreich wäre, wenn die Extraktionen unabhängig wären.
Der beim Kopieren der Formel generierte Code ist unten dargestellt:
Parameter(
{B = 2, Beta = 0,
Name( "R0_Category_D03_01_-1.8_100" ) = 2,
Name( "R0_Category_D03_01_-1.8_1000" ) = 3,
Name( "R0_Category_D03_01_-1.8_10000" ) = 3,
Name( "R0_Category_D03_01_-1.8_158" ) = 3,
Name( "R0_Category_D03_01_-1.8_1580" ) = 3,
Name( "P_Category_D03_01_-1.8_100" ) = 0,
Name( "P_Category_D03_01_-1.8_1000" ) = 1,
Name( "P_Category_D03_01_-1.8_10000" ) = 1,
Name( "P_Category_D03_01_-1.8_158" ) = 0,
Name( "P_Category_D03_01_-1.8_251" ) = 0},
Exp( -B * (:Name( "tR" ) / :Name( "tS" )) ^ beta ) *
Match( :Kategorie,
„D03_01_-1.8_100“, Name( „R0_Category_D03_01_-1.8_100“ ),
„D03_01_-1.8_1000“, Name( „R0_Category_D03_01_-1.8_1000“ ),
„D03_01_-1.8_10000“, Name( „R0_Category_D03_01_-1.8_10000“ ),
„D03_01_-1.8_158“, Name( „R0_Category_D03_01_-1.8_158“ ),
„D10_05_-2.6_6310“, Name( „R0_Category_D10_05_-2.6_6310“ )
) + Match( :Kategorie,
„D03_01_-1.8_100“, Name( „P_Category_D03_01_-1.8_100“ ),
„D03_01_-1.8_1000“, Name( „P_Category_D03_01_-1.8_1000“ ),
„D03_01_-1.8_10000“, Name( „P_Category_D03_01_-1.8_10000“ ),
„D03_01_-1.8_158“, Name( „P_Category_D03_01_-1.8_158“ ),
„D10_05_-2.6_6310“, Name( „P_Category_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 habe darüber nachgedacht, zugehörige Arrays für jedes dieser P und R0 zu erstellen und sie in der Formel zu verwenden, aber es hat nicht geklappt.
Nachdem ich diese Formel erstellt habe, muss ich natürlich die nichtlineare Regressionsanpassung für die Spalte und die Daten ausführen.
Kann mir bitte jemand beim Codieren helfen?
Danke
Binoy
Betreff: Nichtlineare Regression mit um Kategorien erweiterten ParameternBinoy,
Ein guter Ort, um ein Gefühl für die Anpassung Ihres Modells und die Statistiken hinter der/den Anpassung(en) zu bekommen, 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 außerdem eine Grafik der kombinierten Anpassungen.Ein Beispiel aus der Hilfe ist unten dargestellt.Sie können auch Ihren eigenen Parametersatz verwenden. Dies wird in Kapitel 7 gezeigt.Der Statistikabschnitt beginnt auf Seite 152 von Kapitel 7.

Betreff: Nichtlineare Regression mit um Kategorien erweiterten ParameternHallo,
Danke für die Antwort.
Um es klarer zu sagen. Ich kenne eine Methode, um zu tun, was ich will. Ich möchte wissen, wie es gemacht wird.
Im 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 durchgeführten Anpassung, 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 es in allen Kategorien die besten B- und Beta-Werte erzielt. Findet es zunächst unterschiedliche B- und Beta-Werte für jede Kategorie und erstellt einige Statistiken, um den besten B- und Beta-Wert zu ermitteln, der für alle Kategorien gut genug ist? Wenn ja, welche Statistik wird verwendet.
Danke
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.Geben Sie Ihre X- und Y-Variablen in die entsprechenden Felder der Plattform ein und fügen Sie dann die Spalte „Kategorien“ in das Feld „Gruppe“ ein.Wenn Sie anschließend 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.
[Fehlendes Bild]