Box Cox Transforms do regresji


9

Próbuję dopasować model liniowy do niektórych danych za pomocą tylko jednego predyktora (powiedzmy (x, y)). Dane są takie, że dla małych wartości x wartości y ściśle dopasowują się do linii prostej, jednak wraz ze wzrostem wartości x wartości y stają się bardziej zmienne. Oto przykład takich danych (kod R)

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)

Jestem ciekawy, czy istnieje jakaś transformacja mocy (być może Box Cox?), Która pozwala mi lepiej dopasować dane niż po prostu liniowe dopasowanie, jak pokazano poniżej.

fit = lm(y ~ x)

Jak rozumiem, celem transformacji takich jak Box Cox nie jest lepsze dopasowanie, ale spełnienie założeń modelu. To może uzyskać lepsze dopasowanie, gorsze dopasowanie lub niewielką zmianę, ale będzie to dopasowanie, które nie narusza założeń.
Peter Flom

transformacja nieliniowa sprawi, że relacja liniowa stanie się nieliniowa (chociaż czasami możesz również przekształcić x i to naprawić). Jednak transformacja może również wyprostować krzywą, a jednocześnie zmniejszyć heteroskedastyczność (chociaż nie zawsze jest możliwe wykonanie obu z tą samą transformacją). W przypadku tych danych log-transform nieco pomaga.
Glen_b

4
Wykorzystując dwie skrajne i środkowe (piąte) wartości , metoda pokazana na stronie stats.stackexchange.com/questions/35711/... wskazuje, że logarytm (transformacja Box-Coxa z parametrem 0) byłby odpowiedni do linearyzacji zależności. Użycie pierwszej, szóstej i ostatniej wartości wskazuje, że odwrotność (parametr -1) byłaby dobra. Sugeruje to, że prawie dowolny parametr od 0 do -1 może działać. Zakres nie jest zaskoczeniem, biorąc pod uwagę, jak mało jest danych. Brak monotonicznej reekspresji ustabilizuje zmienność tych danych. y
whuber

Odpowiedzi:


6

Pakiet MASS, który jest już dostarczony z zainstalowanym R, ma boxcox()funkcję, której możesz użyć: Po wczytaniu danych wykonaj:

library(MASS)
boxcox(y ~ x)

Następnie spójrz na wykres, który on generuje, który pokazuje graficznie 95% przedział ufności dla parametru transformacji boxcox. Ale tak naprawdę nie ma wystarczających danych (n = 10), aby to zrobić, wynikowy przedział ufności wynosi prawie od -2 do 2 !, z maksymalnym oszacowaniem prawdopodobieństwa około 0 (transformata logarytmiczna, jak powiedziano wcześniej). Jeśli twoje prawdziwe dane zawierają więcej obserwacji, powinieneś spróbować.

Jak powiedzieli inni, ta transformacja naprawdę próbuje ustabilizować wariancje. Nie jest to tak naprawdę oczywiste z teorii, ponieważ próbuje ona zmaksymalizować funkcję prawdopodobieństwa opartą na rozkładzie normalnym, która zakłada stałą wariancję. Można by pomyśleć, że maksymalizacja prawdopodobieństwa opartego na normie będzie próbowała znormalizować rozkład reszt, ale w praktyce główny wkład w maksymalizację prawdopodobieństwa wynika ze stabilizacji wariancji. To może nie jest tak zaskakujące, biorąc pod uwagę, że prawdopodobieństwo, które maksymalizujemy, oparte jest na stałej wariancji rodziny rozkładów normalnych!

Kiedyś napisałem demo oparte na suwaku w XLispStat, co wyraźnie to pokazało!


3

Gdy masz relację liniową, ale nierówne wariancje, zazwyczaj musisz przekształcić zarówno x, jak i y, aby uzyskać liniową relację z równymi wariancjami (lub po prostu użyj ważonej regresji metodą najmniejszych kwadratów dla zmiennych nietransformowanych).

Procedura AVAS może służyć do sugerowania możliwych przekształceń.


Spójrz na dane: zmienia się monotonicznie dla od do , a następnie systematycznie dużo oscyluje dla od do . Oznacza to, że żadna ciągła monotoniczna reekspresja nie zdoła ustabilizować wariancji. Twoja sugestia najmniejszych kwadratów ważonych wygląda obiecująco w świetle tego ograniczenia, ale jak wybrać wagi? yx15x510y
whuber

Zgadzam się z @whuber
brokuły

1
Zgadzam się z @whuber dla tego konkretnego zestawu danych, po prostu założyłem, że dane te zostały szybko skomponowane w celu zilustrowania (i dlatego pokazują ludzki brak losowości / rzeczywistości). Moja odpowiedź jest bardziej ogólną radą dotyczącą ogólnego przypadku nierównych odchyleń.
Greg Snow,

Biorąc pod uwagę, że wariancja zwiększa się wraz z x, czy glmszkielet z funkcją łącza Poissona ją przeciąłby?
Roman Luštrik,

3
@ RomanLuštrik, regresję Poissona należy wziąć pod uwagę, ale wyboru należy dokonać na podstawie nauki, a nie danych. Powyższe dane mają wartości nie całkowite dla , więc musiałby istnieć jakiś rodzaj okna wagi lub obserwacji, aby wartości nie będące liczbami całkowitymi miały sens w regresji Poissona. Należy wziąć to pod uwagę tylko wtedy, gdy zmienna odpowiedzi reprezentuje liczby, a nauka stojąca za danymi jest zgodna z rozkładem Poissona. y
Greg Snow,

1

Cóż, w R możesz spróbować tego:

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

wprowadź opis zdjęcia tutaj

Ale tak naprawdę zależy to od tego, co rozumiesz przez „lepsze dopasowanie do danych”


-2

cóż, jeśli wszystkie twoje dane dla x nie są ujemne, możesz użyć transformacji box cox ... aby oszacować idealną wartość parametru lambda transformacji, możesz użyć matlaba ... http://www.mathworks.in/ help / finance / boxcox.html


1
„Idealny” oznacza tutaj coś innego niż zadany w pytaniu. Pytanie ma na celu ustabilizowanie wariancji, podczas gdy rozwiązanie Matlab dąży do tego, aby były jak najbardziej zbliżone do normalnie rozłożonych.
whuber
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.