Transformacja Box-Coxa dla zmiennych niezależnych?

53

Czy istnieje transformacja podobna do Box-Coxa dla zmiennych niezależnych? Czyli transformacja, która optymalizuje zmienną , aby lepiej pasowała do modelu liniowego?xy~f(x)

Jeśli tak, to czy jest funkcja do wykonania tego R?

Tal Galili
źródło
1
Nie znam żadnych udogodnień Ri przez chwilę się nad tym zastanawiam, nie jestem pewien, jak w ogóle można to zrobić. Jakie kryteria zoptymalizowałbyś, aby zapewnić najbardziej „liniową” transformację? jest kuszące, ale jak widać w mojej odpowiedzi tutaj , sama nie może być użyta do sprawdzenia, czy założenie liniowości modelu jest spełnione. Czy miałeś na myśli jakieś kryteria? R 2R2R2
Makro
1
Mam wrażenie, że widziałem już artykuł na ten temat. Być może bardziej rozsądne jest korzystanie z „kowariancji” zamiast „zmiennej niezależnej”.
Stéphane Laurent,
Myślę, że (z pamięci ...) jest to pewne wdrożenie w pakiecie samochodowym (R). Ale sprawdziłbyś także gamę jak w pakiecie gmcv.
kjetil b halvorsen
Wątek omawiający automatyczne wnioskowanie o parametrach Box-Coxa (poprzez jednoczesną transformację wszystkich zmiennych niezależnych wraz ze zmienną zależną) pojawił się na stronie stats.stackexchange.com/questions/60431/… .
whuber

Odpowiedzi:

72

John Tukey opowiedział się za swoją „ trzypunktową metodą ” znajdowania ponownego wyrażania zmiennych w celu linearyzacji zależności.

Zilustruję to ćwiczeniem z jego książki Exploratory Data Analysis . Są to dane dotyczące prężności pary rtęci z eksperymentu, w którym temperatura była zmieniana i mierzono prężność pary.

pressure <- c(0.0004, 0.0013, 0.006, 0.03, 0.09, 0.28, 0.8, 1.85, 4.4, 
              9.2, 18.3, 33.7, 59, 98, 156, 246, 371, 548, 790) # mm Hg
temperature <- seq(0, 360, 20) # Degrees C

Zależność jest silnie nieliniowa: patrz lewy panel na ilustracji.

Działki

Ponieważ jest to ćwiczenie eksploracyjne , oczekujemy, że będzie interaktywne. Analityk jest proszony o rozpoczęcie od zidentyfikowania trzech „typowych” punktów na wykresie : jednego w pobliżu każdego końca i jednego w środku. Zrobiłem to tutaj i oznaczyłem je na czerwono. (Kiedy po raz pierwszy ćwiczyłem to ćwiczenie dawno temu, użyłem innego zestawu punktów, ale osiągnąłem te same wyniki).

W metodzie trzypunktowej szuka się - za pomocą siły lub innej - transformacji Box-Coxa, która zastosowana do jednej ze współrzędnych - y lub x - (a) umieści typowe punkty w przybliżeniu na linia i (b) używa „ładnej” mocy, zwykle wybieranej z „drabiny” mocy, które mogą być zinterpretowane przez analityka.

Z powodów, które staną się widoczne później, rozszerzyłem rodzinę Box-Cox, pozwalając na „przesunięcie”, aby przekształcenia były w formie

x(x+α)λ1λ.

Oto szybka i brudna Rimplementacja. Najpierw znajduje optymalne rozwiązanie , a następnie zaokrągla do najbliższej wartości na drabinie i, z zastrzeżeniem tego ograniczenia, optymalizuje (w rozsądnych granicach). Jest to niezwykle szybkie, ponieważ wszystkie obliczenia są oparte tylko na tych trzech typowych punktach z oryginalnego zestawu danych. (Można to zrobić nawet ołówkiem i papierem, co właśnie zrobił Tukey).(λ,α)λα

box.cox <- function(x, parms=c(1,0)) {
  lambda <- parms[1]
  offset <- parms[2]
  if (lambda==0) log(x+offset) else ((x+offset)^lambda - 1)/lambda
}
threepoint <- function(x, y, ladder=c(1, 1/2, 1/3, 0, -1/2, -1)) {
  # x and y are length-three samples from a dataset.
  dx <- diff(x)
  f <- function(parms) (diff(diff(box.cox(y, parms)) / dx))^2
  fit <- nlm(f, c(1,0))
  parms <- fit$estimate #$
  lambda <- ladder[which.min(abs(parms[1] - ladder))]
  if (lambda==0) offset = 0 else {
    do <- diff(range(y))
    offset <- optimize(function(x) f(c(lambda, x)), 
                       c(max(-min(x), parms[2]-do), parms[2]+do))$minimum    
  }
  c(lambda, offset)
}

Po zastosowaniu metody trzypunktowej do wartości ciśnienia (y) w zbiorze danych o oparach rtęci otrzymujemy środkowy panel wykresów.

data <- cbind(temperature, pressure)
n <- dim(data)[1]
i3 <- c(2, floor((n+1)/2), n-1)
parms <- threepoint(temperature[i3], pressure[i3])
y <- box.cox(pressure, parms)

W tym przypadku parmsokazuje się równy : metoda wybiera przekształcenie logarytmiczne ciśnienia.(0,0)

Doszliśmy do punktu analogicznego do kontekstu pytania: z jakiegokolwiek powodu (zwykle w celu ustabilizowania wariancji resztkowej) ponownie wyrażiliśmy zmienną zależną , ale okazuje się, że związek ze zmienną niezależną jest nieliniowy. Teraz przechodzimy do ponownego wyrażenia zmiennej niezależnej , aby zlinearyzować relację. Odbywa się to w ten sam sposób, po prostu odwracając role xiy:

parms <- threepoint(y[i3], temperature[i3])
x <- box.cox(temperature, parms)

Stwierdzono, że wartości parmszmiennej niezależnej (temperatura) wynoszą : innymi słowy, powinniśmy wyrazić temperaturę jako stopnie Celsjusza powyżej ° C i zastosować jej odwrotność ( moc ). (Z przyczyn technicznych transformacja Box-Coxa dodatkowo dodaje do wyniku.) Wynikową relację pokazano w prawym panelu.(1,253.75)25411


2732542732541/(1x)

2540

Whuber
źródło
2
Witaj drogi Whuber. Co za interesująca odpowiedź, przeczytałem ją z przyjemnością, dziękuję! (i trochę się z tym pobawię, aby zobaczyć, jak to może pasować do problemu, nad którym pracuję)
Tal Galili,
3
n2data <- cbind(temperature, pressure)R
2
@landroni Całkowe i małe ułamkowe potęgi często powstają w teoriach fizycznych, chemicznych i biologicznych, a także w rozważaniach geometrycznych. (Na przykład, gdy zmienna jest objętością, jej pierwiastek sześcienny ma długość - która jest interpretowalna - podczas gdy, powiedzmy, jej siódmy pierwiastek nie ma prostej interpretacji geometrycznej.) Inne potęgi rzadko mają taką interpretację.
whuber
3
@Frank Zgadza się; jest to wyraźnie i bezwstydnie technika eksploracyjna. Zauważ, że nawet nie twierdzi, że jest przewidywalny. Eksploracja może jedynie sugerować sposoby kontynuacji. Można jednak wyobrazić sobie przeznaczenie czterech df budżetu modelowania na oszacowanie tych przekształceń - a oszacowanie to może zostać automatycznie włączone do algorytmu dopasowania przy użyciu podejścia Tukeya lub w inny sposób (ML jest oczywistą możliwością).
whuber
5
YYλ
11

Rzuć okiem na te slajdy „Diagnostyka regresji” autorstwa Johna Foxa (dostępne tutaj , wraz z odnośnikami), które krótko omawiają kwestię transformacji nieliniowości. Obejmuje „regułę wypukłości” Tukeya dotyczącą wybierania transformacji mocy (do której odnosi się zaakceptowana odpowiedź), ale także wspomina rodziny transformacji Box-Cox i Yeo-Johnson. Zobacz rozdział 3.6 slajdów. Bardziej formalne ujęcie tego samego autora znajduje się w J. Fox, Applied Regression Analysis and Generalized Linear Models, Second Edition (Sage, 2008) .

Jeśli chodzi o rzeczywiste pakiety R, które pomagają w tym, absolutnie spójrz na pakiet samochodowy , autorstwa J. Foxa i S. Weisberga. Ten pakiet towarzyszy J. Foxowi i S. Weisbergowi, An R Companion to Applied Regression, wydanie drugie, (Sage, 2011) , kolejny obowiązkowy artykuł. Korzystając z tego pakietu możesz zacząć od basicPower()(proste transformacje mocy), bcPower()(transformacje Box-Cox) i yjPower()(transformacje Yeo-Johnsona). Istnieje również powerTransform () :

Funkcja powerTransform służy do szacowania normalizujących transformacji zmiennej jednowymiarowej lub zmiennej losowej wielowymiarowej.

Sprawdź obie książki, aby uzyskać więcej szczegółów na temat teorii leżącej u podstaw tych transformacji i na temat podejść obliczeniowych.

landroni
źródło