2012-05-12 29 views
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 
換句話說

zname是尚未設置正確,因爲Design功能不能很好地處理定義缸之間的相互作用一些內部變量(齒輪= 4)假人。

這工作雖然:

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

感謝。我曾想過創建交互變量,但我有點害怕它會與Predict/contrast函數進行交互 –