如何强制R在回归中使用指定的因子水平作为参考?
如果我在回归中使用二元解释variables,我怎么能告诉R使用一定的水平作为参考?
这只是默认使用一些级别。
lm(x ~ y + as.factor(b))
与b {0, 1, 2, 3, 4}
。 假设我想用3来代替R所使用的零。
看到的是relevel()
函数。 这里是一个例子:
set.seed(123) x <- rnorm(100) DF <- data.frame(x = x, y = 4 + (1.5*x) + rnorm(100, sd = 2), b = gl(5, 20)) head(DF) str(DF) m1 <- lm(y ~ x + b, data = DF) summary(m1)
现在通过使用这个函数来改变DF
的因子b
:
DF <- within(DF, b <- relevel(b, ref = 3)) m2 <- lm(y ~ x + b, data = DF) summary(m2)
模型估计了不同的参考水平。
> coef(m1) (Intercept) x b2 b3 b4 b5 3.2903239 1.4358520 0.6296896 0.3698343 1.0357633 0.4666219 > coef(m2) (Intercept) x b1 b2 b4 b5 3.66015826 1.43585196 -0.36983433 0.25985529 0.66592898 0.09678759
其他人提到了如果你想改变你的数据的所有分析的底层(或愿意改变数据)最好的解决scheme。
如果你不想改变数据(这是一次性改变,但是将来你又想要默认行为),那么你可以使用C(注意大写)函数的组合来设置对比度和控制.treatments函数与基本参数select您想要成为基线的级别。 例如:
lm( Sepal.Width ~ C(Species,contr.treatment(3, base=2)), data=iris )
该命令是一个简短的方法来解决你的问题。 它所做的是重新sorting因素,以便任何参考水平是第一位的。 因此,重新sorting你的因素水平也会有同样的效果,但给你更多的控制权。 也许你想有3,4,0,1,2的水平。 在这种情况下…
bFactor <- factor(b, levels = c(3,4,0,1,2))
我更喜欢这种方法,因为我更容易在代码中看到引用是什么,而其他值的位置(而不是看结果)。
注意:不要把它作为一个有序的因素。 具有指定顺序和有序因子的因素并不是一回事。 lm()可能会开始认为你想要多项式对比,如果你这样做。
您也可以手动标记列的contrasts
属性,这似乎是回归函数所尊重的:
contrasts(df$factorcol) <- contr.treatment(levels(df$factorcol), base=which(levels(df$factorcol) == 'RefLevel'))