Pytanie w sprawie linear-regression, r – Regresja liniowa z interakcją kończy się niepowodzeniem w pakiecie rms

1

Bawię się interakcją w formule. Zastanawiałem się, czy możliwe jest wykonanie regresji z interakcją dla jednej z dwóch zmiennych obojętnych. Wydaje się, że działa to w regularnej regresji liniowej za pomocą funkcji lm (), ale z funkcją ols () w pakiecie RMS ta sama formuła nie działa. Ktoś wie dlaczego?

Oto mój przykład

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

A teraz przykład 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>

Ten eksperyment może nie być najmądrzejszą statystyką, ponieważ wydaje się, że szacunki ulegają znacznym zmianom, ale jestem trochę ciekawy, dlaczego ols () zawodzi, ponieważ powinien wykonywać „te same procedury dopasowania używane przez lm”

Twoja odpowiedź

1   odpowiedź
2

ale ma to związek ze sposobem oceniania formuły, a nie ze sposobem, w jaki dopasowanie jest wykonywane po przetłumaczeniu modelu. Za pomocątraceback() pokazuje, że problem występuje wewnątrzDesign(eval.parent(m)); za pomocąoptions(error=recover) doprowadza cię do punktu, w którym możesz to zobaczyć

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

innymi słowy,zname jest jakąś wewnętrzną zmienną, która nie została ustawiona poprawnie, ponieważDesign funkcja nie do końca radzi sobie z definiowaniem interakcji między cylindrami a manekinem (bieg == 4) w locie.

Działa to jednak:

<code>mtcars$cylgr <- with(mtcars,interaction(cyl,gear == "4"))
regular_ols <- ols(mpg ~ wt + cyl + gear + cylgr, data=mtcars)
</code>
Dzięki. Myślałem o stworzeniu zmiennej interakcji, ale trochę się boję, że będzie ona oddziaływać z funkcjami przewidywania / kontrastu Max Gordon

Powiązane pytania