カテゴリー変数を使用した線形回帰モデルの係数の解釈


8

R呼び出しの例を示します。最初に、従属変数「寿命」と2つの連続説明変数を使用した線形回帰の簡単な例を示します。

data.frame(height=runif(4000,160,200))->human.life
human.life$weight=runif(4000,50,120)
human.life$lifespan=sample(45:90,4000,replace=TRUE)
summary(lm(lifespan~1+height+weight,data=human.life))

Call:
lm(formula = lifespan ~ 1 + height + weight, data = human.life)

Residuals:
Min       1Q   Median       3Q      Max 
-23.0257 -11.9124  -0.0565  11.3755  23.8591 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 63.635709   3.486426  18.252   <2e-16 ***
height       0.007485   0.018665   0.401   0.6884    
weight       0.024544   0.010428   2.354   0.0186 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

Residual standard error: 13.41 on 3997 degrees of freedom
Multiple R-squared: 0.001425,   Adjusted R-squared: 0.0009257 
F-statistic: 2.853 on 2 and 3997 DF,  p-value: 0.05781

「weight」の値が1の場合の「lifespan」の推定値を見つけるために、(Intercept)+ height = 63.64319を追加します

次に、同様のデータフレームがあるが、説明変数の1つがカテゴリカルである場合はどうなりますか?

data.frame(animal=rep(c("dog","fox","pig","wolf"),1000))->animal.life
animal.life$weight=runif(4000,8,50)
animal.life$lifespan=sample(1:10,replace=TRUE)
summary(lm(lifespan~1+animal+weight,data=animal.life))

Call:
lm(formula = lifespan ~ 1 + animal + weight, data = animal.life)

Residuals:
Min      1Q  Median      3Q     Max 
-4.7677 -2.7796 -0.1025  3.1972  4.3691 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 5.565556   0.145851  38.159  < 2e-16 ***
animalfox   0.806634   0.131198   6.148  8.6e-10 ***
animalpig   0.010635   0.131259   0.081   0.9354    
animalwolf  0.806650   0.131198   6.148  8.6e-10 ***
weight      0.007946   0.003815   2.083   0.0373 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

Residual standard error: 2.933 on 3995 degrees of freedom
Multiple R-squared: 0.01933,    Adjusted R-squared: 0.01835 
F-statistic: 19.69 on 4 and 3995 DF,  p-value: 4.625e-16

この場合、「weight」の値が1のときに「lifespan」の推定値を見つけるには、「animal」の各係数を切片に追加する必要があります:(Intercept)+ animalfox + animalpig + animalwolf?またはこれを行う適切な方法は何ですか?

ありがとうSverre


ドル記号を使用すると、方程式環境に入ることができ、ランダムに斜体になっています。
2011

フォーマット:取得するにはcode、4つのスペースでインデントします。
wolf.rauch

4つのスペースインデントを使用する場合は、そこに星とドル記号を入れることができ、それらはそのように表示されます。コードの書式設定以外で使用すると、マークアップのように扱われます。あなたは完全たくない場合code:行、使用バッククォートthis is code with a $ and *
wolf.rauch

1
再現可能な例を使用したのは良いことです。set.seed(1)乱数生成を実行する前にインクルードする(または任意の数)ことで例をさらに良くし、すべての人があなたとまったく同じ結果を得るようにすることができます(ただし、この場合はそれほど重要ではありません)。
wolf.rauch

ほんの2つの小さなコメント。あなたは「「ウェイト」の値が1であるときの「ライフスパン」の推定値を見つけるために、(切片)+高さ= 63.64319を追加しました。これは、重量= 1 、高さ= 0の場合の推定平均寿命です。それはおそらくあまり意味がありません。また、独立変数の観測値の範囲外の予測は慎重に扱う必要があります(重みは50から120の間なので、重み= 1もあまり意味がありません)。ほんの一部のサイドノートとおそらくあなたがすでに知っていたもの。しかし
Wolfgang

回答:


12

いいえ、すべての係数を一緒に追加するべきではありません。あなたは本質的にモデルを持っています

lifespan=β0+β1fox+β2pig+β3wolf+β4weight+ε

たとえば、 pig=1動物が豚の場合は0、それ以外の場合は0。だから、計算にあなたはとき全体の平均を取得するために提案してきたようにβ0+β1+β2+β3+β4weight=1は、「ブタ、オオカミ、キツネで、体重が1の場合、期待される寿命はどれくらいですか?」明らかに、各動物はそれらの1つにすぎないため、あまり意味がありません。

動物ごとに個別にこれを行う必要があります。例えば、β0+β2+β4 は、ブタの体重が1の場合の予想寿命です。


マクロ:わかりました。では、「動物」のレベルの平均係数を見つけることは理にかなっていますか?つまり、(Intercept)+(animalfox + animalpig + animalwolf)/ 3を実行します。それとも、データセット内の各動物の観測数が等しい場合にのみ有効ですか?
Sverre

私はあなたが正しいと思います-それは各グループに等しい数がある場合にのみ有効です。1つの数値に要約することを主張する場合は、サンプルで各グループが表現される程度に比例して重み付けできます。
マクロ

それらを重み付けする適切な方法は何でしょうか?私がそれを1つの数値に要約することを「主張する」理由は、散布図上の変数の1つだけに対して回帰直線を描画したいからです。たとえば、上記のhuman.lifeの例では、ラインの切片((Intercept)+ height = 63.64319)とその係数(0.024544)を指定して、「weight」の回帰直線を描画します。これは、animal.lifeの場合は少しトリッキーです。
Sverre

それについてもっと考えてみると、どんな平均がどのように解釈できるかわかりません。1つのプロットに3つの平行な回帰直線を描くだけでいいのではないでしょうか。また、「体重」の効果は動物ごとに異なるように思われます。その場合は、動物が体重と相互作用する必要があり、その結果、動物ごとに3つの完全に異なる回帰直線が生じます。
マクロ

しかし、「動物」の変数と「体重」の変数の両方が有意であるが、それらの相互作用が重要でない場合、相互作用をモデルに含めません。重回帰は、「動物」の値とは無関係に「体重」の影響を推定します。
Sverre

4

最も簡単なことは、lmオブジェクトで予測関数を使用することです。次に、因子を正しい値に変換して加算するなど、詳細の多くを処理します。あなたが予測に入る部分を理解しようとしているなら、それから設定してくださいtype='terms'、そしてそれは一緒に追加するあなたの予測をする個々の部分を示します。

因子が変数に変換される方法はいくつかのオプションに依存することにも注意してください。デフォルトでは、他のグループと比較するベースライングループを選択しますが、平均とその平均との差(または他の関心のある比較)に設定することもできます。 。


predict.lm()の使用はlmオブジェクトの優れたソリューションです。残念ながら、実際にはlmerオブジェクトを自分のデータに適合させています。個々の用語を抽出するpredict()関数は存在しません。提案している別の方法では、切片をベースラインではなく平均値に設定することを正しく理解しましたか(すべての連続予測子が0に設定され、カテゴリカル予測子の1つの値が選択されます)?もしそうなら、私はそれを行う方法を知りたいのですが。次に、モデルの切片+予測子の係数として、回帰直線を描画します。
Sverre

?contrasts、?C、?contr.sum、および?optionsのコントラスト部分を確認してください。
グレッグスノー

2

重量が1のときの平均寿命が必要な場合は、この呼び出しで単に「動物」を取り出すことができます。

lm(formula = lifespan ~ 1 + animal + weight, data = animal.life)

これがどのように正しいのか理解できません。予測子(「動物」)の1つを取り出すと、切片、「重み」の係数、および誤差の推定値はすべて変化します。また、データで重み1の実際の平均寿命が何であるかを調べるのではなく、モデルで予測されるとおりです。
Sverre
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.