我有一个使用 glmnet 包制作的逻辑回归模型。我的响应变量被编码为一个因子,我将其级别称为“a”和“b”。

逻辑回归的数学将两个类中的一个标记为“0”,另一个标记为“1”。逻辑回归模型的特征系数为正、负或零。如果特征“f”的系数为正,则增加测试观测值 x 的“f”值会增加模型将 x 分类为“1”类的概率。

我的问题是:给定 glmnet 模型,您如何知道 glmnet 如何将数据的因子标签 {"a", "b"} 映射到基础数学的因子标签 {"0", "1"}?因为您需要知道这一点才能正确解释模型的系数。

当应用于玩具观察时,您可以通过试验 predict 函数的输出来手动计算出这一点。但是 glmnet 如何隐式处理该映射以加快解释过程会很好。

谢谢!

最佳答案

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

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() ,都会发生同样的事情。

关于r - glmnet:我怎么知道我的响应的哪个因子水平在逻辑回归中被编码为 1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37912399/

10-12 17:13