如何对非二元变量进行逻辑回归?

How to perform logistic regression on not binary variable?

我一直在寻找这个答案,但我真的很惊讶没有找到它。我只想在 R 中执行三级逻辑回归。

让我们定义一些人工数据:

set.seed(42)
y <- sample(0:2, 100, replace = T)
x <- rnorm(100)

我的变量 y 包含三个数字 - 0、1 和 2。所以我认为最简单的方法就是使用:

glm(y ~ x, family = binomial("logit"))

但是我得到的信息是 y 应该在区间 [0,1] 内。您知道我如何执行此回归吗?

请注意 - 我知道执行多级逻辑回归并不是那么简单,有几种方法可以做到这一点,例如一对一。但是我一直在寻找它,我找不到任何东西。

如果您阅读错误消息,它会提示您可能会成功:

y <- sample(seq(0,1,length=3), 100, replace = T)

事实上,你确实如此。现在你的挑战可能是在现实的实际情况(你没有提供)的背景下解释它。你确实收到警告,但 R 警告不是错误。

您还可以查看多分类逻辑回归的主题,该主题以多种变体形式实现,在特定情况下可能很有用。 Frank Harrell 的书《回归建模策略》material 介绍了此类技术。如果您在选择要走的路线方面需要帮助,您还可以 post 在 CrossValidated.com 上进一步提问。

set.seed(42)
y <- sample(0:2, 100, replace = TRUE)
x <- rnorm(100)

多项回归

如果您不想按顺序处理您的回答(即,名义分类 值):

library(nnet) ## 'recommended' package, i.e. installed by default
multinom(y~x)

结果

# weights:  9 (4 variable)
initial  value 109.861229 
final  value 104.977336 
converged
Call:
multinom(formula = y ~ x)

Coefficients:
   (Intercept)           x
1 -0.001529465  0.29386524
2 -0.649236723 -0.01933747

Residual Deviance: 209.9547 
AIC: 217.9547 

或者,如果您的回复是有序的:

序数回归

MASS::polr() 进行比例优势逻辑回归。 (您可能还对 ordinal 包感兴趣,它具有更多功能;它还可以做多项式模型。)

library(MASS) ## also 'recommended'
polr(ordered(y)~x)

结果

Call:
polr(formula = ordered(y) ~ x)

Coefficients:
         x 
0.06411137 

Intercepts:
       0|1        1|2 
-0.4102819  1.3218487 

Residual Deviance: 212.165 
AIC: 218.165 

glm 实现的逻辑回归仅适用于 2 级输出,不适用于 3 级。

该消息有点夸张,因为您可以将逻辑回归中的 y 变量指定为 0 和 1,或者指定为比例(介于 0 和 1 之间),并使用 weights 参数指定受试者数量比例为.

如果响应中有 3 个或更多有序水平,您需要使用泛化,一种常见的泛化是比例优势逻辑回归(也有其他名称)。 MASS 包中的 polr 函数和 rms 包中的 lrm 函数(可能还有其他包中的其他函数)适合这些类型的模型,但 glm 不适合。