修改逻辑回归中的因子名称
Posted
技术标签:
【中文标题】修改逻辑回归中的因子名称【英文标题】:Modifying the names of factors in logistic regression 【发布时间】:2012-05-11 07:10:38 【问题描述】:让我先展示一个示例数据。
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
对象的打印方法,或者您是否希望简单地重命名此特定coefficients
组件的rownames
summary.glm
对象?
对比度的命名方式基于默认(或明确设置)的对比度函数(通常为contr.treatment
)。查看car::contr.Treatment
了解更改名称的方法(使用该函数,或按照那里的代码创建自己的函数)。
【参考方案1】:
除了上面的 cmets 之外,另一部分是将所有数据放在一个数据框中,并相应地命名变量。那么变量名就不是取自塞进你的公式中的一个又大又丑的表达式:
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
【讨论】:
@Stat-R 您是否安装并加载了 car 包?【参考方案2】:对于第一部分,首先在拟合模型之前获取您的数据。收集数据框中的变量并将处理后的变量包含在该数据框中,这样您就可以控制它们的名称。例如:
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 函数中使用公式接口的方式。
【讨论】:
以上是关于修改逻辑回归中的因子名称的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的逻辑回归模型输出的因子不是 2 个水平? (错误:`data`和`reference`应该是相同级别的因素。)
如何将从逻辑回归模型获得的系数映射到pyspark中的特征名称
R语言广义线性模型函数GLMglm函数构建逻辑回归模型(Logistic regression)构建仿真数据集控制所有其它预测变量进而评估单个预测因子对结果概率的影响