6
在以下示例中,假设您有一个模型,其中supp
是因子变量。R公式和结果系数名称
lm(len ~ dose + supp, data = ToothGrowth)
但我想使用不同的基准级别的因素。我可以直接在公式中指定此:
lm(len ~ dose + relevel(supp, "VC"), data = ToothGrowth)
,输出将是:
Call:
lm(formula = len ~ dose + relevel(supp, "VC"), data = ToothGrowth)
Coefficients:
(Intercept) dose relevel(supp, "VC")OJ
5.573 9.764 3.700
这是非常方便,直接做变换公式中,而不是让中间的数据集或改变现有的。例如,当您使用scale
来标准化变量时,必须考虑最终模型中包含的其他变量中的错误。通常,输出中的结果系数名称变得相当难看。
我的问题是:是否可以指定在使用公式时由表达式产生的变量的名称?类似于
lm(len ~ dose + (OJ = relevel(supp, "VC")), data = Toothgrowth)
(这不起作用)。
编辑:虽然G.GTothendieck提出的解决方案很好,但它实际上会产生错误的结果。以下示例显示了这一点:
# Create some data:
df <- data.frame(x1 = runif(10), x2=runif(10))
df <- transform(df, y = x1 + x2 + rnorm(10))
# Introduce some missings.
df$x1[2:3] <- NA
# The wrong result:
lm(formula = y ~ z1 + z2,
data = transform(df, z1 = scale(x1), z2=scale(x2)))
# extract a model frame.
df2 <- model.frame(y ~ x1 + x2, df)
# The right result:
lm(formula = y ~ scale(x1) + scale(x2),
data = df2)
# or:
lm(formula = y ~ z1 + z2,
data = transform(model.frame(y ~ x1 + x2, df),
z1 = scale(x1), z2 = scale(x2)))
的问题是,入葬时X2,它使用的不是最终的模型,因为X1拥有missings意见。
对我来说,问题依然存在,是否有公式接口来处理这种情况,而不需要使用额外公式和提取可以“转换”的模型框架的烦人的中间步骤。
我希望问题很清楚。
尼斯,非常感谢! – Stefan 2012-03-06 15:08:36
如果你喜欢它,它可以解决你的问题,你应该点击接受它... – 2012-03-06 17:31:28
嗨,GG,虽然你的答案很好,并在许多情况下工作,它仍然可以给不希望的结果。我在编辑问题时做了一个例子。 – Stefan 2012-03-07 13:47:47