2017-01-30 5 views
1

私が理解しているように、名目予測子を使ってRに線形モデルを当てはめると、Rは基本的に各レベル(参照レベルを除く)にダミー1/0変数を使用し、これらの変数ごとに正規の古い係数を与えます。 の序文の予測子は何をしますか?これは、各レベルの推定係数を私に与えているので、ランクを数値予測子として扱うだけではありません。このような出力を正しく解釈するにはどうすればよいですか?Rはどのようにlm()の序数予測子を扱うのですか?

cars.data <- mtcars[,1:3] 
cars.data$cyl.ord <- ordered(cars.data$cyl) 
lm(mpg ~ disp + cyl.ord, data = cars.data) 
Call: 
lm(formula = mpg ~ disp + cyl.ord) 

Coefficients: 
(Intercept)   disp cyl.ord.L cyl.ord.Q 
    26.34212  -0.02731  -3.38852  1.95127 

、私はもともとそれが順序付けられていないカテゴリだった場合、私は順序変数から、私はと同じように係数を使用することができることを想定し、しかし26.34212378 -0.02730864*150 -3.38851642だけ18.85731を与えながらpredict.lm(ord.model, newdata = data.frame("disp" = 150, "cyl.ord" = "6"))は、20.65263を与えますそうすることはできません。私がorder()またはlm()のオンラインマニュアルで何も見つけられませんでした。または、私はまたはlm()のドキュメントで何も見つけることができませんでした。私の本のどれかで。

Rは序数予測を数学的にどのように扱うのですか、出力をどのように扱うべきですか?

答えて

2

序因子変数に因子変数を変換すると、CONTR」とlmの出力を考える「contr.poly」今

# make cyl a factor 
cars.data$cyl <- factor(cars.data$cyl) 

する「contr.treatment」からデフォルトのコントラストを変更することが表示されます。治療」および 『contr.polyデフォルトのコントラストとしてcontr.polyを『』注文要因ソル

lm(mpg ~ disp + cyl.ord, data=cars.data) 

Call: 
lm(formula = mpg ~ disp + cyl.ord, data = cars.data) 

Coefficients: 
(Intercept)   disp cyl.ord.L cyl.ord.Q 
    26.34212  -0.02731  -3.38852  1.95127 

lm(mpg ~ disp + cyl, data=cars.data, 
    contrasts=list(cyl="contr.poly")) 

Call: 
lm(formula = mpg ~ disp + cyl, data = cars.data, 
    contrasts=list(cyl = "contr.poly")) 

Coefficients: 
(Intercept)   disp  cyl.L  cyl.Q 
    26.34212  -0.02731  -3.38852  1.95127 

は使用しています』と、私たちは順不同要因から同じ結果を得ることができます。さて、順序付けられていない要素を考えてみましょう。

lm(mpg ~ disp + cyl, data=cars.data) 

Call: 
lm(formula = mpg ~ disp + cyl, data = cars.data) 

Coefficients: 
(Intercept)   disp   cyl6   cyl8 
    29.53477  -0.02731  -4.78585  -4.79209 

lm(mpg ~ disp + cyl.ord, data=cars.data, contrasts=list(cyl.ord="contr.treatment")) 

Call: 
lm(formula = mpg ~ disp + cyl.ord, data = cars.data, 
    contrasts=list(cyl.ord="contr.treatment")) 

Coefficients: 
(Intercept)   disp  cyl.ord6  cyl.ord8 
    29.53477  -0.02731  -4.78585  -4.79209 

ので、順不同因子変数は、デフォルトでは「contr.treatment」を使用し、我々は、明示的にそれを頼むことによって命じ要因から同じ結果を得ることができます。

しかし、回帰で使用されるモデル行列を詳しく見ていきましょう。

# Show model matrix 
model.matrix(mpg ~ disp + cyl, data=cars.data) 
        (Intercept) disp cyl6 cyl8 
Mazda RX4      1 160.0 1 0 
Mazda RX4 Wag     1 160.0 1 0 
Datsun 710     1 108.0 0 0 
... 
attr(,"assign") 
[1] 0 1 2 2 
attr(,"contrasts") 
attr(,"contrasts")$cyl 
[1] "contr.treatment" 

は、コントラスト

model.matrix(mpg ~ disp + cyl, data=cars.data, contrasts.arg=list(cyl="contr.poly")) 
        (Intercept) disp   cyl.L  cyl.Q 
Mazda RX4      1 160.0 -9.073800e-17 -0.8164966 
Mazda RX4 Wag     1 160.0 -9.073800e-17 -0.8164966 
Datsun 710     1 108.0 -7.071068e-01 0.4082483 
... 
attr(,"assign") 
[1] 0 1 2 2 
attr(,"contrasts") 
attr(,"contrasts")$cyl 
[1] "contr.poly" 

として次の "contr.poly" を使用し、CYL

model.matrix(mpg ~ disp + cyl.ord, data=cars.data) 
        (Intercept) disp  cyl.ord.L cyl.ord.Q 
Mazda RX4      1 160.0 -9.073800e-17 -0.8164966 
Mazda RX4 Wag     1 160.0 -9.073800e-17 -0.8164966 
Datsun 710     1 108.0 -7.071068e-01 0.4082483 
... 
attr(,"assign") 
[1] 0 1 2 2 
attr(,"contrasts") 
attr(,"contrasts")$cyl.ord 
[1] "contr.poly" 

の代わりにcyl.ordをチェックアウト最後の二つの行列は、同じエントリを持っています最初の不一致を説明するために "contr.poly"を使用しています。コントラストの詳細については、?contrastsをご覧ください。

+1

私はコントラストを理解していないことを発見しましたが、これは別の質問です(おそらくCVに適しています)。ありがとうございました! – MissMonicaE

関連する問題