Mehrere Formeln mit gemeinsamen Parametern in R

8

Wir versuchen, einen Weg für eine R-Funktion zu finden, ein Modell zu handhaben, das mehrere Antworten, mehrere erklärende Variablen und möglicherweise gemeinsame Parameter zwischen den Antworten aufweist. Zum Beispiel:

%Vor%

gibt zwei Antworten und vier erklärende Variablen an. X3 erscheint in beiden, und wir möchten, dass der Benutzer steuert, ob der zugehörige Parameterwert gleich oder verschieden ist. zB:

%Vor%

ist ein Modell mit vier 'b' Parametern oder

%Vor%

ein Modell mit fünf Parametern.

Zwei Möglichkeiten:

  • Geben Sie alle erklärenden Variablen in einer Formel an und liefern Sie eine Matrix-Mapping-Antwort auf die Erläuterungen. In diesem Fall

Foo( Y1+Y2 ~ X1 + X2 + X3 + X4 + X5, map=cbind(c(1,1,1,0),c(0,0,1,1)))

würde dem ersten Fall entsprechen und

%Vor%

wäre die zweite. Offensichtlich wird ein Parsing der LHS benötigt, oder es könnte cbind(Y1,Y2) sein. Der Vorteil dieser Notation ist, dass es auch andere Informationen gibt, die für jeden Parameter benötigt werden - Startwerte, Prioren usw. - und die Reihenfolge ist durch die Reihenfolge in der Formel gegeben.

  • Verfügen über mehrere Formeln und eine Gruppierungsfunktion, die nur ein Attribut hinzufügt, so dass freigegebene Parameter identifiziert werden können - die beiden Beispiele werden dann zu

Foo( Y1 ~ X1+X2+G(X3,1), Y2 ~ G(X3,1)+X4)

Der X3-Parameter wird zwischen der Formel und

geteilt

Foo( Y1 ~ X1+X2+X3, Y2 ~ X3+X4)

mit unabhängigen Parametern. Der zweite Parameter von G() ist eine Gruppierungs-ID, die es ermöglicht, Modellparameter flexibel zu teilen.

Eine weitere Erklärung der Funktion G wird wie folgt angezeigt:

%Vor%

wäre ein Modell, wo:

%Vor%

wo es zwei unabhängige Parameter für X3 gibt (G (X3,1) und G (X3,3)). Wie man mit einer Gruppe umgeht, die sich auf eine andere erklärende Variable bezieht, ist eine offene Frage - angenommen, das Modell hätte Y4~G(X3,2) -, die einen gemeinsamen Parameter zwischen verschiedenen erklärenden Variablen impliziert, da dort ein G(X4,2) drin ist.

Diese Notation scheint für den Benutzer einfacher zu verstehen, aber wenn Sie auch Startwerte angeben müssen, ist die Zuordnung zwischen einem Vektor von Startwerten und den Parametern, denen sie entsprechen, nicht mehr offensichtlich. Ich vermute, dass wir intern die Mapping-Matrix aus der G() -Notation berechnen müssten.

Es mag bessere Wege geben, dies zu tun, also ist meine Frage ... kennt jemand einen?

    
Spacedman 25.09.2012, 13:52
quelle

2 Antworten

1

Interessante Frage (Ich wünschte, alle Paketautoren würden sich viel mehr im Voraus darüber sorgen, wie sie Erweiterungen der grundlegenden Wilkinson-Rogers-Formelschreibweise erstellen würden ...)

Wie wäre es mit etwas wie

? %Vor%

oder etwas ähnliches für Ihr zweites Beispiel?

Die Komponente formula gibt die Liste der Gleichungen an.

Die shared -Komponente listet einfach auf, welche Antwortvariablen denselben Parameter für bestimmte Prädiktorvariablen verwenden. Es könnte natürlich in eine logische oder binäre Tabelle abgebildet werden, aber (zumindest für mich - das ist sicher im Auge des Betrachters) ist es einfacher. Ich denke, die obige map -Lösung ist umständlich, wenn (wie in diesem Fall) eine Variable (wie X3 ) in zwei verschiedenen Mengen von Beziehungen geteilt wird.

Ich denke, eine einfache Regel wie "Startwerte in der Reihenfolge, in der die Parameter in der Liste der Formeln erscheinen" - in diesem Fall

%Vor%

wäre in Ordnung, aber es wäre nett, eine Hilfsfunktion bereitzustellen, die den Benutzern die Namen des Koeffizientenvektors (d. h. die Reihenfolge) mit formula / shared specification ...

mitteilen würde

Nach ein wenig persönlicher Erfahrung würde ich sagen, dass die Einbettung von mehr Fancy in die Formel selbst zu Schmerzen führt ... zum Beispiel war die ursprüngliche nlme -Syntax mit den separat spezifizierten Zufallseffekten einfacher zu handhaben als die neue lme4 -Stil-Syntax mit zufälligen Effekten und fixierten Effekten in der gleichen Formel gemischt ...

Eine Alternative (die mir nicht so gut gefällt) wäre

%Vor%

wo neue Parameter durch eine Art von Tag angezeigt werden (wobei [1] implizit ist).

Beachten Sie auch den Vorschlag aus dem Chatroom von @Andrie, dass Interfaces, die für die Modellierung von Strukturgleichungen entworfen wurden ( sem , lavaan -Pakete), nützliche Referenzen sein können.

    
Ben Bolker 25.09.2012, 15:20
quelle
0

Von den beiden vorgeschlagenen Methoden sieht die zweite mit der Idee mehrerer Formeln natürlicher aus, aber die G -Notation ergibt für mich keinen Sinn.

Der erste ist viel einfacher zu verstehen, aber ich habe zwei Optimierungen für das Argument map vorgeschlagen.

  1. Es sollte eher logische Werte als Zahlen verwenden.

  2. Sie sollten standardmäßig alle unabhängigen Variablen für jede Antwortvariable einschließen.

Richie Cotton 25.09.2012 14:16
quelle

Tags und Links