Pregunta sobre linear-regression, r – La regresión lineal con interacción falla en el paquete rms

1

Estoy jugando con la interacción en la fórmula. Me pregunté si es posible hacer una regresión con interacción para una de las dos variables ficticias. Esto parece funcionar en la regresión lineal regular usando la función lm () pero con la función ols () en el paquete rms, la misma fórmula falla. Alguien sabe por qué?

Aquí está mi ejemplo

<code>data(mtcars)

mtcars$gear <- factor(mtcars$gear)
regular_lm <- lm(mpg ~ wt + cyl + gear + cyl:gear, data=mtcars)
summary(regular_lm)

regular_lm <- lm(mpg ~ wt + cyl + gear + cyl:I(gear == "4"), data=mtcars)
summary(regular_lm)
</code>

Y ahora el ejemplo rms.

<code>library(rms)

dd <- datadist(mtcars)
options(datadist = "dd")

regular_ols <- ols(mpg ~ wt + cyl + gear + cyl:gear, data=mtcars)
regular_ols

# Fails with:
#     Error in if (!length(fname) || !any(fname == zname)) { : 
#         missing value where TRUE/FALSE needed
regular_ols <- ols(mpg ~ wt + cyl + gear + cyl:I(gear == "4"), data=mtcars)
</code>

Es posible que este experimento no sea la estadística más inteligente, ya que parece que las estimaciones cambian significativamente, pero siento cierta curiosidad por saber por qué falla ols (), ya que debería hacer "las mismas rutinas de ajuste que usa lm"

Tu respuesta

1   la respuesta
2

pero tiene que ver con la forma en que se evalúa la fórmula y no con la forma en que se realiza el ajuste una vez que se ha traducido el modelo. Utilizandotraceback() muestra que el problema ocurre dentro deDesign(eval.parent(m)); utilizandooptions(error=recover) te lleva al punto donde puedes ver eso

<code>Browse[1]> fname
[1] "wt"   "cyl"  "gear"
Browse[1]> zname
[1] NA
</code>

en otras palabras,zname es una variable interna que no se ha establecido correctamente porque elDesign La función no puede manejar la definición de la interacción entre los cilindros y el maniquí (engranaje == 4) sobre la marcha.

Esto funciona sin embargo:

<code>mtcars$cylgr <- with(mtcars,interaction(cyl,gear == "4"))
regular_ols <- ols(mpg ~ wt + cyl + gear + cylgr, data=mtcars)
</code>
Gracias. He pensado en crear la variable de interacción, pero tengo un poco de miedo de que interactúe con las funciones Predecir / contraste Max Gordon

Preguntas relacionadas