3

R の効果パッケージを使用して、切片を含まない線形モデルの (限界) 効果をプロットできますか?

このようなモデルで試した 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

このエラーを克服する方法について誰かがアイデアを持っている場合は、私に知らせてください。

ありがとう、

イザベラ

4

1 に答える 1

3

コードにバグがあるようです。特に、ディスパッチでは、allEffectsコードはeffectwhich を呼び出します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)]

この問題は、非 NA 係数が 1 つしかない場合に発生します (リグレッサーが 1 つあり切片がない場合と同様)。問題は、単一の列でこのサブセットを実行すると、結果が自動的に行列ではなくベクトルにキャストされないことです。この問題を修正する関数の独自のバージョンを作成できます

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 ディスパッチがどのように機能するかを変更する方法を思い出せません。effects実際に名前空間にある関数を修正する簡単な方法はないようです。

したがって、一般に、複数のリグレッサーがある限り、関数はインターセプトなしで機能するはずです。パッケージの作成者に連絡して、この問題を報告することをお勧めします。

于 2014-09-13T06:54:16.580 に答える