Вопрос по r – Линейная регрессия с взаимодействием терпит неудачу в rms-пакете

1

Я играю с взаимодействием в формуле. Я задавался вопросом, возможно ли сделать регрессию с взаимодействием для одной из двух фиктивных переменных. Кажется, что это работает в регулярной линейной регрессии с использованием функции lm (), но с функцией ols () в пакете rms та же формула не выполняется. Кто-нибудь знает почему?

Here's my example

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

А теперь пример 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>

Этот эксперимент может быть не самой разумной статистикой, поскольку кажется, что оценки существенно меняются, но мне немного любопытно, почему ols () терпит неудачу, поскольку он должен выполнять «те же процедуры подгонки, которые используются lm».

Ваш Ответ

1   ответ
2

но это связано с тем, как формула оценивается, а не с тем, как выполняется подбор после перевода модели. С помощьюtraceback() показывает, что проблема возникает в пределахDesign(eval.parent(m)); с помощьюoptions(error=recover) приводит вас к тому, что вы можете увидеть это

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

другими словами,zname - это некоторая внутренняя переменная, которая не была установлена правильно, потому чтоDesignункция @ не может справиться с определением взаимодействия между цилиндрами и пустышкой (gear == 4).

Это работает, хотя:

mtcars$cylgr <- with(mtcars,interaction(cyl,gear == "4"))
regular_ols <- ols(mpg ~ wt + cyl + gear + cylgr, data=mtcars)

Похожие вопросы