Сплайны перекрывают данные?


47

Моя проблема : я недавно встретил статистика, который сообщил мне, что сплайны полезны только для исследования данных и подвержены переобучению, таким образом, бесполезны при прогнозировании. Он предпочел исследовать с помощью простых полиномов ... Так как я большой поклонник сплайнов, и это противоречит моей интуиции, мне интересно узнать, насколько верны эти аргументы, и существует ли большая группа против сплайнов. активисты там?

Предыстория : я пытаюсь следовать Фрэнку Харреллу, стратегиям регрессионного моделирования (1), когда создаю свои модели. Он утверждает, что ограниченные кубические сплайны являются допустимым инструментом для исследования непрерывных переменных. Он также утверждает, что многочлены плохо моделируют определенные отношения, такие как пороговые значения, логарифмические (2). Для проверки линейности модели он предлагает тест ANOVA для сплайна:

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

Я гуглил по переоснащению сплайнами, но не нашел, что это очень полезно (кроме общих предупреждений о том, что не следует использовать слишком много узлов). На этом форуме, кажется, предпочтение для моделирования сплайна, Kolassa , Харрелл , Кун .

Я нашел одно сообщение в блоге о многочленах, дьяволе переоснащения, которое говорит о предсказании многочленов. Пост заканчивается этими комментариями:

В некоторой степени примеры, представленные здесь, являются мошенничеством - полиномиальная регрессия, как известно, весьма ненадежна. Гораздо лучше на практике использовать сплайны, а не полиномы.

Теперь это побудило меня проверить, как сплайны будут работать в следующем примере:

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"))

Дает следующее изображение: Сравнение сплайнов и полиномов

В заключение я не нашел много, что убедило бы меня в пересмотре сплайнов, что мне не хватает?

  1. FE Harrell, Стратегии регрессионного моделирования: с приложениями к линейным моделям, логистической регрессии и анализу выживания, перепечатка в мягком переплете в твердом переплете 1-е изд. 2001. Springer, 2010.
  2. Ф.Э. Харрелл, К.Л. Ли и Б.Г. Поллок, «Модели регрессии в клинических исследованиях: определение взаимосвязей между предикторами и реакцией», JNCI J Natl Cancer Inst, vol. 80, нет 15, с. 1198–1202, октябрь 1988 г.

Обновить

Комментарии заставили меня задуматься о том, что происходит в пределах диапазона данных, но с неудобными кривыми. В большинстве случаев я не выхожу за границы данных, как показано в примере выше. Я не уверен, что это квалифицируется как предсказание ...

В любом случае, вот пример, где я создаю более сложную линию, которая не может быть переведена в полином. Так как большинство наблюдений находится в центре данных, я попытался смоделировать это также:

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)

Это дает следующий сюжет:

Более сложный неполиномиальный линейный график

Обновление 2

Начиная с этого поста, я опубликовал статью, которая рассматривает нелинейность для возраста в большом наборе данных. Приложение сравнивает различные методы, и я написал пост в блоге об этом .


16
Честно говоря, я не понимаю, откуда твой друг статистик. Вы можете одевать полиномы и сплайны точно так же. Переоснащение происходит из вашего класса моделей, имеющих чрезмерную вместимость; Что отличает производительность различных моделей, так это то, как они ограничивают свои возможности. Для (естественных) сплайнов это расположение узлов и число, для полиномов это степень.
парень

1
@ Guy: Это также мое убеждение, вы всегда можете переписать свои данные независимо от того, какой метод вы используете. Во время моего урока регрессии мой профессор сказал мне, что полиномы изгибаются там, где происходит большинство данных, что делает крайности более ненадежными. Хотя я не нашел ни одной статьи, подтверждающей это утверждение.
Макс Гордон

Все кривые на вашем первом графике не вписываются в данные с правой стороны.
Эмиль Фридман

1
Связано ли измерение «х» в приведенных выше графиках со временем? Если да, то ни один из этих методов не подходит, потому что оба являются «ориентированными на будущее» в том смысле, что они используют соседние точки (с обеих сторон) для моделирования.
Ариэльф

@arielf: Нет, x не предназначен как переменная времени. Я думал об этом как о некоторой переменной, где мы выбираем максимальное количество наблюдений в центре. В моем исследовании мы не слишком много заглядываем в будущее, я полагаю, что это больше связано с выводом, чем с предсказанием. Предполагается, что переменная представляет собой холестерин, кровяное давление, ИМТ или некоторую другую общую непрерывную переменную.
Макс Гордон

Ответы:


18

Переоснащение происходит из-за слишком большого класса моделей. Это становится немного сложнее с моделями с непрерывными параметрами (такими как сплайны и полиномы), но если вы разберете параметры на некоторое количество отдельных значений, вы увидите, что увеличение количества узлов / коэффициентов увеличит количество доступных моделей в геометрической прогрессии. , Для каждого набора данных есть сплайн и многочлен, которые точно подходят, при условии, что вы разрешите достаточно коэффициентов / узлов. Может случиться так, что сплайн с тремя узлами больше, чем многочлен с тремя коэффициентами, но это вряд ли справедливое сравнение.

Если у вас небольшое количество параметров и большой набор данных, вы можете быть уверены, что не перегружаете. Если вы хотите попробовать большее количество параметров, вы можете попробовать провести перекрестную проверку в вашем тестовом наборе, чтобы найти наилучшее число, или вы можете использовать критерий, такой как Минимальная длина описания .

ϵϵ

nn+1значения параметров. С помощью этой информации получатель нашего кода может восстановить полином. Затем мы добавляем остальную информацию, необходимую для хранения набора данных. Для каждого datapoint мы даем x-значение, а затем, сколько блоков вверх или вниз, точка данных лежит вне полинома. Оба значения мы храним в коде без префиксов, поэтому для коротких значений требуется несколько битов, и нам не понадобятся разделители между точками. (Вы можете сократить код для значений x, только сохраняя приращения между значениями)

Основополагающим моментом здесь является компромисс. Если я выбираю многочлен a-порядка (например, f (x) = 3.4), то модель очень проста для хранения, но для значений y я, по сути, сохраняю расстояние до среднего. Чем больше коэффициентов, тем лучше полином для подгонки (и, следовательно, более короткие коды для значений y), но мне придется потратить больше битов на описание модели. Модель, которая дает вам кратчайший код для ваших данных, наилучшим образом соответствует критерию MDL.

(Обратите внимание, что это называется «сырым MDL», и вы можете внести некоторые уточнения для решения различных технических проблем).


Спасибо, Питер, за ответ. Я пытался обернуть голову вокруг MDL, особенно как его применять. Было бы неплохо объяснить это на основе одного из моих примеров. Как не статистик, мне нравятся примеры, прежде чем я смогу понять основную логистику. Пример монеты в вики-статье не дошел до меня ...
Макс Гордон

Я добавил пример.
Питер

Спасибо Питеру за пример, теперь мне намного понятнее.
Макс Гордон

20

Статистики спорят о полиномиальной подгонке целую вечность, и, по моему опыту, это сводится к следующему:

Сплайны - это, в основном, ряд различных уравнений, соединенных вместе, что имеет тенденцию к повышению точности интерполированных значений за счет возможности проецирования за пределы диапазона данных. Это хорошо, если вы знаете, что ваши данные являются чистыми и поступают из непротиворечивого источника, и если вы пытаетесь описать вероятность присутствия различных значений в вашем диапазоне значений. Однако обычно мы не так много узнаем о теоретических основах наших данных, поскольку новый сплайн начинается, когда старый сплайн перестает точно описывать данные. Это делает прогноз значений вне наших данных практически бесполезным.

Теперь сплайны не являются уникальными в этом отношении. Полиномиальные функции на самом деле страдают от той же проблемы, если мы просто подбираем данные и не используем теоретическую основу для выбора переменных. Те, у кого есть хорошо сформированная теория, определяющая, какие переменные можно варьировать и на сколько будет больше доверять способности сложной полиномиальной функции экстраполировать предсказания за пределы данных.

Многие статистики, однако, работают с данными без помощи заранее созданной теоретической основы, и это подталкивает некоторых людей к простым полиномам. Они полагают, что менее гибкая функция, которая подходит для данных, с большей вероятностью будет точно прогнозировать значения вне данных, потому что эта функция менее подвержена влиянию аномалий в данных. Хотя у меня были разговоры об этом с людьми, которые предпочитают простые полиномы, я никогда не чувствовал себя сплайновой группой. Больше похоже на то, что простые полиномы заставляют некоторых статистиков чувствовать себя более комфортно, избегая переобучения.

отказ

Лично я не склонен использовать сплайны или простые полиномы с большинством моих данных, потому что я работаю в области со многими заранее установленными теоретическими основами. Кроме того, я обычно наблюдаю за сбором данных и могу получить приличное представление о том, что определяло результаты. В этом случае я строю больше логического алгоритма и проверяю его пригодность, а не проверяю пригодность полиномиальной функции. Вы можете добавить это зерно соли в мой ответ.


18
Полиномы гораздо более чувствительны к аномалиям в данных, чем сплайны. Выделение в любом месте в наборе данных имеет огромный глобальный эффект, в то время как в сплайнах эффект является локальным.
парень

Я понимаю вашу точку зрения, и это правда, если вы используете идеальный информационный подход или у вас недостаточно информации о характере данных. Многие статистики (включая меня) предполагают несовершенную информацию и пытаются применить критерии исключения, основанные на известной информации, прежде чем пытаться соответствовать данным. Опасные выбросы должны быть теоретически исключены из попытки подгонки. Если у вас нет известной информации о характере данных (и это довольно часто), то вы застряли, пытаясь обойти выбросы.
Динре

5
Я должен быть лучше убежден, что сплайны регрессии экстраполируют более опасно, чем полиномы.
Фрэнк Харрелл

1
Это не что-то новое. Скорее, это разница между статистикой, сделанной на ранних стадиях понимания, и поздними стадиями понимания. Чем больше вы понимаете систему, тем меньше вы полагаетесь на встроенные функции и тем больше вы полагаетесь на теоретические модели.
Динре

1
Как насчет использования ограниченных кубических сплайнов, которые ограничивают функции быть линейными снаружи точек данных (я читаю книгу Харрелла). В любом случае экстраполяция всегда подозрительна. Подумайте об эксперименте, который обнаружил сверхпроводимость или плазму. Теория должна быть доказана с помощью экспериментов! Я думаю, какие функции больше подходят для задачи интерполяции. Я полагаю, что без теории вы не сможете выбрать только одну модель с предикторами с ошибками (также неизвестным распределением) и неизвестным распределением y | x, даже если вы даете достаточно данных.
К. Х. Ким
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.