Ustawianie węzłów w naturalnych splajnach sześciennych w R.

23

Mam dane z wieloma skorelowanymi funkcjami i chcę zacząć od ograniczenia funkcji z płynną funkcją podstawową przed uruchomieniem LDA. Próbuję użyć naturalnych splajnów sześciennych w splinespakiecie z nsfunkcją. Jak przejść do przypisywania węzłów?

Oto podstawowy kod R:

library(splines)
lda.pred <- lda(y ~ ns(x, knots=5))

Ale nie mam pojęcia, jak wybrać węzły ns.

Belmont
źródło
3
pytasz o to, jak określić węzły w (tj. poprzez argumenty do ns ) czy pytasz o strategie decydowania o tym, gdzie umieścić węzły? R
kardynał
1
Zobacz Harrell, Regression Strategies 2015, aby uzyskać dobrą dyskusję na temat tego, gdzie umieścić węzły (to nie ma znaczenia, więc kwantyle są tak dobre jak wszystko - wyjątki są, jeśli masz uzasadnione powody, by wierzyć, że zmiany zachowania w pewnym momencie) i liczba węzłów (3, 4 lub 5 w zależności od N)
statystyki

Odpowiedzi:

40

Jak określić węzły w R.

nsFunkcja wytwarza naturalne regresji spline podstaw danego wektora wejściowego. Węzły można określić albo za pomocą argumentu stopni swobody, dfktóry przyjmuje liczbę całkowitą, albo za pomocą argumentu węzłów, knotsktóry przyjmuje wektor dający pożądane położenie węzłów. Pamiętaj, że w kodzie, który napisałeś

library(splines)
lda.pred <- lda(y ~ ns(x, knots=5))

nie poprosiłeś o pięć węzłów, ale poprosiłeś o pojedynczy (wewnętrzny) węzeł w lokalizacji 5.

Jeśli użyjesz dfargumentu, węzły wewnętrzne zostaną wybrane na podstawie kwantyli wektora x. Na przykład, jeśli wykonasz połączenie

ns(x, df=5)

Wtedy podstawą będą dwa węzły brzegowe i 4 węzły wewnętrzne, umieszczone odpowiednio na 20, 40, 60 i 80 kwantylu x. Węzły brzegowe są domyślnie umieszczane na min. I maks x.

Oto przykład, aby określić lokalizacje węzłów

x <- 0:100
ns(x, knots=c(20,35,50))

Gdyby zamiast tego zadzwonić ns(x, df=4), otrzymalibyśmy 3 węzły wewnętrzne odpowiednio w lokalizacjach 25, 50 i 75.

Możesz także określić, czy chcesz przechwycić termin. Zwykle nie jest to określone, ponieważ nsjest najczęściej używane w połączeniu z lm, co obejmuje niejawnie przechwytywanie (chyba że zmuszone jest tego nie robić). Jeśli użyjesz intercept=TRUEswojego wezwania do ns, upewnij się, że wiesz, dlaczego to robisz, ponieważ jeśli to zrobisz, a następnie zadzwonisz lmnaiwnie, matryca projektowa skończy się niedoborem rangi.

Strategie umieszczania węzłów

Węzły są najczęściej umieszczane w kwantylach, podobnie jak domyślne zachowanie ns. Intuicja jest taka, że ​​jeśli masz dużo danych skupionych blisko siebie, możesz potrzebować więcej węzłów, aby modelować wszelkie potencjalne nieliniowości w tym regionie. Ale to nie znaczy, że jest to (a) jedyny wybór lub (b) najlepszy wybór.

Oczywiście można dokonać innych wyborów i są one specyficzne dla domeny. Patrzenie na histogramy i szacunki gęstości predyktorów może dostarczyć wskazówek, gdzie potrzebne są węzły, chyba że istnieje jakiś „kanoniczny” wybór, biorąc pod uwagę twoje dane.

Jeśli chodzi o interpretację regresji, chciałbym zauważyć, że chociaż z pewnością możesz „bawić się” z umieszczaniem węzłów, powinieneś zdawać sobie sprawę, że ponosisz karę za wybór modelu, którą powinieneś uważnie ocenić i dostosować wszelkie wnioski jako wynik.

kardynał
źródło
Biorąc pod uwagę x <- 0:100, należy zrobić „właściwy” sposób zdefiniowania punktów przerwania knots_x <- quantile(x, probs=c(.2, .35, .5)), który zostanie następnie wykorzystany ns(x, knots=knots_x)do zdefiniowania 3 wewnętrznych węzłów odpowiednio w miejscach 25, 50 i 75. To, co mnie pomieszało w odpowiedzi, to to, że spodziewałem się, że będę musiał podać żądane kwantyle w knotsargumencie, podczas gdy muszę wprowadzić rzeczywiste wartości z xwektora ...
landroni
Analiza badań zdrowotnych, Edward L. Korn, Barry I. Graubard s. 98 twierdzą, że Durrleman i Simon (1989) zalecają (0,05,0,50; 0,95) dla naturalnych splajnów
Chris