glmnet:在逻辑回归中,我如何知道哪个响应因子水平被编码为1?

11
我有一个 logistic 回归模型,使用了 glmnet 包。我的响应变量被编码为一个因子,其水平值我将称之为 "a" 和 "b"。 logistic 回归的数学中,将两个类别中的一个标记为 "0",另一个标记为 "1"。logistic 回归模型的特征系数可以是正数、负数或零。如果一个特征 "f" 的系数是正数,则增加测试样本 x 的 "f" 值会增加模型将 x 分类为 class "1" 的概率。
我的问题是:给定一个 glmnet 模型,如何知道 glmnet 是如何将你的数据的因子标签 {"a", "b"} 映射到底层数学的因子标签 {"0", "1"} 的?因为你需要了解这一点才能正确解释模型的系数。
您可以通过对玩具观察结果应用 predict 函数来手动计算出这一点。但是要加快解释过程,知道 glmnet 如何隐式处理这种映射会更好。
谢谢!
1个回答

11

请查看https://cran.r-project.org/web/packages/glmnet/glmnet.pdf第9页的?glmnet

y

response variable. ... For family="binomial" should be either a factor
with two levels, or a two-column matrix of counts or proportions (the 
second column is treated as the target class; for a factor, the last
level in alphabetical order is the target class) ...

现在清楚了吧?如果你的因子水平是"a""b",那么"a"的编码为0,而"b"的编码为1。

这种处理方式非常标准。它与R如何自动编码因子或者你如何手动编码这些因子水平有关。看一下:

## automatic coding by R based on alphabetical order
set.seed(0); y1 <- factor(sample(letters[1:2], 10, replace = TRUE))
## manual coding
set.seed(0); y2 <- factor(sample(letters[1:2], 10, replace = TRUE),
                   levels = c("b", "a"))

# > y1
# [1] b a a b b a b b b b
# Levels: a b
# > y2
# [1] b a a b b a b b b b
# Levels: b a

# > levels(y1)
# [1] "a" "b"
# > levels(y2)
# [1] "b" "a"
无论您使用 glmnet() 还是仅使用 glm(),都会发生相同的事情。

1
我确实觉得glmnet的帮助文档不是特别清晰。不过还是谢谢你的回答。 - cmbarbu
如果您手动编码因子,那么第一个级别是否是正类? - Jeff Bezos
1
@JeffBezos 始终是第二层。 - Zheyuan Li

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