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

时间:2021-04-17 15:53:45

标签: r regression logistic-regression estimation

我一直在寻找这个答案,我真的很惊讶还没有找到它。我只想在 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] 区间内。你知道我如何执行这个回归吗?

请注意 - 我知道执行多级逻辑回归并不是那么简单,有几种技术可以做到这一点,例如一比一。但是我一直在寻找它,却没有找到。

3 个答案:

答案 0 :(得分:3)

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 

答案 1 :(得分:3)

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

该消息有点模糊,因为您可以将逻辑回归中的 y 变量指定为 0 和 1,或者指定为比例(介于 0 和 1 之间),并带有 weights 参数指定主题的数量和比例是。

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

答案 2 :(得分:-1)

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

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

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

您还可以查找多分逻辑回归的主题,该主题在多个变体中实现,这些变体在特定情况下可能有用。 Frank Harrell 的 Regression Modeling Strategies 一书提供了有关此类技术的资料。如果您在选择要走的路线时需要帮助,也可以在 CrossValidated.com 上发布更多问题。