用分类数据解释 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 模型(套索、岭、弹性网)的分类预测变量吗?
R:来自经过训练的 GLM 模型的分类公式 [提供可重现的示例]
如何从 cv.glmnet 中提取具有成本函数的实际分类错误率,以便与 cv.glm 进行比较?
R语言使用R基础安装中的glm函数构建乳腺癌二分类预测逻辑回归模型分类预测器(分类变量)被自动替换为一组虚拟编码变量summary函数查看检查模型使用table函数计算混淆矩阵评估分类模型性能