在R公式中使用变量的平方

6

我正在尝试运行一个回归,其中包括自变量的平方。其他转换似乎有效,但平方却无法识别。例如:

lm(y ~ x + x^2 + sin(x), data=as.data.frame(cbind(x=rnorm(10), y=rnorm(10))))

Call:
lm(formula = y ~ x + x^2 + sin(x), data = as.data.frame(cbind(x = rnorm(10), 
   y = rnorm(10))))

Coefficients:
(Intercept)            x       sin(x)  
    -0.1594      -0.6171       1.2072 

罪已经被认定,但x^2没有被认定。

4
建议使用poly,或者至少使用I(x^2)来实现此目的。 - user3710546
1
@Pascal 的 poly 函数在默认配置下可能会给出混乱的系数,并且删除项可能会很困难。 - James
@James 可能是这样。这就是帮助页面存在的原因。 - user3710546
1
@Pascal 除了帮助文件默认提到它们是正交多项式外,没有提到它们会在线性模型中产生误导系数。 - James
2个回答

18

为了将术语“as is”视为字面意义而不是解释为公式运算符^,您需要用I进行包装(有关详细信息,请参见?formula)。

lm(y ~ x + I(x^2) + sin(x), data=as.data.frame(cbind(x=rnorm(10), y=rnorm(10))))

Call:
lm(formula = y ~ x + I(x^2) + sin(x), data = as.data.frame(cbind(x = rnorm(10), 
    y = rnorm(10))))

Coefficients:
(Intercept)            x       I(x^2)       sin(x)  
    0.06850      2.82023     -0.03109     -3.84221

0

你可以简单地写

lm(y ~ x + c(x*x) + sin(x), data=as.data.frame(cbind(x=rnorm(10), y=rnorm(10))))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接