转换R中线性模型的变量

dle*_*eal -2 r lm

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

例如:

reg1 <- lm(log(Y) ~ X + Z + (W)^2, data = data)
Run Code Online (Sandbox Code Playgroud)

当我只有W,X,Y,Z在数据而不是转化变量?W^2当我打电话给总结时,我没有看到列出reg1.

jak*_*kub 5

由于快速搜索没有显示重复(这将有答案),这里有一个:

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

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

reg1 <- lm(log(Y) ~ X + Z + I(W^2), data = data)
Run Code Online (Sandbox Code Playgroud)

这可以防止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
Run Code Online (Sandbox Code Playgroud)

这也可以避免使用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
Run Code Online (Sandbox Code Playgroud)