回帰でバイナリ説明変数を使用する場合、R に特定のレベルを参照として使用するように指示するにはどうすればよいですか?
デフォルトでいくつかのレベルを使用しているだけです。
lm(x ~ y + as.factor(b))
とb {0, 1, 2, 3, 4}
。R で使用される 0 の代わりに 3 を使用したいとします。
回帰でバイナリ説明変数を使用する場合、R に特定のレベルを参照として使用するように指示するにはどうすればよいですか?
デフォルトでいくつかのレベルを使用しているだけです。
lm(x ~ y + as.factor(b))
とb {0, 1, 2, 3, 4}
。R で使用される 0 の代わりに 3 を使用したいとします。
関数を参照してくださいrelevel()
。次に例を示します。
set.seed(123)
x <- rnorm(100)
DF <- data.frame(x = x,
y = 4 + (1.5*x) + rnorm(100, sd = 2),
b = gl(5, 20))
head(DF)
str(DF)
m1 <- lm(y ~ x + b, data = DF)
summary(m1)
関数を使用して因数b
を変更します。DF
relevel()
DF <- within(DF, b <- relevel(b, ref = 3))
m2 <- lm(y ~ x + b, data = DF)
summary(m2)
モデルは異なる参照レベルを推定しています。
> coef(m1)
(Intercept) x b2 b3 b4 b5
3.2903239 1.4358520 0.6296896 0.3698343 1.0357633 0.4666219
> coef(m2)
(Intercept) x b1 b2 b4 b5
3.66015826 1.43585196 -0.36983433 0.25985529 0.66592898 0.09678759
relevel
他の人は、データのすべての分析のベース レベルを変更する場合 (またはデータの変更を受け入れる意思がある場合) に最適なソリューションであるコマンドについて言及しています。
データを変更したくない場合 (これは 1 回限りの変更ですが、後でデフォルトの動作を再度使用する必要がある場合)、C
(大文字に注意) 関数を組み合わせて使用して、コントラストを設定し、contr.treatments
関数を使用できます。ベースラインにするレベルを選択するための base 引数。
例えば:
lm( Sepal.Width ~ C(Species,contr.treatment(3, base=2)), data=iris )
このrelevel()
コマンドは、質問の省略形です。それが行うことは、参照レベルが最初になるように因子を並べ替えることです。したがって、因子レベルを並べ替えても同じ効果がありますが、より細かく制御できます。おそらく、レベル 3、4、0、1、2 が必要でした。その場合...
bFactor <- factor(b, levels = c(3,4,0,1,2))
私がこの方法を好むのは、参照が何であったかだけでなく、他の値の位置もコードで確認するのが簡単だからです (その結果を見る必要はありません)。
注: 順序付き要素にしないでください。指定された次数を持つ因子と順序付き因子は同じものではありません。 lm()
それを行うと、多項式の対比が必要だと考えるようになるかもしれません。
列に属性を手動でタグ付けすることもできcontrasts
ます。これは、回帰関数によって尊重されるようです。
contrasts(df$factorcol) <- contr.treatment(levels(df$factorcol),
base=which(levels(df$factorcol) == 'RefLevel'))