glmnet:我如何知道我的响应的哪个因子级别在逻辑回归中被编码为1

Joh*_*eve 6 regression r glmnet logistic-regression

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

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

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

您可以通过predict在应用于玩具观察时试验函数的输出来手动解决这个问题.但是如何glmnet隐式处理映射以加速解释过程会很好.

谢谢!

李哲源*_*李哲源 8

请查看?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) ...
Run Code Online (Sandbox Code Playgroud)

现在不清楚吗?如果您有"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"
Run Code Online (Sandbox Code Playgroud)

无论你是使用glmnet(),还是简单地glm()发生同样的事情.