2012-05-12 2 views
1

私は数式で相互作用をして遊んでいます。私は2つのダミー変数の1つについて相互作用を伴う回帰を行うことが可能かどうか疑問に思った。これは、lm()関数を使った通常の線形回帰では動作するようですが、rmsパッケージのols()関数では同じ式が失敗します。誰でも知っている理由は?rms-packageで対話を伴う線形回帰が失敗します

は、ここでは推定値が大きく変化が、私はだと思えるように、この実験を行うための賢明な統計ではないかもしれません私の例

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) 

そして今のrms例

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) 

ですなぜols()が "lmによって使用される同じフィッティングルーチン"を実行する必要があるのか​​不思議です。

答えて

2

私はexacを知らないしかし、モデルが翻訳されたらフィットが行われる方法ではなく、式が評価される方法と関係しています。 traceback()を使用すると、問題がDesign(eval.parent(m))に発生することがわかります。 options(error=recover)を使用すると、他の言葉で

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

は、znameDesign機能はかなりシリンダとの間の相互作用を定義し扱うことができない権利ので、設定されていないいくつかの内部変数であることを見ることができるポイントにあなたを取得します(ギア== 4)飛行ダミー。

しかしこれは動作します:

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

感謝を。私はインタラクション変数を作成することを考えましたが、予測/コントラスト関数と相互作用することは少し怖いです –