转换R中线性模型的变量

时间:2016-10-04 18:13:08

标签: r lm

在线性模型的公式定义中转换模型是一个好习惯吗?

例如:

reg1 <- lm(log(Y) ~ X + Z + (W)^2, data = data)

当我在数据中只有WXYZ而不是变换后的变量时?当我调用W^2的摘要时,我没有看到列出reg1

1 个答案:

答案 0 :(得分:5)

由于快速搜索没有显示重复(可能会有答案),因此这里有一个:

您指定回归方程的lm部分称为公式。公式以自己的方式使用运算符(如^+),因此您无法使用它们在公式中进行算术运算。

为了在公式中进行算术运算,你需要使用I函数,正如@jogo建议的那样(参见?I在R中的描述),如下所示:

reg1 <- lm(log(Y) ~ X + Z + I(W^2), data = data)

这可以防止R将运算符解释为公式运算符,因此它们被解释为算术运算符

R以可能非直观的方式解释输入的另一个例子是函数data.frame。如果您尝试从列表中构造data.frame,它会将其强制转换为原子向量:

li = list(x = 1:3, y = 11:13, z = 21:23)
data.frame(a = 5:7, b = li)
#   a b.x b.y b.z
# 1 5   1  11  21
# 2 6   2  12  22
# 3 7   3  13  23

使用I也可以避免这种情况,这会将禁止列表的这种特殊解释视为一个或多个原子向量,而是创建一个列表列:

data.frame(a = 5:7, b = I(li))
#   a          b
# x 5    1, 2, 3
# y 6 11, 12, 13
# z 7 21, 22, 23