Frage an r, linear-regression – Die lineare Regression mit der Interaktion schlägt im rms-Paket fehl

1

Ich spiele mit der Interaktion in der Formel. Ich habe mich gefragt, ob es möglich ist, eine Regression mit Interaktion für eine der beiden Dummy-Variablen durchzuführen. Dies scheint in der regulären linearen Regression mit der Funktion lm () zu funktionieren, aber mit der Funktion ols () im rms-Paket schlägt dieselbe Formel fehl. Weiß jemand warum?

Hier ist mein Beispiel

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

Und jetzt das Effektivwert-Beispiel

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

Dieses Experiment ist möglicherweise nicht die klügste Statistik, da sich die Schätzungen anscheinend erheblich ändern. Ich bin jedoch ein wenig gespannt, warum ols () fehlschlägt, da hier dieselben Anpassungsroutinen wie bei lm verwendet werden sollten.

Deine Antwort

1   die antwort
2

Ich weiß nicht genau, aber es hat eher mit der Art und Weise zu tun, wie die Formel ausgewertet wird, als mit der Art und Weise, wie die Anpassung erfolgt, nachdem das Modell übersetzt wurde. Verwendentraceback() zeigt, dass das Problem innerhalb von auftrittDesign(eval.parent(m)); mitoptions(error=recover) bringt Sie an den Punkt, an dem Sie das sehen können

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

mit anderen Worten,zname ist eine interne Variable, die nicht richtig gesetzt wurde, weil dieDesign Die Funktion kann die Interaktion zwischen Zylindern und dem (gear == 4) -Dummy nicht genau definieren.

Dies funktioniert jedoch:

<code>mtcars$cylgr <- with(mtcars,interaction(cyl,gear == "4"))
regular_ols <- ols(mpg ~ wt + cyl + gear + cylgr, data=mtcars)
</code>
Vielen Dank. Ich habe überlegt, die Interaktionsvariable zu erstellen, aber ich habe ein wenig Angst, dass sie mit den Predict / Contrast-Funktionen interagiert Max Gordon

Verwandte Fragen