lmで相互作用用語を書く別の方法は?


42

回帰モデルで相互作用を指定する最良の方法はどれかという質問があります。次のデータを考慮してください。

d <- structure(list(r = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
     1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("r1","r2"),
     class = "factor"), s = structure(c(1L, 1L, 1L, 1L, 1L, 
     2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L), 
    .Label = c("s1","s2"), class = "factor"), rs = structure(c(1L, 1L,
     1L,1L, 1L,2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L),
    .Label = c("r1s1","r1s2", "r2s1", "r2s2"), class = "factor"), 
     y = c(19.3788027518437, 23.832287726332, 26.2533235300492,
     15.962906892112, 24.2873740664331, 28.5181676764727, 25.2757801195961,
     25.3601044326474, 25.3066440027202, 24.3298865128677, 32.5684219007394,
     31.0048406654209, 31.671238316086, 34.1933764518288, 36.8784821769123,
     41.6691435168277, 40.4669714825801, 39.2664137501106, 39.4884849591932,
     49.247505535468)), .Names = c("r","s", "rs", "y"), 
     row.names = c(NA, -20L), class = "data.frame")

相互作用を持つモデルを指定する2つの同等の方法は次のとおりです。

lm0 <- lm(y ~ r*s, data=d)
lm1 <- lm(y ~ r + s + r:s, data=d)

私の質問は、同じレベルの相互作用を持つ新しい変数(rs)を考慮した相互作用を指定できるかどうかです。

lm2 <- lm(y ~ r + s + rs, data=d)

このアプローチにはどのような利点/欠点がありますか?そして、なぜこれら2つのアプローチの結果が異なるのですか?

summary(lm1)

lm(formula = y ~ r + s + r:s, data = d, x = TRUE)
            coef.est coef.se
(Intercept) 21.94     1.46  
rr2         11.32     2.07  
ss2          3.82     2.07  
rr2:ss2      4.95     2.92  
---
n = 20, k = 4
residual sd = 3.27, R-Squared = 0.87


summary(lm2)

lm(formula = y ~ r + s + rs, data = d, x = TRUE)
            coef.est coef.se
(Intercept) 21.94     1.46  
rr2         11.32     2.07  
ss2          8.76     2.07   # ss2 coef is different from lm1
rsr1s2      -4.95     2.92  
---
n = 20, k = 4
residual sd = 3.27, R-Squared = 0.87

あなたはそれrsがとして定義されていることを意味しinteraction(r, s)ますか?
chl

おそらく、rsr1s2を作成したコードを見せていただけますか?
jbowman

rs係数は手動で定義されました(単にrとsの係数を貼り付けます)。データセットをご覧ください。
マヌエルラモン

1
私は、変数に道を関連していると思います参照しrelationatedているattr(terms(lm1),"factors")attr(terms(lm2),"factors")
Galled

回答:


8

lmが相互作用を使用してモデルを設定する方法は、自分で設定した場合の設定方法とは異なるため、結果は異なります。残差sdを見ると同じです。これは、基礎となるモデルが同じであることを(決定的にではなく)示しており、異なる方法で(lm内部に)表現されています。

パラメータのpaste(d$s, d$r)代わりに相互作用を定義するとpaste(d$r, d$s)、興味深い方法で推定値が再び変化します。

lm1のモデルサマリーでss2の係数推定値がlm2のサマリーよりも4.94低く、rr2:ss2の係数が4.95であることに注意してください(小数点以下3桁に印刷すると、差はなくなります)。これは、用語の内部再配置が行われたことを示す別の指標です。

自分でそれを行う利点は考えられませんが、完全な相互作用の用語ではなく、2つ以上の因子間の「クロス」の用語の一部のみが必要な、より複雑なモデルのモデルがあるかもしれません。


lm2のように相互作用を定義することの唯一の利点は、相互作用項の多重比較を簡単に実行できることです。私がよく理解していないのは、原則として2つのアプローチが同じであると思われる場合に異なる結果が得られる理由です。
マヌエルラモン

5
x1,x2(1,x1,x2,x1x2)(x1,x2,x1x2,(1x1)(1x2)

したがって、どちらのアプローチも異なりますが、どちらのアプローチも正しいでしょう。
マヌエルラモン

右。数学的には、さまざまな定式化の独立変数の行列は、互いの線形変換であるため、2つのモデルが実際にどのように設定されているかを知っていれば、1つのモデルのパラメーター推定値を別のモデルのパラメーター推定値から計算できます。
jbowman

9

モデル行列を見ると、この動作をよりよく理解できます。

 model.matrix(lm1 <- lm(y ~ r*s, data=d))
 model.matrix(lm2 <- lm(y ~ r + s + rs, data=d))

これらの行列を見ると、のコンスタレーションをs2=1他の変数と比較できます(つまり、いつs2=1、他の変数はどの値を取りますか?)。これらの星座はわずかに異なることがわかります。これは、基本カテゴリが異なることを意味します。他のすべては本質的に同じです。あなたの中にいること。特に、ノートlm1、上の係数はss2、係数と等しいss2+rsr1s2lm2丸め誤差の短い、= 8.76から4.95すなわち3.82を、。

たとえば、次のコードを実行すると、Rの自動設定を使用した場合とまったく同じ出力が得られます。

  d$rs <- relevel(d$rs, "r1s1")
  summary(lm1 <- lm(y~ factor(r) + factor(s) + factor(rs), data=d))

また、これはあなたの質問への迅速な回答を提供します。因子の設定方法を変更する本当に唯一の理由は、説明を明確にすることです。次の例を考えてみましょう。あなたが少数派に属しているかどうかを示す要因と相互作用する高校卒業のダミーの賃金を回帰するとします。

wage=α+β edu+γ eduminority+ϵ

ββ+γ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.