如何解决非线性数据的逻辑回归
我有一个具有连续自变量和二进制相关数据。因此,我试图将逻辑回归用于此数据的分析。但是,与具有S形过渡的经典情况相反,我有两个过渡。 这是我的意思的一个例子
library(ggplot)
library(visreg)
classic.data = data.frame(x = seq(from = 0,by = 0.5,length = 30),y = c(rep(0,times = 14),1,rep(1,times = 14)))
model.classic = glm(formula = y ~ x,data = classic.data,family = "binomial")
summary(model.classic)
visreg(model.classic,partial = FALSE,scale = "response",alpha = 0)
my.data = data.frame(x = seq(from = 0,times = 10),rep(0,times = 10)))
model.my = glm(formula = y ~ x,data = my.data,family = "binomial")
summary(model.my)
visreg(model.my,alpha = 0)
两个图上的蓝线-是glm的结果,而红线则是我想要的。 有什么方法可以对这些数据进行逻辑回归吗?还是应该应用其他类型的回归分析?
解决方法
在第二个模型中,y
不是x
的线性函数。当您写y ~ x
时,您假设x
增加时,y
会增加/减少,取决于正/负系数。并非如此,它先增加然后减少,使x
的平均效果为零(因此,海峡线)。因此,您需要一个非线性函数。您可以使用gam
包中的mgcv
来做到这一点,其中x
的效果被建模为平滑函数:
library(mgcv)
my.data = data.frame(x = seq(from = 0,by = 0.5,length = 30),y = c(rep(0,times = 10),rep(1,rep(0,times = 10)))
m = gam(y ~ s(x),data = my.data,family = binomial)
plot(m)
这将导致以下与原始比例相符:
my.data$prediction = predict(m,type = "response")
plot(my.data$x,my.data$y)
lines(my.data$x,my.data$prediction,col = "red")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。