R: полиномиальная сокращенная запись в формуле nls () - PullRequest
3 голосов
/ 04 сентября 2010

С помощью функции линейной модели полиномиальные формулы lm () могут содержать сокращенную запись, подобную этой:

m <- lm(y ~ poly(x,3))

это ярлык, который удерживает пользователя от необходимости создавать переменные x ^ 2 и x ^ 3 или вводить их в формулу, например I(x^2) + I(x^3). Существуют ли сопоставимые обозначения для нелинейной функции nls()?

Ответы [ 2 ]

6 голосов
/ 05 сентября 2010

poly(x, 3) - это нечто большее, чем просто ярлык для x + I(x ^ 2) + I(x ^ 3) - он на самом деле создает легендарных полиномов , которые имеют свойство некоррелировать:

options(digits = 2)
x <- runif(100)
var(cbind(x, x ^ 2, x ^ 3))
#       x            
# x 0.074 0.073 0.064
#   0.073 0.077 0.071
#   0.064 0.071 0.067
zapsmall(var(poly(x, 3)))
#      1    2    3
# 1 0.01 0.00 0.00
# 2 0.00 0.01 0.00
# 3 0.00 0.00 0.01
5 голосов
/ 04 сентября 2010

Краткий ответ: да.

Немного более длинный ответ: это довольно дешево проверить.Я просто запустил example(nls), чтобы загрузить модель и данные, а затем вставил термин с poly().

Еще более длинный ответ: lm() на самом деле не знает о poly(), формулы решаютсядо примерки.Таким образом, в том смысле, что nls() имеет интерфейс формулы ... он должен был принять poly().

Не по теме и не спрашивать: вы смотрели на сплайны, а также на книгу Харрела по RMS

...