非线性数据的逻辑回归
Logistic regression for non-linear data
我有一个具有连续自变量和二元相关的数据。因此,我试图应用逻辑回归来分析这些数据。然而,与具有 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, 0, 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, by = 0.5, length = 30),
y = c(rep(0, times = 10), rep(1, times = 10), rep(0, times = 10)))
model.my = glm(formula = y ~ x,
data = my.data,
family = "binomial")
summary(model.my)
visreg(model.my,
partial = FALSE,
scale = "response",
alpha = 0)
两个图上的蓝线 - 它是 glm 的结果,而红线是我想要的。
有什么方法可以将逻辑回归应用于此类数据?或者我应该应用一些其他类型的回归分析?
在您的第二个模型中,y
不是 x
的线性函数。当您编写 y ~ x
时,您假设当 x
增加时,y
将 increase/decrease 取决于 positive/negative 系数。事实并非如此,它先增加后减少,使 x
的平均效应为零(因此是海峡线)。因此,您需要一个 non-linear 函数。您可以使用 mgcv
包中的 gam
来做到这一点,其中 x
的效果被建模为平滑函数:
library(mgcv)
my.data = data.frame(x = seq(from = 0, by = 0.5, length = 30),
y = c(rep(0, times = 10), rep(1, times = 10), 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")
我有一个具有连续自变量和二元相关的数据。因此,我试图应用逻辑回归来分析这些数据。然而,与具有 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, 0, 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, by = 0.5, length = 30),
y = c(rep(0, times = 10), rep(1, times = 10), rep(0, times = 10)))
model.my = glm(formula = y ~ x,
data = my.data,
family = "binomial")
summary(model.my)
visreg(model.my,
partial = FALSE,
scale = "response",
alpha = 0)
两个图上的蓝线 - 它是 glm 的结果,而红线是我想要的。 有什么方法可以将逻辑回归应用于此类数据?或者我应该应用一些其他类型的回归分析?
在您的第二个模型中,y
不是 x
的线性函数。当您编写 y ~ x
时,您假设当 x
增加时,y
将 increase/decrease 取决于 positive/negative 系数。事实并非如此,它先增加后减少,使 x
的平均效应为零(因此是海峡线)。因此,您需要一个 non-linear 函数。您可以使用 mgcv
包中的 gam
来做到这一点,其中 x
的效果被建模为平滑函数:
library(mgcv)
my.data = data.frame(x = seq(from = 0, by = 0.5, length = 30),
y = c(rep(0, times = 10), rep(1, times = 10), 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")