Czy istnieje transformacja podobna do Box-Coxa dla zmiennych niezależnych? Czyli transformacja, która optymalizuje zmienną , aby lepiej pasowała do modelu liniowego?y~f(x)
Jeśli tak, to czy jest funkcja do wykonania tego R
?
Czy istnieje transformacja podobna do Box-Coxa dla zmiennych niezależnych? Czyli transformacja, która optymalizuje zmienną , aby lepiej pasowała do modelu liniowego?y~f(x)
Jeśli tak, to czy jest funkcja do wykonania tego R
?
Odpowiedzi:
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.
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
Oto szybka i brudna R
implementacja. 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 parms
okazuje się równy : metoda wybiera przekształcenie logarytmiczne ciśnienia.
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 parms
zmiennej 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.
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.
R
i 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 2