2014-04-14 48 views
0

在下面的代碼中,模型1 & 2工作得很好,併產生相同的結果。模型4也可以正常工作。具有ols相互作用的公式

require(rms) 

    mtcars$ind <- I(mtcars$gear==4) 

    dd <- datadist(mtcars) 
    options(datadist = "dd") 

    ols(as.formula(mpg ~ wt + cyl + gear + cyl:gear), data=mtcars) #1 
    ols(as.formula(mpg ~ wt + cyl + gear + cyl * gear), data=mtcars) #2 

    ols(as.formula(mpg ~ wt + cyl + gear + cyl:ind), data=mtcars)  #3 
    ols(as.formula(mpg ~ wt + cyl + gear + cyl * ind), data=mtcars) #4 

模型3提供了以下錯誤

Error in if (!length(fname) || !any(fname == zname)) { : 
     missing value where TRUE/FALSE needed 

回溯的)對OLS和RMS輸出()是

2: Design(eval.parent(m)) 
    1: ols(as.formula(mpg ~ wt + cyl + gear + cyl:ind), data = mtcars) 

我試圖設置調試(:::設計沒有得到很遠!我在使用rms :: lrm()時遇到了這個問題,並意識到它也發生在ols上。

爲什麼#4工作而#3不工作?他們在公式中使用相同的術語,其中一個使用:,另一個使用*。謝謝。

+1

爲什麼你將公式包裝在'as.formula'中?這不應該是必要的。此外,您應該提供[可重現的示例](http://stackoverflow.com/a/5963610/1412059)以使問題更容易回答。但是,您的第三個模型包含'cyl:ind'的交互,但不包含'ind'作爲主要效果。只有在非常特殊的情況下,類似這樣的想法纔是好主意,但並不總。很可能(這是猜測)是'ols'假定交互中的效果總是作爲主要效果出現。 – Roland

+0

Thanks @roland。雖然我沒有在這裏生成實例的代碼,但是mtcars是[datasets]的一部分(https://stat.ethz.ch/R-manual/R-devel/library/datasets/html/mtcars.html)。因此,上面的代碼可以按原樣運行。 – ironv

回答

0

Thanks @roland。當你運行#4時,它似乎添加了其他主要效果。以下產生與#4完全相同的輸出:

ols(mpg ~ wt + cyl + gear + ind + cyl:ind, data=mtcars) #3b 
    ols(mpg ~ wt  + gear  + cyl * ind, data=mtcars) #4b