5

R(contr.treatment)のデフォルトの対比では、線形モデルオブジェクトの要約は、レベル名に従って行名を示します。コントラストをcontr.sumに変更すると、線形モデルオブジェクトの要約は、構成された数値に従って行名を示します。

以下のサンプルコードの場合、処理コントラストの行名はxa xb xc xd xeであり、合計コントラストの場合はx1 x2 x3x4x5です。

行の名前を手動で変更する以外に、これらを同じように動作させる方法はありますか?

例:

y <- rnorm(10, 0, 1)
x <- factor(rep(letters[1:5], each = 2))

options(contrasts = c("contr.treatment", "contr.poly"))
summary(lm(y ~ x))

options(contrasts = c("contr.sum", "contr.poly"))
summary(lm(y ~ x))
4

2 に答える 2

2

私はあなたのソリューション@Aaronが好きで、それを実装しましたが、危険なエラーが含まれていると思います。合計の対比は、命名アルゴリズムが返すものである最後のn-1因子ではなく、最初のn-1因子と総平均の差を示します。CrawleyのRBook2ndEditionページ442-443を参照してください。

したがって、正しい関数は代わりに次のようになります。

contr.sum.keepnames <- function(...) {
    conS <- contr.sum(...)
    colnames(conS) = rownames(conS)[-length(rownames(conS))]
    conS
}

ところで、これをコメントとして追加しようとしましたが、コメント内にコードブロックを追加するのに苦労しました。

于 2016-02-16T13:07:22.683 に答える
1

これが良いアイデアかどうかはまだわかりません。コントラストの意味について混乱する可能性が高すぎると思います。それでも、私がすることは、合計コントラストを計算するが、名前を治療コントラストからのデフォルト名と等しく設定する新しいコントラスト関数を作成することです。

set.seed(5)
n <- 5
y <- c(10 + rnorm(n, 0, 1), 20 + rnorm(n, 0, 1), 30 + rnorm(n, 0, 1))
wFactor <- as.factor(c(rep("A", n), rep("B", n), rep("C", n)))

contr.sumX <- function(...) {
  conT <- contr.treatment(...)
  conS <- contr.sum(...)
  colnames(conS) <- colnames(conT)
  conS
}

参考までに、通常の出力は次のとおりです。

> m1 <- lm(y ~ wFactor, contrasts = list(wFactor=contr.sum(n = levels(wFactor))))
> coef(summary(m1))
              Estimate Std. Error     t value     Pr(>|t|)
(Intercept) 19.8218432  0.2481727  79.8711599 9.889455e-18
wFactor1    -9.6079241  0.3509692 -27.3754029 3.480430e-12
wFactor2    -0.1934654  0.3509692  -0.5512319 5.915907e-01

そして、これがcontr.sumX関数の出力です。

> m2 <- lm(y ~ wFactor, contrasts = list(wFactor=contr.sumX(n = levels(wFactor))))
> coef(summary(m2))
              Estimate Std. Error     t value     Pr(>|t|)
(Intercept) 19.8218432  0.2481727  79.8711599 9.889455e-18
wFactorB    -9.6079241  0.3509692 -27.3754029 3.480430e-12
wFactorC    -0.1934654  0.3509692  -0.5512319 5.915907e-01

または、特定の要素のコントラストを事前に設定することもできます。

contrasts(wFactor) <- "contr.sumX"
m3 <- lm(y ~ wFactor)
> coef(summary(m3))
              Estimate Std. Error     t value     Pr(>|t|)
(Intercept) 19.8218432  0.2481727  79.8711599 9.889455e-18
wFactorB    -9.6079241  0.3509692 -27.3754029 3.480430e-12
wFactorC    -0.1934654  0.3509692  -0.5512319 5.915907e-01
于 2012-06-01T16:27:07.813 に答える