如何对非二元变量进行逻辑回归?
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
不适合。
我一直在寻找这个答案,但我真的很惊讶没有找到它。我只想在 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
不适合。