对于lm()函数还是用于线性回归的其他函数,参数是否可以将参考组设置为始终为最大的组而不是lm()中的字母/数字默认值?
由于这通常是在统计数据中完成的,所以当我搜索文档或者我在错误的地方查找时,我想我会以某种方式遗漏它。任何帮助,将不胜感激!
下面,即使在UDF中,我也希望不 继续。
mtcars # load dataset
mtcars <- mtcars[1:31, ] # remove a now so that there is a single biggest group
lm(mpg ~ gear+carb+disp, data = mtcars ) # carb's group 1 is the reference by default
mtcars$carb <- as.factor(mtcars$carb)
mtcars <- within(mtcars, carb <- relevel(carb, ref = "4")) # set carb's group 4 as the reference
lm(mpg ~ gear+carb+disp, data = mtcars )
答案 0 :(得分:0)
lm
看起来没有任何选项,但您可以创建一个包装函数来更改因子计算到频率,然后在公式中使用它。
big.ref <- function(x) {
if(!is.factor(x)) x<-factor(x)
counts <- sort(table(x), decreasing = TRUE)
relevel(x, ref=names(counts)[1])
}
lm(mpg ~ gear + big.ref(carb) + disp, data = mtcars )
答案 1 :(得分:0)
我不相信有一个内置的功能可以做到这一点,但写一个并不困难。
largest_ref <- function(DF, col){
DF[[col]] <- factor(DF[[col]])
tbl <- table(DF[[col]])
largest <- names(tbl)[which.max(tbl)]
DF[[col]] <- relevel(DF[[col]], ref = largest)
DF
}
现在我将重新加载测试数据集并更改它的副本。然后在两个数据集上运行回归,这些数据集由您的代码重新分配,并由上述函数重新分配。
data(mtcars)
mtcars <- mtcars[1:31, ]
mtc <- mtcars
mtcars$carb <- as.factor(mtcars$carb)
mtcars <- within(mtcars, carb <- relevel(carb, ref = "4")) # set carb's group 4 as the reference
fit1 <- lm(mpg ~ gear + carb + disp, data = mtcars)
mtc <- largest_ref(mtc, "carb")
fit2 <- lm(mpg ~ gear + carb + disp, data = mtc)
identical(coef(fit1), coef(fit2))
#[1] TRUE
如您所见,结果是一样的。您可以进一步查看(输出省略)。
summary(fit1)
summary(fit2)