0

0 と 1 ではなく、値 1 と 2 が必要な場合など、カスタムの値付きダミーが必要な場合、数式インターフェイスをどのように使用すればよいでしょうか。推定は次のようになりsuppます。

fit <- lm(len ~ dose + supp, data = ToothGrowth)

この例では、さまざまな値があまり使用されていませんが、「書き直された」モデルの多くの場合に役立ちます。

EDIT:実際には、たとえば3つのレベルがあり、2つの列を別々にコーディングしたいので、1つは1/0変数で、もう1つは1/2変数です。上記の例には 2 つのレベルしかありません。

4

1 に答える 1

5

使用したいマトリックスを作成し、それをcontrasts引数に設定するかlm、因子自体のデフォルトのコントラストを設定することで、コントラストを好きなように設定できます。

いくつかのサンプルデータ:

set.seed(6)
d <- data.frame(g=gl(3,5,labels=letters[1:3]), x=round(rnorm(15,50,20)))

あなたが念頭に置いているコントラスト:

mycontrasts <- matrix(c(0,0,1,0,1,1), byrow=TRUE, nrow=3)
colnames(mycontrasts) <- c("12","23")
mycontrasts
#     12 23
#[1,]  0  0
#[2,]  1  0
#[3,]  1  1

次に、lm呼び出しでこれを使用します。

> lm(x ~ g, data=d, contrasts=list(g=mycontrasts))

Call:
lm(formula = x ~ g, data = d, contrasts = list(g = mycontrasts))

Coefficients:
(Intercept)          g12          g23  
       58.8        -13.6          5.8  

手段を比較することで、それが正しいことを行うことを確認できます。

> diff(tapply(d$x, d$g, mean))
    b     c 
-13.6   5.8 

デフォルトのコントラストは、最初のレベルをベースラインとして使用することです:

> lm(x ~ g, data=d)

Call:
lm(formula = x ~ g, data = d)

Coefficients:
(Intercept)           gb           gc  
       58.8        -13.6         -7.8  

contrastsただし、これは次のコマンドで変更できます。

> contrasts(d$g) <- mycontrasts
> lm(x ~ g, data=d)

Call:
lm(formula = x ~ g, data = d)

Coefficients:
(Intercept)          g12          g23  
       58.8        -13.6          5.8  
于 2012-03-08T16:18:54.677 に答える