En el ejemplo siguiente, supongamos que tiene un modelo en el que supp
es una variable de factor.Fórmulas R y nombres de coeficientes resultantes
lm(len ~ dose + supp, data = ToothGrowth)
pero quiero usar un nivel de base diferente para el factor. I podría especificar esto directamente en la fórmula:
lm(len ~ dose + relevel(supp, "VC"), data = ToothGrowth)
y la salida sería:
Call:
lm(formula = len ~ dose + relevel(supp, "VC"), data = ToothGrowth)
Coefficients:
(Intercept) dose relevel(supp, "VC")OJ
5.573 9.764 3.700
Es muy conveniente de hacer transformaciones directamente en la fórmula, y no hacer conjuntos de datos intermedia o alterar el uno existente. Un ejemplo es cuando usa scale
para estandarizar variables donde es esencial tener en cuenta las pérdidas en otras variables incluidas en el modelo final. A menudo, sin embargo, los nombres de los coeficientes resultantes en la salida se vuelven bastante feos.
Mi pregunta es: ¿es posible especificar el nombre de una variable que resulta de una expresión cuando se trabaja con la fórmula? Algo así como
lm(len ~ dose + (OJ = relevel(supp, "VC")), data = Toothgrowth)
(que no funciona).
EDITAR: Si bien la solución propuesta por G. Grothendieck es buena, en realidad produce un resultado incorrecto. El siguiente ejemplo muestra esto:
# 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)))
La cuestión es que cuando degradante x2, utiliza observaciones que no están en el modelo final porque x1 tiene missings.
Me queda la pregunta de si la interfaz de fórmula puede manejar este caso sin tener el molesto paso intermedio de usar una fórmula extra y extraer un modelo de marco, que luego puede "transformarse".
Espero que la pregunta sea clara.
Niza, muchas gracias! – Stefan
Si te gusta y soluciona tu problema, debes hacer clic para aceptarlo ... –
Hola, GG, aunque tu respuesta es buena y funciona en muchos casos, todavía puede dar resultados no deseados. Hice un ejemplo en una edición de la pregunta. – Stefan