回帰でバイナリの説明変数を使用する場合、Rに特定のレベルを参照として使用するように指示するにはどうすればよいですか?
デフォルトでは、あるレベルを使用しているだけです。
lm(x ~ y + as.factor(b))
とb {0, 1, 2, 3, 4}
。Rが使用するゼロの代わりに3を使用したいとします。
回帰でバイナリの説明変数を使用する場合、Rに特定のレベルを参照として使用するように指示するにはどうすればよいですか?
デフォルトでは、あるレベルを使用しているだけです。
lm(x ~ y + as.factor(b))
とb {0, 1, 2, 3, 4}
。Rが使用するゼロの代わりに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
within
、を使用しないでくださいdf$bR = relevel(df$b, ref=3)
。
他の人はrelevel
、データのすべての分析の基本レベルを変更したい場合(またはデータの変更に乗り気な場合)に最適なソリューションであるコマンドについて言及しました。
データを変更したくない場合(これは1回限りの変更ですが、将来的にはデフォルトの動作に戻す必要がありC
ます)、(大文字に注意)関数の組み合わせを使用して、コントラストとcontr.treatments
持つ関数ベースラインにしたいレベルを選択するための基本引数。
例えば:
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()
そうした場合、多項式の対比が必要だと考えるようになります。
これは古い質問であることは承知していますが、同様の問題があり、次のことがわかりました。
lm(x ~ y + relevel(b, ref = "3"))
あなたが尋ねたことを正確に行います。
as.factor()
、必要に応じて使用することにより、例えば、...+relevel(as.factor(mycol), ref = "myref")+...
dplyr / tidyverseバージョンをお探しの方。Gavin Simpsonソリューションの構築:
# Create DF
set.seed(123)
x <- rnorm(100)
DF <- data.frame(x = x,
y = 4 + (1.5*x) + rnorm(100, sd = 2),
b = gl(5, 20))
# Change reference level
DF = DF %>% mutate(b = relevel(b, 3))
m2 <- lm(y ~ x + b, data = DF)
summary(m2)
relevel()
、これは必要ですforcats::fct_relevel()
relevel
ファクターでのみ機能します。fct_relevel
ファクターでのみ機能します。AFAIKという名前以外は機能に違いはありません。「変数が因子である場合も使用できるfct_relevel
」と言うことは、変数が因子ではない場合に使用できることを意味しますがrelevel
、そうではありません。
b
を使用してレベルの順序を指定できますfactor(b, levels = c(3,1,2,4,5))
。lm()
ただし、呼び出しの外のデータ処理ステップでこれを行います。以下の私の答えはrelevel()
関数を使用しているので、因子を作成してから、必要に応じて基準レベルをシフトすることができます。