用分类数据解释 GLM 输出

Posted

技术标签:

【中文标题】用分类数据解释 GLM 输出【英文标题】:Interpreting GLM output with categorical data 【发布时间】:2022-01-16 11:40:30 【问题描述】:

我无法确定 R 用于我的响应变量 matnew 的参考水平。我知道它有时会按字母顺序选择,在这种情况下是“失败”,但我不确定它是否真的会使用“通过”,因为这个变量首先出现在 A、B、C 中。我尝试自己设置参考级别但是当我尝试这个时,无论我选择“通过”还是“失败”,系数估计都没有改变。有没有办法测试基线水平?

我遇到的另一个问题是解释输出。例如,对于学校 MS(参考水平是 GP),这是否意味着从学校 GP 到 MS 与学生通过(或失败,取决于参考水平)数学的对数几率的平均变化为 -1.0569 ?感谢您提供的任何见解。

代码:

d3$matnew[d3$mat.grade=="A"|d3$mat.grade=="B"|d3$mat.grade=="C"] <- "Pass"
d3$matnew[d3$mat.grade=="D" |d3$mat.grade=="F"] <- "Fail"


library(geepack)
glm_fit_math <- glm(factor(matnew) ~ absences.x + Medu + school + 
schoolsup+famsup+goout, 
           data = d3,
           family = binomial)
summary(glm_fit_math)

输出:

【问题讨论】:

【参考方案1】:

您可以使用levels()函数查看一个因子的水平,参考水平是该函数返回的第一个字符。例如,

x = factor(c("Fail", "Pass"))
levels(x)
# output is:
#[1] "Fail" "Pass"

所以,“失败”是参考水平。

glm()函数的逻辑模型拟合一个0-1的响应变量,响应值为1表示成功的概率。将因子改回 0-1 变量会有所帮助,例如将 Fail 的数据更改为 0,将 Pass 的数据更改为 1,这将模拟通过概率。

d3$matnew[d3$mat.grade=="A"|d3$mat.grade=="B"|d3$mat.grade=="C"] <- 1 # "Pass"
d3$matnew[d3$mat.grade=="D" |d3$mat.grade=="F"] <- 0 #"Fail"

或者如果使用了因子,您还可以检查模型以了解响应变量在建模中的使用方式。从拟合模型中检查$y,其中y 是模型中使用的响应变量,$model 是原始数据。比较这两件事可以让您了解哪个级别被建模为成功。

set.seed(1214)
y = as.factor(rbernoulli(10))
y
# output is:
#[1] TRUE  TRUE  FALSE TRUE  TRUE 
#[6] TRUE  FALSE FALSE FALSE FALSE
#Levels: FALSE TRUE

x = rnorm(10)
model1 <- glm(y ~ x, family = binomial())

model1$y
# output is:
# 1  1  0  1  1  1  0  0  0  0 
model1$model
#     y           x
#1   TRUE -1.80433919
#2   TRUE  0.05786102
#3  FALSE -1.23232211
#4   TRUE -1.64980827
#5   TRUE  0.87854220
#6   TRUE -0.59077164
#7  FALSE  0.07888135
#8  FALSE -0.16824491
#9  FALSE  0.32182848
#10 FALSE -1.23651163

在上面的例子中,TRUE 对应于1,所以有TRUE 的概率被建模了。

【讨论】:

而你对学校MS的解释基本是对的,但需要说明其他变量的值相同,即schoolMS的对数赔率比schoolGP的对数赔率低1.0569所有其他变量的值相同。

以上是关于用分类数据解释 GLM 输出的主要内容,如果未能解决你的问题,请参考以下文章

通过分类变量级别估计 h2o glm 系数

H2O 不应该标准化正则化 GLM 模型(套索、岭、弹性网)的分类预测变量吗?

在 R [重复] 中更改 glm 中的分类预测变量的级别

R:来自经过训练的 GLM 模型的分类公式 [提供可重现的示例]

如何从 cv.glmnet 中提取具有成本函数的实际分类错误率,以便与 cv.glm 进行比较?

R语言使用R基础安装中的glm函数构建乳腺癌二分类预测逻辑回归模型分类预测器(分类变量)被自动替换为一组虚拟编码变量summary函数查看检查模型使用table函数计算混淆矩阵评估分类模型性能