r - R线性回归公式中的大写字母 "I"是什么意思?

标签 r regression formula polynomials

我一直无法找到这个问题的答案,主要是因为谷歌搜索带有独立字母(如“I”)的任何内容都会导致问题。

“我”在这样的模型中做什么?

data(rock)
lm(area~I(peri - mean(peri)), data = rock)

考虑到以下方法不起作用:

lm(area ~ (peri - mean(peri)), data = rock)

并且这个确实有效:

rock$peri - mean(rock$peri)

关于如何自己研究这个问题的任何关键词也会非常有帮助。

最佳答案

II( ... ) 的内容从 R 公式的注视中隔离隔绝解析代码。它允许标准 R 运算符像在公式之外使用它们一样工作,而不是被视为特殊的公式运算符。

例如:

y ~ x + x^2

对于 R 来说,意思是“给我:

  1. x = x 的主效应,并且
  2. x^2 = x 的主效应和二阶交互作用”,

不是预期的x加上x-平方:

> model.frame( y ~ x + x^2, data = data.frame(x = rnorm(5), y = rnorm(5)))
           y           x
1 -1.4355144 -1.85374045
2  0.3620872 -0.07794607
3 -1.7590868  0.96856634
4 -0.3245440  0.18492596
5 -0.6515630 -1.37994358

这是因为 ^ 是公式中的特殊运算符,如 ?formula 中所述。您最终只在模型框架中包含 x,因为 x 的主效应已包含在公式中的 x 项中,并且无需与 x 交叉即可获得 x^2 项中的二阶交互作用。

要获得常用的运算符,您需要使用I()将调用与公式代码隔离:

> model.frame( y ~ x + I(x^2), data = data.frame(x = rnorm(5), y = rnorm(5)))
            y          x       I(x^2)
1 -0.02881534  1.0865514 1.180593....
2  0.23252515 -0.7625449 0.581474....
3 -0.30120868 -0.8286625 0.686681....
4 -0.67761458  0.8344739 0.696346....
5  0.65522764 -0.9676520 0.936350....

(最后一列是正确的,只是看起来很奇怪,因为它属于 AsIs 类。)

在您的示例中,- 在公式中使用时表示从模型中删除一个项,您希望 - 在模型中具有这是减法的通常二元运算符含义:

> model.frame( y ~ x - mean(x), data = data.frame(x = rnorm(5), y = rnorm(5)))
Error in model.frame.default(y ~ x - mean(x), data = data.frame(x = rnorm(5),  : 
  variable lengths differ (found for 'mean(x)')

这会失败,因为 mean(x) 是一个长度为 1 的向量,而 model.frame() 非常正确地告诉你这与其他变量。解决这个问题的方法是I():

> model.frame( y ~ I(x - mean(x)), data = data.frame(x = rnorm(5), y = rnorm(5)))
           y I(x - mean(x))
1  1.1727063   1.142200....
2 -1.4798270   -0.66914....
3 -0.4303878   -0.28716....
4 -1.0516386   0.542774....
5  1.5225863   -0.72865....

因此,如果您想要在公式中使用具有特殊含义的运算符,但需要其非公式含义,则需要将运算元素包装在 I 中().

阅读?formula了解有关特殊运算符的更多信息,阅读?I了解有关函数本身及其其他主要用途的更多详细信息-数据帧内的情况(如果您感兴趣,这就是 AsIs 位的来源)。

关于r - R线性回归公式中的大写字母 "I"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24192428/

相关文章:

动态列的 Excel 公式

r - R在数据帧过滤中使用的算法是什么?

foreach 循环中 mclapply 出现 R 错误

r - 如何用 r 中的地区映射印度州?

r - 滞后回归

excel - 将单元格颜色从工作表复制到具有相同单元格值的工作表

r - 根据字符串中多个单词的精确匹配转换新列

r - Predict.glm(..., type = "response", se.fit = TRUE) 返回什么标准错误?

r - 如何在线性回归中手动计算 t 统计量的 p 值

javascript - JS 公式为游戏中的不同分支创建体验目标