修改逻辑回归中因子的名称

5

首先,让我介绍一个示例数据。

set.seed(1)
x1=rnorm(10)
y=as.factor(sample(c(1,0),10,replace=TRUE))
x2=sample(c('Young','Middle','Old'),10,replace=TRUE)
model1 <- glm(y~as.factor(x1>=0)+as.factor(x2),binomial)

当我输入summary(model1)时,会得到以下结果。
 Estimate Std. Error z value Pr(>|z|)
(Intercept)              -0.1835     1.0926  -0.168    0.867
as.factor(x1 >= 0)TRUE    0.7470     1.7287   0.432    0.666
as.factor(x2)Old          0.7470     1.7287   0.432    0.666
as.factor(x2)Young       18.0026  4612.2023   0.004    0.997

请忽略模型估计结果,因为数据是假的。
在R中,有没有一种方法可以更清楚地更改出现在最左列的估计量名称?例如,删除“as.factor”,并在因子水平前加上_。输出应如下所示:
                Estimate Std. Error z value Pr(>|z|)
(Intercept)      -0.1835     1.0926  -0.168    0.867
(x1 >= 0)_TRUE    0.7470     1.7287   0.432    0.666
(x2)_Old          0.7470     1.7287   0.432    0.666
(x2)_Young       18.0026  4612.2023   0.004    0.997

你是想要改变 summary.(g)lm 对象的打印方法,还是仅仅想要重命名这个特定 summary.glm 对象的 coefficients 组件的 rownames - BenBarnes
4
对比方式的命名基于默认对比函数(通常是contr.treatment)或明确设置的对比函数。可以查看car::contr.Treatment以了解如何更改名称,可以使用该函数或者按照该函数的代码编写自己的函数来更改名称。请注意不要改变原文的意思。 - Brian Diggs
2个回答

5
除了上述评论之外,另一个要点是将所有数据放入数据框中,并相应地命名变量。然后,变量名称不是从塞入公式中的混乱表达式中获取的。
library(car)
dat <- data.frame(y = y,
                  x1 = cut(x1,breaks = c(-Inf,0,Inf),labels = c("x1 < 0","x1 >= 0"),right = FALSE),
                  x2 = as.factor(x2))

#To illustrate Brian's suggestion above
options(decorate.contr.Treatment = "")
model1 <- glm(y~x1+x2,binomial,data = dat,
            contrasts = list(x1 = "contr.Treatment",x2 = "contr.Treatment"))
summary(model1)

Call:
glm(formula = y ~ x1 + x2, family = binomial, data = dat, contrasts = list(x1 = "contr.Treatment", 
    x2 = "contr.Treatment"))

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.7602  -0.8254   0.3456   0.8848   1.2563  

Coefficients:
             Estimate Std. Error z value Pr(>|z|)
(Intercept)   -0.1835     1.0926  -0.168    0.867
x1[x1 >= 0]    0.7470     1.7287   0.432    0.666
x2[Old]        0.7470     1.7287   0.432    0.666
x2[Young]     18.0026  4612.2023   0.004    0.997

1
@Stat-R 你安装并加载了 car 包吗? - joran

1

首先,先正确获取您的数据,然后再拟合模型。将变量收集到一个数据框中,并在该数据框中包含处理过的变量,这样您就可以控制它们的名称。例如:

set.seed(1)
x1 <- rnorm(10)
y <- as.factor(sample(c(1,0), 10, replace=TRUE))
x2 <- sample(c('Young', 'Middle', 'Old'), 10, replace=TRUE)
dat <- data.frame(y = y, x1 = x1, x2 = factor(x2),
                  x1.gt.0 = factor(x1 >= 0))
model1 <- glm(y~ x1.gt.0 + x2, data = dat, family = binomial)

> coef(model1)
(Intercept) x1.gt.0TRUE       x2Old     x2Young 
 -0.1835144   0.7469661   0.7469661  18.0026168

这就是在大多数R函数中应该如何使用公式接口。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接