3

使用线性模型函数 lm() 多项式公式可以包含这样的快捷符号:

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

这是一个快捷方式,使用户不必创建 x^2 和 x^3 变量或在公式中键入它们,例如I(x^2) + I(x^3). 非线性函数有可比的符号nls()吗?

4

2 回答 2

6

poly(x, 3)不仅仅是一个捷径x + I(x ^ 2) + I(x ^ 3)- 它实际上产生了具有不相关的良好特性的legendre多项式:

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
于 2010-09-04T20:27:07.670 回答
5

简短的回答:是的。

稍微长一点的答案:测试这个非常便宜。我只是跑来example(nls)加载模型和数据,然后插入一个带有poly().

更长的答案:lm()实际上并不知道poly(),公式在拟合发生之前得到解决。所以从某种意义上说,nls()有一个公式接口......它一定会接受poly()

题外话,没有被问到:您是否按照 Harrell 的 RMS 书研究过样条曲线?

于 2010-09-04T19:25:36.407 回答