Czy splajny nie pasują do danych?

47

Mój problem : Niedawno spotkałem statystykę, który poinformował mnie, że splajny są przydatne tylko do eksploracji danych i podlegają nadmiernemu dopasowaniu, a zatem nie są przydatne w przewidywaniu. Wolał odkrywać za pomocą prostych wielomianów ... Ponieważ jestem wielkim fanem splajnów, a to wbrew mojej intuicji, jestem zainteresowany ustaleniem, jak ważne są te argumenty, a jeśli jest duża grupa anty-splajn- działacze tam?

Tło : Kiedy tworzę modele, staram się podążać za Frankiem Harrella, Strategie modelowania regresji (1). Twierdzi, że ograniczone splajny sześcienne są ważnym narzędziem do badania zmiennych ciągłych. Argumentuje również, że wielomiany słabo modelują pewne relacje, takie jak progi, logarytmika (2). Do przetestowania liniowości modelu sugeruje test ANOVA dla splajnu:

H0:β2=β3==βk1=0

Zaszufladkowałem się za przeplatanie splajnami, ale nie znalazłem zbyt wiele przydatności (oprócz ogólnych ostrzeżeń o nie używaniu zbyt wielu węzłów). Na tym forum wydaje się preferowane modelowanie splajnu, Kolassa , Harrell , Gung .

Znalazłem jeden post na blogu o wielomianach, diabełu nadmiernego dopasowania, który mówi o przewidywaniu wielomianów. Post kończy się następującymi komentarzami:

W pewnym stopniu przykłady tu przedstawione są oszukiwaniem - wiadomo, że regresja wielomianowa jest wysoce niesolidna. Znacznie lepiej w praktyce jest używać splajnów niż wielomianów.

Teraz skłoniło mnie to do sprawdzenia, w jaki sposób splajny będą działać na przykładzie:

library(rms)
p4 <- poly(1:100, degree=4)
true4 <- p4 %*% c(1,2,-6,9)
days <- 1:70

set.seed(7987)
noise4 <- true4 + rnorm(100, sd=.5)
reg.n4.4 <- lm(noise4[1:70] ~ poly(days, 4))
reg.n4.4ns <- lm(noise4[1:70] ~ ns(days,4))
dd <- datadist(noise4[1:70], days)
options("datadist" = "dd")
reg.n4.4rcs_ols <- ols(noise4[1:70] ~ rcs(days,5))

plot(1:100, noise4)
nd <- data.frame(days=1:100)
lines(1:100, predict(reg.n4.4, newdata=nd), col="orange", lwd=3)
lines(1:100, predict(reg.n4.4ns, newdata=nd), col="red", lwd=3)
lines(1:100, predict(reg.n4.4rcs_ols, newdata=nd), col="darkblue", lwd=3)

legend("top", fill=c("orange", "red","darkblue"), 
       legend=c("Poly", "Natural splines", "RCS - ols"))

Daje następujący obraz: Porównanie splajnów i wielomianów

Podsumowując, nie znalazłem wiele, co przekonałoby mnie do ponownego rozważenia splajnów, czego mi brakuje?

  1. FE Harrell, Strategie modelowania regresji: Z zastosowaniem modeli liniowych, regresji logistycznej i analizy przeżycia, przedruk miękkiej okładki w twardej oprawie, wydanie 1. 2001. Springer, 2010.
  2. FE Harrell, KL Lee i BG Pollock, „Modele regresji w badaniach klinicznych: określanie związków między predyktorami a odpowiedzią”, JNCI J Natl Cancer Inst, vol. 80, nr 15, s. 1198–1202, październik 1988 r.

Aktualizacja

Komentarze sprawiły, że zastanawiam się, co dzieje się w zakresie danych, ale z niewygodnymi krzywymi. W większości sytuacji nie wychodzę poza granice danych, jak pokazuje powyższy przykład. Nie jestem pewien, czy to kwalifikuje się jako prognoza ...

W każdym razie oto przykład, w którym tworzę bardziej złożoną linię, której nie można przetłumaczyć na wielomian. Ponieważ większość obserwacji znajduje się w centrum danych, próbowałem to również zasymulować:

library(rms)
cmplx_line <-  1:200/10
cmplx_line <- cmplx_line + 0.05*(cmplx_line - quantile(cmplx_line, .7))^2
cmplx_line <- cmplx_line - 0.06*(cmplx_line - quantile(cmplx_line, .3))^2
center <- (length(cmplx_line)/4*2):(length(cmplx_line)/4*3)
cmplx_line[center] <- cmplx_line[center] + 
    dnorm(6*(1:length(center)-length(center)/2)/length(center))*10

ds <- data.frame(cmplx_line, x=1:200)

days <- 1:140/2

set.seed(1234)
sample <- round(rnorm(600, mean=100, 60))
sample <- sample[sample <= max(ds$x) & 
                     sample >= min(ds$x)]
sample_ds <- ds[sample, ]

sample_ds$noise4 <- sample_ds$cmplx_line + rnorm(nrow(sample_ds), sd=2)
reg.n4.4 <- lm(noise4 ~ poly(x, 6), data=sample_ds)
dd <- datadist(sample_ds)
options("datadist" = "dd")
reg.n4.4rcs_ols <- ols(noise4 ~ rcs(x, 7), data=sample_ds)
AIC(reg.n4.4)

plot(sample_ds$x, sample_ds$noise4, col="#AAAAAA")
lines(x=ds$x, y=ds$cmplx_line, lwd=3, col="black", lty=4)

nd <- data.frame(x=ds$x)
lines(ds$x, predict(reg.n4.4, newdata=ds), col="orange", lwd=3)
lines(ds$x, predict(reg.n4.4rcs_ols, newdata=ds), col="lightblue", lwd=3)

legend("bottomright", fill=c("black", "orange","lightblue"), 
       legend=c("True line", "Poly", "RCS - ols"), inset=.05)

To daje następujący wykres:

Bardziej złożona nieliniowa linia wykresu

Aktualizacja 2

Od tego postu opublikowałem artykuł, który analizuje nieliniowość ze względu na wiek na dużym zestawie danych. Suplement porównuje różne metody i napisałem o nim post na blogu .

Max Gordon
źródło
16
Szczerze mówiąc, nie bardzo wiem, skąd pochodzi twój przyjaciel statystyczny. Możesz dopasowywać się do wielomianów i splajnów tak samo. Nadmierne dopasowanie pochodzi z twojej klasy modeli o nadmiernej pojemności; tym, co wyróżnia wydajność różnych modeli, jest sposób, w jaki ograniczają one ich pojemność. W przypadku (naturalnych) splajnów jest to położenie i liczba węzłów, w przypadku wielomianów jest to stopień.
facet
1
@guy: Takie jest również moje przekonanie, że zawsze możesz przewyższyć swoje dane bez względu na to, jakiej metody użyjesz. Podczas mojej klasy regresji mój profesor powiedział mi, że wielomian wygina się tam, gdzie występuje większość danych, przez co skrajności są bardziej niewiarygodne. Chociaż nie znalazłem żadnego artykułu na poparcie tego roszczenia.
Max Gordon
Wszystkie krzywe na pierwszym wykresie nie pasują do danych po prawej stronie.
Emil Friedman
1
Czy wymiar „x” na powyższych wykresach jest związany z czasem? Jeśli tak, żadna z tych metod nie jest odpowiednia, ponieważ obie są „wybiegające w przyszłość” w tym sensie, że do modelowania wykorzystują sąsiednie punkty (po obu stronach).
arielf
@arielf: Nie x nie jest zamierzone jako zmienna czasowa. Myślałem o tym jak o zmiennej, w której próbkujemy maksymalną liczbę obserwacji w centrum. W moich badaniach nie patrzymy tak bardzo w przyszłość, myślę, że bardziej dotyczy to wnioskowania niż przewidywania. Zmienna ma oznaczać cholesterol, ciśnienie krwi, BMI lub inną wspólną zmienną ciągłą.
Max Gordon,

Odpowiedzi:

18

Nadmierne dopasowanie wynika z dopuszczenia zbyt dużej klasy modeli. Jest to nieco trudne w przypadku modeli z ciągłymi parametrami (takimi jak splajny i wielomiany), ale jeśli zdyskretyzujesz parametry na pewną liczbę różnych wartości, zobaczysz, że zwiększenie liczby węzłów / współczynników zwiększy wykładniczo liczbę dostępnych modeli . Dla każdego zestawu danych jest splajn i wielomian, który jest dokładnie dopasowany, o ile pozwalasz na wystarczającą liczbę współczynników / węzłów. Może być tak, że splajn z trzema węzłami jest większy niż wielomian z trzema współczynnikami, ale nie jest to uczciwe porównanie.

Jeśli masz niską liczbę parametrów i duży zestaw danych, możesz być całkiem pewny, że nie jesteś przeregulowany. Jeśli chcesz wypróbować większą liczbę parametrów, możesz spróbować przeprowadzić krzyżową weryfikację w zestawie testów, aby znaleźć najlepszą liczbę, lub możesz zastosować kryterium takie jak Minimalna długość opisu .

EDYCJA : Zgodnie z żądaniem w komentarzach, przykład zastosowania MDL. Najpierw musisz poradzić sobie z faktem, że Twoje dane są ciągłe, więc nie mogą być reprezentowane w skończonym kodzie. Dla uproszczenia podzielimy przestrzeń danych na pola boczne i zamiast opisywać punkty danych, opiszemy pola, do których należą dane. Oznacza to, że tracimy trochę dokładności, ale możemy uczynić dowolnie małym, więc nie ma to większego znaczenia.ϵϵϵ

Teraz zadaniem jest opisanie zestawu danych tak zwięźle, jak to możliwe za pomocą jakiegoś wielomianu. Najpierw opiszemy wielomian. Jeśli jest to wielomian n-tego rzędu, wystarczy przechowywać współczynniki (n + 1). Ponownie musimy zdyskretować te wartości. Następnie musimy najpierw zapisać wartość w kodowaniu bez prefiksu (więc wiemy, kiedy przestać czytać), a następnien + 1nn+1wartości parametrów. Dzięki tym informacjom odbiorca naszego kodu może przywrócić wielomian. Następnie dodajemy resztę informacji wymaganych do przechowywania zestawu danych. Dla każdego punktu danych podajemy wartość x, a następnie ile pól w górę lub w dół punkt danych leży poza wielomianem. Obie wartości przechowujemy w kodowaniu bez prefiksów, dzięki czemu krótkie wartości wymagają kilku bitów i nie będziemy potrzebować ograniczników między punktami. (Możesz skrócić kod dla wartości x, przechowując tylko przyrosty między wartościami)

Podstawowym punktem jest tutaj kompromis. Jeśli wybiorę wielomian rzędu (jak f (x) = 3,4), wówczas model jest bardzo prosty do przechowywania, ale dla wartości y zasadniczo przechowuję odległość do średniej. Więcej współczynników daje mi lepiej dopasowany wielomian (a zatem krótsze kody dla wartości y), ale muszę wydać więcej bitów na opisanie modelu. Model, który daje najkrótszy kod dla twoich danych, najlepiej pasuje do kryterium MDL.

(Należy pamiętać, że jest to znane jako „surowy MDL” i można wprowadzić pewne udoskonalenia w celu rozwiązania różnych problemów technicznych).

Piotr
źródło
Dziękuję Peter za odpowiedź. Próbowałem owinąć głowę wokół MDL, zwłaszcza jak go zastosować. Byłoby miło, gdyby to zostało wyjaśnione na podstawie jednego z moich przykładów. Jako niestatysta lubię mieć przykłady, zanim zrozumiem podstawową logistykę. Przykład monety w artykule na Wiki nie dotarł do mnie ...
Max Gordon,
Dodałem przykład.
Peter
Dziękuję Peterowi za przykład, teraz jest dla mnie o wiele bardziej zrozumiały.
Max Gordon
20

Statystycy od wieków spierają się o dopasowanie wielomianowe, a z mojego doświadczenia wynika, że:

Splajny to w zasadzie szereg różnych równań poskładanych razem, co ma tendencję do zwiększania dokładności interpolowanych wartości kosztem możliwości rzutowania poza zakres danych. Jest to w porządku, jeśli wiesz, że Twoje dane są czyste i pochodzą ze spójnego źródła i jeśli próbujesz opisać prawdopodobieństwo obecności różnych wartości w swoim zakresie wartości. Jednak zwykle nie dowiadujemy się zbyt wiele o teoretycznych podstawach napędzających nasze dane, ponieważ nowy splajn rozpoczyna się, gdy stary splajn przestaje dokładnie opisywać dane. To sprawia, że ​​przewidywanie wartości poza naszymi danymi jest prawie bezwartościowe.

Teraz splajny nie są pod tym względem wyjątkowe. Funkcje wielomianowe faktycznie cierpią z powodu tego samego problemu, jeśli po prostu dopasowujemy dane i nie używamy teoretycznych ram do wyboru zmiennych. Ci, którzy mają dobrze uformowaną teorię, sterującą zmiennymi, które pozwalają zmieniać, i o ile bardziej ufają zdolności złożonej funkcji wielomianowej do ekstrapolacji prognoz poza dane.

Jednak wielu statystyk pracuje z danymi bez pomocy wcześniej ustalonych ram teoretycznych, co popycha niektórych ludzi do prostych wielomianów. Powodują, że mniej elastyczna funkcja, która pasuje do danych, jest bardziej prawdopodobne, aby dokładnie przewidzieć wartości poza danymi, ponieważ funkcja ta jest mniej podatna na anomalie w danych. Podczas gdy rozmawiałem na ten temat z ludźmi, którzy wolą proste wielomiany, nigdy nie miałem poczucia grupy anty-splajnowej. To bardziej przypomina proste wielomiany, które sprawiają, że niektórzy statystycy czują się bardziej komfortowo, unikając przeregulowania.

Zrzeczenie się

Osobiście nie używam splajnów ani prostych wielomianów z większością moich danych, ponieważ pracuję w polu z wieloma wcześniej ustalonymi ramami teoretycznymi. Ponadto zwykle obserwowałem gromadzenie danych i mogę dobrze zrozumieć, co było przyczyną wyników. W takim przypadku buduję raczej algorytm logiczny i testuję jego sprawność, zamiast testować sprawność funkcji wielomianowej. Możesz dodać to ziarno soli do mojej odpowiedzi.

Dinre
źródło
18
Wielomiany są znacznie bardziej wrażliwe na anomalie w danych niż splajny. Wartość odstająca w dowolnym miejscu w zestawie danych ma ogromny efekt globalny , natomiast w splajnach efekt jest lokalny.
facet
Rozumiem twój punkt widzenia i jest to prawdą, jeśli stosujesz doskonałe podejście informacyjne lub nie masz wystarczającej ilości informacji na temat charakteru danych. Wielu statystyk (łącznie ze mną) zakłada niedoskonałe informacje i podejmuje próbę zastosowania kryteriów wykluczenia na podstawie znanych informacji przed próbą dopasowania danych. Niebezpieczne wartości odstające należy teoretycznie wykluczyć z próby dopasowania. Jeśli nie masz znanych informacji o naturze danych (a jest to dość powszechne), utkniesz próbując obejść wartości odstające.
Dinre
5
Musiałbym być bardziej przekonany, że splajny regresji ekstrapolują bardziej niebezpiecznie niż wielomiany.
Frank Harrell,
1
To nie jest nic nowego. Jest to raczej różnica między statystykami wykonanymi na wczesnych etapach zrozumienia a późniejszymi etapami zrozumienia. Im bardziej rozumiesz system, tym mniej polegasz na dopasowanych funkcjach i tym bardziej polegasz na modelach teoretycznych.
Dinre
1
Co powiesz na użycie ograniczonych splajnów sześciennych, które ograniczają funkcje do liniowości na zewnątrz punktów danych (czytam książkę Harrella). W każdym razie ekstrapolacja jest zawsze podejrzana. Pomyśl o eksperymencie, który odkrył nadprzewodnictwo lub plazmę. Teorię należy udowodnić eksperymentalnie! Myślę, że funkcje do dopasowania są bardziej odpowiednie dla problemu interpolacji. Myślę, że bez teorii nie byłby w stanie wybrać tylko jednego modelu z błędnymi predyktorami (także nieznany rozkład) i nieznanego rozkładu y | x, nawet jeśli podano wystarczającą ilość danych.
KH Kim