Box Cox Transformationen zur Regression

9

Ich versuche, ein lineares Modell mit nur einem Prädiktor (z. B. (x, y)) an einige Daten anzupassen. Die Daten sind so, dass für kleine Werte von x die y-Werte eine enge Anpassung an eine gerade Linie ergeben. Wenn jedoch die x-Werte zunehmen, werden die y-Werte flüchtiger. Hier ist ein Beispiel für solche Daten (R-Code)

y = c(3.2,3.4,3.5,3.8,4.2,5.5,4.5,6.8,7.4,5.9)
x = seq(1,10,1)

Ich bin gespannt, ob es eine Leistungstransformation gibt (Box Cox vielleicht?), Mit der ich die Daten besser anpassen kann, als einfach eine lineare Anpassung wie unten gezeigt durchzuführen.

fit = lm(y ~ x)
Brokkoli
quelle
Nach meinem Verständnis besteht der Zweck von Transformationen wie Box Cox nicht darin, eine bessere Anpassung zu erzielen, sondern die Annahmen des Modells zu erfüllen. Das könnte eine bessere Passform, eine schlechtere Passform oder nicht viel Veränderung bringen, aber es wird eine Passform sein, die nicht gegen die Annahmen verstößt.
Peter Flom - Reinstate Monica
Eine nichtlineare Transformation macht eine lineare Beziehung nichtlinear (obwohl Sie manchmal auch x transformieren und das korrigieren können). Die Transformation kann jedoch auch eine gekrümmte glätten und gleichzeitig die Heteroskedastizität verringern (obwohl es nicht immer möglich ist, beide mit derselben Transformation durchzuführen). Für diese Daten hilft eine Log-Transformation etwas.
Glen_b - Monica
4
Unter Verwendung der beiden extremen und mittleren (fünften) Werte von zeigt die unter stats.stackexchange.com/questions/35711/… gezeigte Methode an, dass ein Logarithmus (Box-Cox-Transformation mit Parameter 0) zur Linearisierung der Beziehung geeignet wäre . Die Verwendung des ersten, sechsten und letzten Werts zeigt an, dass der Kehrwert (Parameter -1) gut wäre. Dies deutet darauf hin, dass fast jeder Parameter zwischen 0 und -1 funktionieren könnte. Die Reichweite ist angesichts der wenigen Daten keine Überraschung. Keine monotone Reexpression stabilisiert die Variation für diese Daten. y
whuber

Antworten:

6

Das MASS-Paket, das mit Ihrem R bereits installiert ist, verfügt über die folgende boxcox()Funktion: Führen Sie nach dem Einlesen der Daten Folgendes aus:

library(MASS)
boxcox(y ~ x)

Schauen Sie sich dann das Diagramm an, das ein 95% -Konfidenzintervall für den Boxcox-Transformationsparameter grafisch darstellt. Sie haben jedoch nicht wirklich genug Daten (n = 10), um dies zu tun. Das resultierende Konfidenzintervall reicht fast von -2 bis 2! Mit einer maximalen Wahrscheinlichkeitsschätzung von ungefähr 0 (eine Protokolltransformation, wie zuvor gesagt). Wenn Ihre realen Daten mehr Beobachtungen enthalten, sollten Sie dies versuchen.

Wie andere gesagt haben, versucht diese Transformation wirklich, Varianzen zu stabilisieren. Aus der Theorie geht nicht wirklich hervor, dass versucht wird, eine auf Normalverteilung basierende Wahrscheinlichkeitsfunktion zu maximieren, die eine konstante Varianz voraussetzt. Man könnte denken, dass die Maximierung einer normalbasierten Wahrscheinlichkeit versuchen würde, die Verteilung der Residuen zu normalisieren, aber in der Praxis liegt der Hauptbeitrag zur Maximierung der Wahrscheinlichkeit in der Stabilisierung der Varianzen. Dies ist vielleicht nicht so überraschend, da die Wahrscheinlichkeit, die wir maximieren, auf einer Normalverteilungsfamilie mit konstanter Varianz basiert!

Ich habe einmal eine Slider-basierte Demo in XLispStat geschrieben, die dies deutlich demonstrierte!

kjetil b halvorsen
quelle
3

Wenn Sie eine lineare Beziehung, aber ungleiche Varianzen haben, müssen Sie im Allgemeinen sowohl x als auch y transformieren, um eine lineare Beziehung mit gleichen Varianzen zu erhalten (oder verwenden Sie einfach die gewichtete Regression der kleinsten Quadrate für die nicht transformierten Variablen).

Das AVAS-Verfahren kann verwendet werden, um mögliche Transformationen vorzuschlagen.

Greg Snow
quelle
Schauen Sie sich die Daten an: monoton für von bis und oszilliert dann systematisch viel für zwischen und . Dies impliziert, dass keine kontinuierliche monotone Reexpression von die Varianzen stabilisieren kann. Ihr Vorschlag für gewichtete kleinste Quadrate sieht angesichts dieser Einschränkung vielversprechend aus, aber wie sollte man die Gewichte wählen? yx15x510y
whuber
Stimmen Sie mit @whuber
Brokkoli
1
Ich stimme @whuber für diesen spezifischen Datensatz zu. Ich habe nur angenommen, dass diese Daten schnell zur Veranschaulichung zusammengestellt wurden (und daher den menschlichen Mangel an Zufälligkeit / Realität zeigen). Meine Antwort ist eher der allgemeine Rat für den allgemeinen Fall ungleicher Varianzen.
Greg Snow
Würde ein glmFramework mit einer Poisson-Link-Funktion die Varianz verringern, wenn sie mit x zunimmt ?
Roman Luštrik
3
y
1

Nun, in R könnten Sie dies versuchen:

library(MASS)
boxcox(y~x)
plot(1/y^2~x) # since the profile likelihood has a maximum near 2

Geben Sie hier die Bildbeschreibung ein

Aber es hängt wirklich davon ab, was Sie unter "besser an die Daten anpassen" verstehen.

Glen_b - Monica neu starten
quelle
-2

Nun, wenn alle Ihre Daten für x nicht negativ sind, können Sie die Box-Cox-Transformation verwenden ... um den idealen Wert des Parameters Lambda der Transformation zu schätzen, können Sie Matlab verwenden ... http://www.mathworks.in/ Hilfe / Finanzen / boxcox.html

Nuzhi
quelle
1
"Ideal" bedeutet hier etwas anderes als in der Frage gefordert. Die Frage versucht, die Varianzen zu stabilisieren, während die Matlab-Lösung versucht, sie so nahe wie möglich an die Normalverteilung heranzuführen.
whuber