2014-09-12 36 views
3

R中的效果包可以用於繪製不包含截距的線性模型的邊際效果嗎?R中的效果包可以用於沒有攔截的lm模型嗎?

下面是一些R代碼裏面我嘗試了這樣的模式:

x <- seq(1,100,by=0.1) 
y <- 1 + 2*x + rnorm(n=length(x)) 

model <- lm(y ~ 0 + x) 

require(effects) 
plot(allEffects(model)) 

它產生的誤差如下:

Error in plot(allEffects(model)) : 
error in evaluating the argument 'x' in selecting a method for function 'plot': 
Error in mod.matrix %*% mod$coefficients[!is.na(mod$coefficients)] : 
non-conformable arguments 

如果任何人有如何克服這種錯誤的任何想法,請告訴我。

感謝,

伊莎貝拉

回答

3

有一定確實出現在代碼中的錯誤。特別是在調度時,allEffects代碼調用effect,它調用Effect.lm。這種特殊的與

Effect.lm("x", mod=model) 
# Error in mod.matrix %*% mod$coefficients[!is.na(mod$coefficients)] : 
# non-conformable arguments 

誤差看起來是來自該函數的身體的線30也重新

body(effects:::Effect.lm)[[30]] 
# mod.matrix <- mod.matrix[, !is.na(mod$coefficients)] 

當你只有1個非NA係數(就像使用時發生該問題一個迴歸者和沒有攔截)。問題是當你在單個列上做這個子集時,結果自動不會被轉換爲向量而不是矩陣。我們可以創造我們自己修復此問題

my.Effect.lm<-effects:::Effect.lm 
body(my.Effect.lm)[[30]] <- quote(mod.matrix <- mod.matrix[, !is.na(mod$coefficients), drop=FALSE]) 
environment(my.Effect.lm) <- asNamespace("effects") 

然後

model <- lm(y ~ 0 + x) 
plot(my.Effect.lm("x", model)) 

應該工作的功能的版本。我必須承認我還沒有想出如何讓allEffects工作。我不記得如何改變S3 dispatch在不同命名空間中解析函數時的工作方式。似乎沒有任何簡單的方法來修復實際位於effects命名空間中的函數。

所以一般來說,只要你有一個以上的迴歸器,這個函數就可以在沒有截取的情況下工作。您可能需要聯繫軟件包作者報告此問題。

相關問題