如何解决如何对非二元变量执行逻辑回归? 结果结果
我一直在寻找这个答案,我真的很惊讶还没有找到它。我只想在 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] 区间内。你知道我如何执行这个回归吗?
请注意 - 我知道执行多级逻辑回归并不是那么简单,有几种技术可以做到这一点,例如一比一。但是我一直在寻找它,却没有找到。
解决方法
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
不适合。
如果您阅读错误消息,它会提示您可能会成功:
y <- sample(seq(0,1,length=3),replace = T)
事实上,你做到了。现在您面临的挑战可能是在现实中的实际情况(您没有提供)的背景下解释它。您确实收到警告,但 R 警告不是错误。
您还可以查找多分逻辑回归的主题,该主题在多个变体中实现,这些变体在特定情况下可能有用。 Frank Harrell 的 Regression Modeling Strategies 一书提供了有关此类技术的资料。如果您在选择要走的路线时需要帮助,也可以在 CrossValidated.com 上发布更多问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。