我对R中的公式感到困惑。
说我有一个公式,其中右侧包括一个转换,例如log(var)
或(1-var)
。
(1-var)
,则model.frame(...)
的结果将忽略转换后的变量。log(var)
,则model.frame(...)
的结果将包含转换后的变量。为什么?这是因为公式框架是为线性模型编写的,并且相减会导致完美的多重共线性?最重要的是:如何从右侧包含任意转换的变量的公式中获取变量?
dt <- data.frame(V1=1:3, V2=4:6) # sample data
fml <- V1 ~ V2 + (1-V2)
model.frame(fml, dt) # get variables --> ignores (1-V2)
# V1 V2
# 1 1 4
# 2 2 5
# 3 3 6
# This works
fml <- V1 ~ V2 + log(V2)
model.frame(fml, dt) # get variables --> includes log(V2)
# V1 V2 log(V2)
# 1 1 4 1.386294
# 2 2 5 1.609438
# 3 3 6 1.791759
规格
R version 3.5.0 (2018-04-23)
Platform: x86_64-w64-mingw32/x64 (64-bit)
答案 0 :(得分:2)
与log不同,减号在公式语法中具有特殊含义;结果,R能够解析对数函数,但不能解析减号。要在1-X上回归,请使用I(1- x),如
> dt <- data.frame(V1=1:3, V2=4:6) # sample data
>
> fml <- V1 ~ V2 + I(1-V2)
> model.frame(fml, dt)
V1 V2 I(1 - V2)
1 1 4 -3
2 2 5 -4
3 3 6 -5