Transformowanie zmiennych dla regresji wielokrotnej w R.


26

Próbuję wykonać regresję wielokrotną w R. Jednak moja zmienna zależna ma następujący wykres:

DV

Oto macierz wykresu rozrzutu ze wszystkimi moimi zmiennymi ( WARjest zmienną zależną):

SPLOM

Wiem, że muszę wykonać transformację tej zmiennej (i ewentualnie zmiennych niezależnych?), Ale nie jestem pewien dokładnej wymaganej transformacji. Czy ktoś może skierować mnie we właściwym kierunku? Z przyjemnością udzielę wszelkich dodatkowych informacji na temat związku między zmiennymi niezależnymi i zależnymi.

Grafika diagnostyczna z mojej regresji wygląda następująco:

Wykresy diagnostyczne

EDYTOWAĆ

Po transformacji zmiennych zależnych i niezależnych za pomocą transformacji Yeo-Johnsona wykresy diagnostyczne wyglądają następująco:

Po przekształceniu

Jeśli używam GLM z łączem logu, grafika diagnostyczna to:

GLM z log-link


3
Cześć @ zglaa1 i witamy. Dlaczego uważasz, że musisz przekształcić zmienne? Pierwszym krokiem byłoby dopasowanie regresji do oryginalnych zmiennych, a następnie przyjrzenie się dopasowaniu (resztki itp.). Resztki powinny być w przybliżeniu normalnie rozłożone, a nie zmienne. Może ten post będzie dla ciebie interesujący.
COOLSerdash

Dziękujemy za link i sugestię. Przeprowadziłem regresję i wiem, że zmienne należy przekształcić na podstawie następującego wykresu: i.imgur.com/rbmu14M.jpg Widzę bezstronność i brak stałej zmienności reszt. Nie są też normalne.
zgall1

@COOLSerdash Rzuciłem okiem na link. Mam podstawowe doświadczenie w statystyce, więc rozumiem dyskusję. Jednak moim problemem jest to, że mam ograniczone doświadczenie w stosowaniu technik, których się nauczyłem, więc staram się dowiedzieć, co dokładnie muszę zrobić z moimi danymi (w programie Excel lub R), aby faktycznie wykonać niezbędne transformacje.
zgall1

Dzięki za grafikę. Masz całkowitą rację, mówiąc, że to dopasowanie jest nieoptymalne. Czy możesz wykonać macierz scatterplot z cyframi DV i IV w regresji? Można to zrobić Rza pomocą polecenia, pairs(my.data, lower.panel = panel.smooth)gdzie my.databyłby twój zestaw danych.
COOLSerdash

2
lmboxcox(my.lm.model)MASSλ

Odpowiedzi:


30

Książka Johna Foxa T towarzysząca regresji stosowanej jest doskonałym źródłem informacji na temat modelowania regresji stosowanej R. Pakiet, carktórego używam w tej odpowiedzi, jest pakietem towarzyszącym. Książka ma również stronę internetową z dodatkowymi rozdziałami.


Przekształcanie odpowiedzi (inaczej zmienna zależna, wynik)

RlmboxCoxcarλfamily="yjPower"

boxCox(my.regression.model, family="yjPower", plotit = TRUE)

To tworzy wykres podobny do następującego:

Lambdaplot Box-Cox

λλ

Aby teraz przekształcić zmienną zależną, użyj funkcji yjPowerz carpakietu:

depvar.transformed <- yjPower(my.dependent.variable, lambda)

lambdaλboxCox

Ważne: Zamiast transformować logarytmicznie zmienną zależną, powinieneś rozważyć dopasowanie GLM do log-link. Oto kilka odniesień, które dostarczają dalszych informacji: po pierwsze , po drugie , po trzecie . Aby to zrobić R, użyj glm:

glm.mod <- glm(y~x1+x2, family=gaussian(link="log"))

gdzie yjest zmienna zależna i x1, x2itd. są twoi niezależnymi zmiennymi.


Transformacje predyktorów

Transformacje ściśle dodatnich predyktorów można oszacować na podstawie maksymalnego prawdopodobieństwa po transformacji zmiennej zależnej. Aby to zrobić, użyj funkcji boxTidwellz carpaczki (oryginalny papier znajduje się tutaj ). Używaj go tak: boxTidwell(y~x1+x2, other.x=~x3+x4). Ważną rzeczą jest to, że ta opcja other.xwskazuje warunki regresji, których nie należy przekształcać. To byłyby wszystkie twoje zmienne kategorialne. Funkcja generuje dane wyjściowe o następującej formie:

boxTidwell(prestige ~ income + education, other.x=~ type + poly(women, 2), data=Prestige)

          Score Statistic   p-value MLE of lambda
income          -4.482406 0.0000074    -0.3476283
education        0.216991 0.8282154     1.2538274

incomeλincomedochódnmiw=1/dochódolre

Kolejnym bardzo interesującym postem na stronie o transformacji zmiennych niezależnych jest ten .


Wady transformacji

1/yλλ


Modelowanie relacji nieliniowych

Dwie dość elastyczne metody dopasowania relacji nieliniowych to ułamkowe wielomiany i splajny . Te trzy artykuły stanowią bardzo dobre wprowadzenie do obu metod: pierwszej , drugiej i trzeciej . Jest też cała książka o ułamkach wielomianów i R. Do R opakowaniamfp narzędzia wielozmienną wielomianów ułamkowe. Ta prezentacja może być pouczająca na temat wielomianów ułamkowych. Aby dopasować splajny, możesz użyć funkcji gam(uogólnione modele addytywne, zobacz tutaj doskonałe wprowadzenie z R) z pakietumgcv lub funkcjins(naturalne splajny sześcienne) i bs(sześcienne splajny B) z pakietu splines(zobacz tutaj przykład użycia tych funkcji). Za gampomocą tej s()funkcji możesz określić, które predyktory chcesz dopasować za pomocą splajnów, używając funkcji:

my.gam <- gam(y~s(x1) + x2, family=gaussian())

tutaj x1byłby dopasowany przy użyciu splajnu i x2liniowo, jak w normalnej regresji liniowej. Wewnątrz gammożesz określić rodzinę dystrybucji i funkcję łącza jak w glm. Aby więc dopasować model z funkcją log-link, możesz określić opcję family=gaussian(link="log")in gamas glm.

Obejrzyj ten post ze strony.


1
Dobre wytłumaczenie. Nie wiem, czy wyraźny Box-Cox jest naprawdę najczęstszą metodą wyboru transformacji. Jeśli policzysz ludzi, którzy wybierają dzienniki w jakikolwiek sposób, zgaduję, że jest to metoda mniejszości. Ten wybredny punkt oczywiście nie wpływa na nic innego.
Nick Cox

@NickCox Thanks (+1 za twoją odpowiedź, btw). Stwierdzenie, że Box-Cox jest najczęstszą metodą, pochodzi z książki Johna Foxa. Przyjąłem to na pierwszy rzut oka, ponieważ nie mam wystarczającego doświadczenia, aby ocenić to oświadczenie. Usunę oświadczenie.
COOLSerdash,

Dziękuję bardzo za szczegółowe wyjaśnienie. Spróbuję teraz zastosować je do moich danych.
zgall1

@COOLSerdash Korzystając ze szczegółowej instrukcji, zastosowałem transformację Boxa Coxa do moich zmiennych zależnych, a następnie niezależnych i mam następujący wykres moich zmiennych diagnostycznych - i.imgur.com/eO01djl.jpg Oczywiście jest poprawa, ale nadal wydaje się, że być problemami ze stałą zmiennością i bezstronnością, a na pewno jest problem z normalnością. Gdzie mogę stąd iść?
zgall1

1
@ zgall1 Dziękujemy za opinię, doceniam to. Hm, tak, transformacje raczej nie pomogły :). W tym momencie prawdopodobnie spróbowałbym użyć splajnów dla predyktorów przy użyciu uogólnionych modeli addytywnych (GAM) z mgcvpakietem i gam. Jeśli to nie pomoże, obawiam się, że to koniec dowcipu. Są tu ludzie, którzy są znacznie bardziej doświadczeni niż ja i może mogą udzielić ci dalszych rad. Nie mam też wiedzy o baseballu. Być może istnieje bardziej logiczny model, który ma sens z tymi danymi.
COOLSerdash,

8

Powinieneś powiedzieć nam więcej o naturze twojej odpowiedzi (wynik, zależna) zmienna. Od pierwszego wykresu jest mocno wypaczony z wieloma wartościami bliskimi zeru i niektórymi ujemnymi. Z tego jest możliwe, ale nieuniknione, że transformacja pomogłaby ci, ale najważniejsze pytanie brzmi: czy transformacja zbliżyłaby twoje dane do relacji liniowej.

Zauważ, że ujemne wartości odpowiedzi wykluczają prostą transformację logarytmiczną, ale nie log (odpowiedź + stała), a nie uogólniony model liniowy z łączem logarytmicznym.

Na tej stronie znajduje się wiele odpowiedzi na temat dziennika (odpowiedź + stała), który dzieli statystycznych ludzi: niektórzy nie lubią tego jako doraźnego i trudnego do pracy, podczas gdy inni uważają to za legalne urządzenie.

GLM z łączem dziennika jest nadal możliwy.

Alternatywnie może się zdarzyć, że Twój model odzwierciedla pewien rodzaj procesu mieszanego, w którym to przypadku dobrym pomysłem byłby niestandardowy model bardziej odzwierciedlający proces generowania danych.

(PÓŹNIEJ)

OP ma zmienną zależną WAR o wartościach w przybliżeniu od około 100 do -2. Aby przezwyciężyć problemy z przyjmowaniem logarytmów zerowych lub ujemnych, OP proponuje krówkę zer i ujemnych do 0,000001. Teraz w skali logarytmicznej (podstawa 10) wartości te wynoszą od około 2 (około 100) do -6 (0,000001). Mniejszość sfałszowanych punktów w skali logarytmicznej jest obecnie mniejszością ogromnych wartości odstających. Wykreśl log_10 (fudged WAR) przeciwko cokolwiek innego, aby to zobaczyć.


Jak możesz stwierdzić z zamieszczonego powyżej wykresu rozrzutu, używam zestawu danych statystycznych baseballu. Niezależna zmienna, WAR, jest zasadniczo skumulowaną miarą wartości wniesionej przez zawodnika w trakcie jego kariery na poziomie ligi głównej. Zmienne niezależne, AdjSLG, SOPct i BBPct, są niewielkimi statystykami ligowymi, które powszechnie uważa się za przewidujące sukces na poziomie głównych lig. Zmienna Age to wiek, w którym gracz stworzył statystyki drugorzędnej ligi. Fikcyjne zmienne są używane do wskazania poziomu ligi mniejszej, na której opracowano statystyki.
zgall1

Jeśli chodzi o problem z ujemną zmienną niezależną (WAR), z powodów, które są nieco złożone, uzasadnione jest ponowne kodowanie tych zer jako zerowych, jeśli ułatwi to proces transformacji. W ramach tego zestawu danych jest to uzasadniona procedura. Jeśli chcesz, żebym podał więcej szczegółów (ostrzeżenie - wymagany żargon baseballowy), cieszę się, że mogę to zrobić.
zgall1

1
Wygląda na to, że WAR jest zmienną zależną . Dostarczasz dowody na moje twierdzenie, kwestionowane gdzie indziej na tej stronie, że te dwa warunki są często mylone. Radzę nie przekodowywać wartości ujemnych na zera (źle traktuje dane), ale używać GLM z linkiem do dziennika. Proszę założyć, że po mojej stronie nie ma zainteresowania ani nie znałem minucji baseballowych.
Nick Cox

Masz rację, że WAR jest moją zmienną zależną. Zajrzę do GLM z linkiem do dziennika. Dzięki za radę.
zgall1

1
Może być pomocne, aby wiedzieć, w jaki sposób obliczana jest wówczas WOJA kariery (czyli rozumieć proces generowania danych).
Affine
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.