Jak przetestować powiązanie nieliniowe?

37

W przypadku wykresu 1 mogę przetestować powiązanie między xiy, wykonując prostą korelację. działka 1

W przypadku wykresu 2, w którym związek jest nieliniowy, ale istnieje wyraźny związek między xiy, w jaki sposób mogę przetestować powiązanie i oznaczyć jego naturę? działka 2

użytkownik1447630
źródło

Odpowiedzi:

35

... związek jest nieliniowy, ale istnieje wyraźny związek między xiy, jak mogę przetestować powiązanie i oznaczyć jego naturę?

Jednym sposobem osiągnięcia tego byłoby dopasować jako częściowo parametrycznie przybliżony funkcji z wykorzystaniem, na przykład, uogólnione dodatków modelu i testowania, czy nie, że oszacowanie funkcjonalna jest stała, które nie wskazują na stosunek między i . Takie podejście uwalnia cię od konieczności wykonywania regresji wielomianowej i podejmowania czasami arbitralnych decyzji dotyczących kolejności wielomianu itp.x y xyxyx

W szczególności, jeśli masz obserwacje , możesz dopasować model:(Yi,Xi)

E(Yi|Xi)=α+f(Xi)+εi

i przetestuj hipotezę . Za pomocą tej funkcji można to zrobić . Jeśli Twój wynik jest predyktorem, możesz wpisać:H0:f(x)=0, xRgam()yx

library(mgcv) 
g <- gam(y ~ s(x)) 

Wpisanie summary(g)daje wynik testu hipotezy powyżej. Jeśli chodzi o charakter relacji, najlepiej byłoby to zrobić za pomocą fabuły. Jednym ze sposobów na to R(przy założeniu, że powyższy kod został już wprowadzony)

plot(g,scheme=2)

Jeśli twoja zmienna odpowiedzi jest dyskretna (np. Binarna), możesz to uwzględnić w tym frameworku, dopasowując logistyczną GAM (w R, dodajesz family=binomialdo swojego wywołania gam). Ponadto, jeśli masz wiele predyktorów, możesz dołączyć wiele dodatków (lub zwykłe terminy liniowe) lub dopasować funkcje wielu zmiennych, np. jeśli masz predyktory . Złożoność relacji jest automatycznie wybierana przez krzyżową weryfikację, jeśli korzystasz z metod domyślnych, chociaż jest tutaj duża elastyczność - w razie zainteresowania przejrzyj plik pomocy .f(x,z)x, zgam

Makro
źródło
1
Wolę to podejście od dwóch oddzielnych korelacji rang po obu stronach ponieważ bada relację jako całość. Jest także lepszy niż model parametryczny, więc zamiast tego zaakceptowałem to. x=a
user1447630,
@ user1447630 To jest model relacji. Wielomianowa regresja liniowa lub regresja nieliniowa, a także modele addytywne są sposobami charakteryzowania zależności funkcji. Mógłbym wspomnieć o każdym z nich. Ale poprosiłeś o miarę asocjacji, więc dałem ci inne możliwe formy korelacji. Równie ładna, jak odpowiedź Makra, pasuje do relacji funkcjonalnej, ale nie zapewnia miary powiązania.
Michael R. Chernick,
1
@Michael, nie wiem, które pytanie czytałeś, ale OP zapytał, jak przetestować związek, a nie miarę związku. W każdym razie, jakkolwiek przyjemna może być twoja odpowiedź (i ignorując fakt, że wymaga ona raczej silnej a priori wiedzy o tym, gdzie pojawia się punkt zmiany), myślę, że jest ona zbytnio dostosowana do konkretnego wątku w tym pytaniu, zamiast ogólnego problem „skojarzenia nieliniowego”.
Makro
3
@Michael, twoja interpretacja ( „pytanie dotyczyło tego, jak uogólnić pojęcie korelacji ..” ) i statystyczny „argument”, który podajesz (btw, „testowanie siginicance współczynników i modelu” w modelu liniowym jest to to samo, co testowanie korelacji) nie ma sensu, biorąc pod uwagę fakty, więc nie zamierzam się z nimi zajmować. Ale „… po tym, jak dałeś mi swoją, moja była nieakceptowana, a twoja została zaakceptowana ... Po prostu czułem, że to nie w porządku” prowadzi kampanię o twoją odpowiedź, która odzwierciedla jedynie fiksację punktów rep, a nie nic użytecznego dla społeczności.
Makro
5
@Macro Michael mi dopasowanie modelu relacji między i w pół / nieparametrycznego sposób jest sposób testowania związku między nimi. Taki test można rozszerzyć, mierząc stopień powiązania z różnymi sposobami, które każdy z was sugeruje. Myślę, że obie odpowiedzi i obserwacji tutaj były bardzo przydatne dla mnie, sans ad hominem . Ponieważ jednak moje pytanie zawierało pytanie, w jaki sposób możemy „nazwać jego naturę”, co można interpretować jako dopasowanie do modelu, będę trzymać się odpowiedzi Makra. yxy
user1447630,
14

Gdyby nieliniowy związek był monotoniczny, odpowiednia byłaby korelacja rang (rho Spearmana). W twoim przykładzie jest wyraźny mały region, w którym krzywa zmienia się z monotonicznie rosnącego na montonicznie malejącego, jak zrobiłaby to parabola w punkcie, w którym pierwsza pochodna wynosi .0

Myślę, że jeśli masz trochę wiedzy na temat modelowania (poza informacjami empirycznymi), gdzie występuje ten punkt zmiany (powiedzmy przy ), to możesz scharakteryzować korelację jako dodatnią i użyć rho Spearmana na zbiorze par gdzie aby podać oszacowanie tej korelacji i użyć innego oszacowania korelacji Spearmana dla gdzie korelacja jest ujemna. Te dwa szacunki następnie scharakteryzować strukturę korelacji między i oraz w przeciwieństwie do oszacowania korelacji, który byłby blisko , gdy oszacowana przy użyciu wszystkich danych szacunki te będą zarówno duże i przeciwny znak.( x , y ) x < x > x y 0x=a(x,y)x<ax>axy0

Niektórzy mogą argumentować, że tylko informacje empiryczne ( tj . Obserwowane pary wystarczają, aby to uzasadnić.(x,y)

Michael R. Chernick
źródło
Zasadniczo podzieliłbym relację x ~ y na dwie części. Poniżej x = a korelacja rho Spearmana jest dodatnia. Powyżej x = a korelacja rho Spearmana jest ujemna. Lubię to podejście. Istnieje jednak również sposób parametrycznego testowania, czy związek między xiy pasuje do odwrotnej paraboli, tj. , gdzie jest ujemne. Być może wymaga to niestandardowego testu statystycznego? ay=ax2+bx+ca
user1447630,
1
W tym celu dopasowujesz model kwadratowy za pomocą powiedzmy regresji liniowej OLS i wykonujesz standardowy test statystyczny, w którym współczynnik a jest większy niż 0 (powiedzmy jednostronny test t).
Michael R. Chernick,
1
@Michael, jeśli chodzi o twój ostatni komentarz, jeśli nie jest symetrycznie rozmieszczone wokół zera, może istnieć duża kolinearność między a . Ponieważ prawdopodobnie wpłynie to na standardowy test dla współczynnika regresji, test współczynnika wiarygodności może być bardziej odpowiedni, prawda? x x 2 txxx2t
Makro
@Macro Myślę, że jeśli istnieje wysoki stopień korelacji między x i x twoja sugestia może być dobra. Myślę jednak, że powszechne jest stosowanie indywidualnych testów t na współczynnikach, nawet jeśli zmienne towarzyszące X i X mogą być skorelowane. Wysoka kolinearność powoduje, że współczynniki są bardzo niestabilne, ponieważ identyfikowalność jest prawie utracona. W takich przypadkach wykonanie jakiegokolwiek testu współczynników zmiennych towarzyszących może nie mieć sensu. 1 2212
Michael R. Chernick
0

Ktoś mnie poprawi, jeśli moje rozumienie jest tutaj błędne, ale jednym ze sposobów radzenia sobie ze zmiennymi nieliniowymi jest zastosowanie aproksymacji liniowej. Na przykład zapisanie rozkładu wykładniczego powinno pozwolić traktować zmienną jako rozkład normalny. Można go następnie wykorzystać do rozwiązania problemu, jak w przypadku dowolnej regresji liniowej.

Akshata T.
źródło
8
Nie sądzę, że to naprawdę odpowiada na pytanie. Wykonywanie dzienników to nie to samo, co przybliżanie liniowe. Co więcej, nawet jeśli pobierasz dzienniki, rozkład, dla którego dziennik zmiennej pierwotnej jest zmienną normalnie dystrybuowaną, nie jest rozkładem wykładniczym, ale rozkładem logarytmicznym . Jednak ani zmienna niezależna, ani zależna nie musi być normalnie rozkładana, aby regresja liniowa była odpowiednia - chodzi tutaj o związek między zmiennymi, a nie ich rozkład krańcowy.
Silverfish,
0

Kiedyś wdrażałem ogólny model addytywny do wykrywania nieliniowej zależności między dwiema zmiennymi, ale ostatnio dowiedziałem się o korelacji nieliniowej zaimplementowanej za pomocą nlcorpakietu w języku R, możesz zaimplementować tę metodę w taki sam sposób, jak korelacja Pearsona , współczynnik korelacji wynosi od 0 do 1, a nie od -1 do 1, jak w korelacji Pearsona. Wyższy współczynnik korelacji implikuje istnienie silnej zależności nieliniowej. Załóżmy dwa szeregi czasowe x2i y2korelacja nieliniowa między tymi dwoma szeregami czasowymi jest testowana w następujący sposób

install.packages("devtools") 
library(devtools)
install_github("ProcessMiner/nlcor")
library(nlcor)
c <- nlcor(x2, y2, plt = T)
c$cor.estimate
[1] 0.897205

Dwie zmienne wydają się być silnie skorelowane poprzez relację nieliniową, można również uzyskać skorygowaną wartość p dla współczynnika korelacji

c$adjusted.p.value
[1] 0

Możesz także wykreślić wyniki

print(c$cor.plot)

Możesz wyświetlić ten link, aby uzyskać więcej informacji

Ameer
źródło