Gewichtsargument in lm und lme sehr unterschiedlich in R - verwende ich sie richtig?

8

Es scheint mir also, dass die Gewichtsfunktion in lm Beobachtungen umso mehr Gewicht verleiht, je größer der 'Gewicht'-Wert der zugehörigen Beobachtung ist, während die lme-Funktion in lme genau das Gegenteil bewirkt. Dies kann mit einer einfachen Simulation überprüft werden.

#make 3 vectors- c is used as an uninformative random effect for the lme model
a<-c(1:10)
b<-c(2,4,6,8,10,100,14,16,18,20)
c<-c(1,1,1,1,1,1,1,1,1,1)

Wenn Sie jetzt ein Modell ausführen, bei dem Sie die Beobachtungen basierend auf der Umkehrung der abhängigen Variablen in lm gewichten, können Sie in nlme nur dann genau das gleiche Ergebnis erzielen, wenn Sie nur mit der abhängigen Variablen gewichten, ohne die Umkehrung vorzunehmen.

summary(lm(b~a,weights=1/b))
summary(lme(b~a,random=~1|c,weights=~b))

Sie können dies umdrehen und sehen, dass die Umkehrung wahr ist. Wenn Sie Gewichte = b in lm angeben, sind Gewichte = 1 / b erforderlich, um ein passendes lme-Ergebnis zu erhalten.

Also, ich verstehe so viel, ich möchte nur eine Sache validieren und eine Frage zu einer anderen stellen.

  1. Wenn ich meine Daten basierend auf der Umkehrung der abhängigen Variablen gewichten möchte, ist es in Ordnung, nur Gewichte = ~ (abhängige Variable) innerhalb von lme zu codieren?
  2. Warum ist ich so geschrieben, dass ich mit Gewichten ganz anders umgehen kann als ich? Was ist der andere Zweck als Verwirrung zu stiften?

Jeder Einblick wäre dankbar!

Colin
quelle
1
Die Antwort auf 2. ist, dass sie von sehr unterschiedlichen Leuten geschrieben wurden, um sehr unterschiedliche Dinge zu tun. nlme musste lm()mit S und verschiedenen Büchern kompatibel sein, aber es zielte darauf ab, flexibler zu sein, sodass die Heterogenität flexibler modelliert werden konnte als es lmerlaubt.
Gavin Simpson

Antworten:

12

Q1

In lmeder Notation weights = ~ bwürde die varFixedVarianzfunktion mit alleinigem Argument verwendet b. Diese Funktion würde dem Modell eine Varianzfunktion hinzufügen, die die Form, wobei die Werte des annimmt .s2(v)s2(v)=|v|vb

Daher sollten Sie weights = ~ I(1/b)in lme()den haben Varianz von .εi=1/bi

In dem, lmwas Sie passieren, weightsscheint das genaue Gegenteil zu sein; weightsist umgekehrt proportional zur Varianz.

Ich bin mir nicht 100% sicher, was Sie unter Gewicht meiner Daten verstehen , aber wenn Sie die heterogene Varianz der Beobachtungen angeben, dann denke ich, dass Sie es wollen weights = ~ I(1/b).

Q2

Mein Bauchgefühl (Sie müssten die jeweiligen Autoren der beiden Funktionen fragen) ist, dass dies falsch ist lm()und lme()von sehr unterschiedlichen Leuten geschrieben wurde, um sehr unterschiedliche Dinge zu tun. lm()erforderlich (wurde als gewünscht) mit S und verschiedenen Büchern kompatibel zu sein, nlme nicht, und es sollte flexibler sein, die Heterogenität ermöglichte flexibler modelliert werden als lmdurch die Verwendung von Varianz ermöglicht Funktionen über die varFuncInfrastruktur.

Gavin Simpson
quelle
Das ist klar genug. Mit "Gewichtung meiner Daten" meine ich, dass die Modellanpassung berücksichtigen soll, dass große Residuen von großen Beobachtungen erwartet werden sollten, und dass sie eher dem Prozentsatz der kleinsten Quadrate als den gewöhnlichen kleinsten Quadraten entsprechen. AUCH - Ich habe den Kreuzpfosten beim Stapelüberlauf gelöscht, sorry!
Colin
Dann möchten Sie vielleicht andere Varianzfunktionen in nlme betrachten . Was Sie tun, ist zu sagen, dass die Varianzen Ihrer Beobachtungen genau der (absolute) Wert von sind b. Es scheint besser zu sein, nur zu sagen, dass die Varianz mit zunahm b. varPower()Zum Beispiel hätte die Varianz als mit einen Modellparameter geschätzt. Dies ist in Ordnung, wenn keine 0-Werte angenommen werden. Wenn es 0 Werte annehmen kann, ist die Funktion möglicherweise besser, da die Varianz . δvar(εi)= σ 2×e2δ×biσ^2×|b|2δδbvarExp()var(εi)=σ^2×e2δ×bi
Gavin Simpson
In lm()beachten , die Formulierung , dass die Varianz proportional zu dem Kehrwert weights. In dem lmeCode, den wir besprochen haben, b ist die Varianz. Nach Ihrer Erklärung glaube ich nicht, dass Sie das wirklich wollen ... Beachten Sie auch, dass, wenn die Varianz mit der mittleren Antwort zunimmt, ein GLMM geeignet sein kann und das lme4- Paket geeignet wäre, da es die mittlere Varianzbeziehung direkt modellieren kann anstatt durch Modifikation der Kovarianzmatrix - was der lmeCode tut.
Gavin Simpson
Zum Schluss tut mir leid, wenn ich bei Stack Overflow mürrisch klang . Es war nicht beabsichtigt. Ich habe nur vergessen, dass Sie nicht abstimmen können, um als OT zu schließen und zu Cross Validated zu migrieren . Sie müssen einen Kommentar hinterlassen, warum, aber ich hatte bereits den ersten Kommentar hinterlassen. Wählen Sie keine SE-Site für Ihre Frage basierend auf der Anzahl der Augen, die sie sehen werden. Wählen Sie den am besten geeigneten Veranstaltungsort. Es ist nichts Falsches daran, Ihre Frage auf Cross Validated zu bewerben , um mehr Augen zu bekommen. Sie können den Link sogar im öffentlichen Chatroom von R auf Stack Overflow veröffentlichen . Crossposting oder das Posten von OT-Fragen verwässert die Ressource, wenn wir zu viele haben, daher enge Abstimmungen usw.
Gavin Simpson