当我的公式中有多个因子变量时,如何比较 glm 中的系数?

数据挖掘 r 回归 glm
2022-02-26 08:36:51

我正在尝试在 R 中建模具有许多自变量的二元结果。Ivs中有5个是两个以上水平的因子。当我尝试删除截距时,它仅针对自变量之一进行。我想看看是否有任何水平的系数与该变量中的任何其他系数显着不同(很高兴看到任何水平是否与平均值显着不同)。当我对 glm 进行摘要时,它仅显示与第一级相关的系数值(第一个 IV 除外)。为了重新创建它,我有使用 mtcars 的类似东西的 R 代码:

md <- datasets::mtcars
md <- mutate(md, ncyl = ifelse(cyl==6,"Six Cyl", cyl))
md <- mutate(md, ncyl = ifelse(cyl==4,"Four Cyl",ncyl))
md <- mutate(md, ncyl = ifelse(cyl==8,"Eight Cyl",ncyl))
md <- mutate(md, wgear = ifelse(gear==3,"Three G",gear))
md <- mutate(md, wgear = ifelse(wgear==4,"Four G",wgear))
md <- mutate(md, wgear = ifelse(wgear==5,"Five G",wgear))
md <- mutate(md, wcarb = ifelse(carb==1,"One Carb",carb))
md <- mutate(md, wcarb = ifelse(carb==2,"Two Carb",wcarb))
md <- mutate(md, wcarb = ifelse(carb==3,"Three Carb",wcarb))
md <- mutate(md, wcarb = ifelse(carb==4,"Four Carb",wcarb))
md <- mutate(md, wcarb = ifelse(carb==6,"Six Carb",wcarb))
md <- mutate(md, wcarb = ifelse(carb==8,"Eight Carb",wcarb))
md <- md[,-c(2,10,11)]
model <- glm(mpg~., data = md)
summary(model)
modelint <- glm(mpg~.-1, data = md)
summary(modelint)

因此,summary(modelint)我可以看到所有 3 个可能值 ncyl 的系数值,并且confint(modelint)我至少可以看到所有可能值的置信区间。但是 wgear 和 wcarb 只是按字母顺序与它们的第一级进行比较,而 t 值只是与第一级不同。我知道如果我这样做了,mpg~wgear-1我可以看到他们的比较,但我认为这并没有考虑到所有其他变量。理想情况下,我想看看 1 carb 与 2 carb、3、4、... 和 1 carb 与不是 1 carb 的比较,同时考虑其他变量。有没有比 glm 更好的功能?任何建议将不胜感激!

2个回答

除非您指定,否则 R 会自行选择基线级别。您可以在此处阅读如何指定它: https ://stackoverflow.com/questions/3872070/how-to-force-r-to-use-a-specified-factor-level-as-reference-in-a-regression

然后您可以更改参考(基线)级别以获得所有可能的结果。这很容易做到,但我不确定这是否是最好的方法,因为您需要多次重复自己。但我认为如果您可以将其应用于您自己的数据,这可能会更好:

https://stats.stackexchange.com/questions/60352/comparing-levels-of-factors-after-a-glm-in-r

这是 R 包文档的链接: https ://cran.r-project.org/web/packages/multcomp/multcomp.pdf

您可以使用 R 包测试以下 R 代码multcomp

md <- datasets::mtcars
md$cyl <- factor(md$cyl)
md$gear <- factor(md$gear)
md$carb <- factor(md$carb)
my.mod1  <- glm(mpg~., data=md)
library(multcomp)
summary(glht(my.mod1, mcp(cyl="Tukey")))