在线性模型的公式定义中转换模型是一个好习惯吗?
例如:
reg1 <- lm(log(Y) ~ X + Z + (W)^2, data = data)
当我在数据中只有W
,X
,Y
,Z
而不是变换后的变量时?当我调用W^2
的摘要时,我没有看到列出reg1
。
答案 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