在线性回归中将参考组设置为最大组的参数

时间:2018-03-26 17:48:25

标签: r

对于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 ) 

2 个答案:

答案 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)