Прогнозирование при новом значении с использованием функции Лоусса в R

#r #loess

#r #лесс

Вопрос:

Я использую lowess функцию для подгонки регрессии между двумя переменными x и y . Теперь я хочу узнать установленное значение при новом значении x . Например, как мне найти подходящее значение x=2.5 в следующем примере. Я знаю loess , что могу это сделать, но я хочу воспроизвести чей-то сюжет, и он использовал lowess .

 set.seed(1)
x <- 1:10
y <- x   rnorm(x)
fit <- lowess(x, y)
plot(x, y)
lines(fit)
  

введите описание изображения здесь

Ответ №1:

Локальная регрессия (lowess) — это непараметрический статистический метод, это не похоже на линейную регрессию, где вы можете использовать модель непосредственно для оценки новых значений.

Вам нужно будет взять значения из функции (вот почему она возвращает вам только список) и выбрать свою собственную схему интерполяции. Используйте схему для прогнозирования ваших новых точек.

Распространенным методом является сплайн-интерполяция (но есть и другие):

https://www.r-bloggers.com/interpolation-and-smoothing-functions-in-base-r/

РЕДАКТИРОВАТЬ: я почти уверен predict , что функция выполняет интерполяцию за вас. Я также не могу найти никакой информации о том, что именно predict используется, поэтому я попытался отследить исходный код.

https://github.com/wch/r-source/blob/af7f52f70101960861e5d995d3a4bec010bc89e6/src/library/stats/R/loess.R

 else { ## interpolate
## need to eliminate points outside original range - not in pred_
  

Я уверен, что код R вызывает базовую реализацию C, но она плохо документирована, поэтому я не знаю, какой алгоритм она использует.

Мое предложение таково: либо доверяйте predict функции, либо разработайте свой собственный алгоритм интерполяции.

Комментарии:

1. Спасибо. В loess , вы можете использовать cars.lo <- loess(dist ~ speed, cars); predict(cars.lo, data.frame(speed = seq(5, 30, 1)), se = TRUE) , чтобы получить прогноз при новом значении x . Вы случайно не знаете, какой метод интерполяции здесь используется? Я не могу найти его в своем файле справки.

2. @PatrickLi Как я уже объяснял, функция выполняет интерполяцию для вас. Я смотрю, какую схему он использует, как только я ее найду, я обновлю ответ.

3. @PatrickLi Я пытался отследить это, но не полностью успешно. Посмотрите на мои ОТРЕДАКТИРОВАННЫЕ.

4. Непараметрическая локально взвешенная регрессия — это совершенно правильная статистическая модель, как и параметрическая регрессия. Учитывая набор значений {y_i, X_i}, вы можете получить оценочное значение y для любого нового значения X. Просто требуется больше работы для кодирования.

5. Альтернативное решение здесь: stats.stackexchange.com/questions/126699 /…