公式中的R和因子编码

时间:2012-03-08 11:12:16

标签: r formula r-factor

如果我想要自定义值虚拟对象,如何使用公式界面,例如如果我想要值1和2,而不是0和1.估计可能如下所示supp是因子变量。

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

在这个例子中,没有太多使用不同的值,但在很多情况下,“重写”模型可能很有用。

编辑:实际上,我有例如3个级别,并希望两列的编码方式不同,因此一个是1/0变量,另一个是1/2变量。上面的例子只有两个级别。

1 个答案:

答案 0 :(得分:5)

您可以通过创建要使用的矩阵并将其设置为contrasts的{​​{1}}参数或设置因子本身的默认对比度,将对比度设置为您想要的任何对比。 / p>

一些示例数据:

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