如果我想要自定义值虚拟对象,如何使用公式界面,例如如果我想要值1和2,而不是0和1.估计可能如下所示supp
是因子变量。
fit <- lm(len ~ dose + supp, data = ToothGrowth)
在这个例子中,没有太多使用不同的值,但在很多情况下,“重写”模型可能很有用。
编辑:实际上,我有例如3个级别,并希望两列的编码方式不同,因此一个是1/0变量,另一个是1/2变量。上面的例子只有两个级别。
答案 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