1

谁能解释如何在 r 中为不同级别的分类变量设置常量?

我已阅读以下内容:如何在回归中设置系数值;R,它很好地解释了如何为整个分类变量设置一个常数。我想知道如何为每个级别设置一个。

例如,让我们看一下 MTCARS 数据集:

df <- as.data.frame(mtcars)

df$cyl <- as.factor(df$cyl)
set.seed(1)
glm(mpg ~ cyl + hp + gear, data = df)

这给了我以下输出:

Call:  glm(formula = mpg ~ cyl + hp + gear, data = df)

Coefficients:

(Intercept)         cyl6         cyl8           hp         gear
     19.80268     -4.07000     -2.29798     -0.05541      2.79645  

Degrees of Freedom: 31 Total (i.e. Null);  27 Residual

Null Deviance:      1126 

Residual Deviance: 219.5    AIC: 164.4

如果我想将 cyl6 设置为 -.34 并将 cyl8 设置为 -1.4,然后重新运行以查看它如何影响其他变量,我该怎么做?

4

1 回答 1

0

我认为这是你可以做的

df$mpgCyl=df$mpg
df$mpgCyl[df$cyl==6]=df$mpgCyl[df$cyl==6]-0.34
df$mpgCyl[df$cyl==8]=df$mpgCyl[df$cyl==8]-1.4
model2=glm(mpgCyl ~ hp + gear, data = df)
> model2

Call:  glm(formula = mpgCyl ~ hp + gear, data = df)

Coefficients:
(Intercept)           hp         gear  
   16.86483     -0.07146      3.53128  

更新评论:

cyl是一个因素,因此默认情况下它glm作为偏移量而不是斜率起作用。实际上cyl==4是“隐藏的”,但也存在于其中glm。因此,在您的第一个 glm 中,模型所说的是:

1) for cyl==4: mpg=19.8-0.055*hp+2.79*gear
2) for cyl==6: mpg=(19.8-4.07)-0.055*hp+2.79*gear
3) for cyl==8: mpg=(19.8-2.29)-0.055*hp+2.79*gear

也许你也可以在这里查看https://stats.stackexchange.com/questions/213710/level-of-factor-taken-as-intercept和这里有没有办法适合`glm()`,以便所有级别都是包括(即没有参考水平)?

希望这可以帮助

于 2018-02-16T13:15:57.367 回答