如果我需要自定義值的假人,如何使用公式界面如果我需要值1和2,而不是0和1,估計可能如下所示,其中supp
是因子變量。R和公式中的因子編碼
fit <- lm(len ~ dose + supp, data = ToothGrowth)
在這個例子中,沒有太多使用不同的值,但在「重寫」的模式很多情況下,它可能是有用的。
編輯:其實,我有3級,並希望兩列編碼不同,所以一個是1/0變量,另一個是1/2變量。上面的例子只有兩個層次。
如果我需要自定義值的假人,如何使用公式界面如果我需要值1和2,而不是0和1,估計可能如下所示,其中supp
是因子變量。R和公式中的因子編碼
fit <- lm(len ~ dose + supp, data = ToothGrowth)
在這個例子中,沒有太多使用不同的值,但在「重寫」的模式很多情況下,它可能是有用的。
編輯:其實,我有3級,並希望兩列編碼不同,所以一個是1/0變量,另一個是1/2變量。上面的例子只有兩個層次。
您可以通過創建要使用的矩陣並將其設置爲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
太棒了,我不知道我是怎麼錯過的。不知道你可以只提供一個矩陣的定義;認爲它必須是編碼方案的名稱。謝謝。 – Stefan 2012-03-08 20:31:39
取決於你爲什麼要做到這一點,設置'lm'的'contrasts'參數可能就足夠了。 – 2012-03-08 12:02:24
我認爲非默認的對比方法可以提供我想要的編碼。 – Stefan 2012-03-08 12:34:54
你可以任意命名你的因子水平,例如'levels(supp)< - c(「1」,「2」)'。儘管給他們描述性的名字更好。 – 2012-03-08 13:55:27