Pergunta sobre r, linear-regression – Regressão linear com interação falha no pacote rms

1

Estou brincando com interação na fórmula. Gostaria de saber se é possível fazer uma regressão com interação para uma das duas variáveis ​​fictícias. Isso parece funcionar na regressão linear regular usando a função lm (), mas com a função ols () no pacote rms a mesma fórmula falha. Alguém sabe por quê?

Aqui está meu exemplo

<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>

E agora o exemplo 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>

Esse experimento pode não ser a estatística mais sábia a ser feita, pois parece que as estimativas mudam significativamente, mas estou um pouco curioso para saber por que o ols () falha, já que ele deveria fazer as "mesmas rotinas de ajuste usadas pelo lm"

Sua resposta

1   a resposta
2

mas tem a ver com a maneira como a fórmula é avaliada, e não com a maneira como o ajuste é feito depois que o modelo é traduzido. Usandotraceback() mostra que o problema ocorre dentroDesign(eval.parent(m)); usandooptions(error=recover) leva você ao ponto em que você pode ver isso

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

em outras palavras,zname é alguma variável interna que não foi definida direita porque oDesign A função não consegue lidar com a definição da interação entre os cilindros e o manequim (engrenagem == 4) na mosca.

Isso funciona embora:

<code>mtcars$cylgr <- with(mtcars,interaction(cyl,gear == "4"))
regular_ols <- ols(mpg ~ wt + cyl + gear + cylgr, data=mtcars)
</code>
Obrigado. Pensei em criar a variável de interação, mas estou com um pouco de medo de interagir com as funções Predict / contrast Max Gordon

Perguntas relacionadas