R 为我的logistic回归模型生成logistic曲线

R 为我的logistic回归模型生成logistic曲线,r,plot,regression,logistic-regression,glm,R,Plot,Regression,Logistic Regression,Glm,我想写代码来绘制我的逻辑回归模型,即“S”形逻辑回归曲线。既然我有两个独立的协变量,那怎么办呢?我正在附上我的数据集和我的模型代码。先谢谢你 239 0.72 1 324.6 0.83 1 331.8 0.95 1 334.3 0.83 1 259.7 0.89 1 212.3 0.88 1 204.7 0.65 1 253.86 0.75 1 258.94 0.85 1 329.66 0.95 0 469

我想写代码来绘制我的逻辑回归模型,即“S”形逻辑回归曲线。既然我有两个独立的协变量,那怎么办呢?我正在附上我的数据集和我的模型代码。先谢谢你

239 0.72    1
324.6   0.83    1
331.8   0.95    1
334.3   0.83    1
259.7   0.89    1
212.3   0.88    1
204.7   0.65    1
253.86  0.75    1
258.94  0.85    1
329.66  0.95    0
469.68  1.46    0
459.74  1.11    0
293.2   0.64    0
297.88  0.98    0
267.9   0.82    0
374.1   1.29    0
333.62  0.74    0


dat <- read.table("data.txt")
colnames(dat)<-c("press","v","gender")

# logostic regression
dat$gender <- factor(dat$gender)
mylogit<- glm(gender~press+v,data=dat,family="binomial")
summary(mylogit)

######## the code below are irrelevant to making plot, ignore if you want

mylogit$fitted.values

newdat <- data.frame(t(c(300,0.1)))
colnames(newdat)<-c("press","v")
   # this is your new dataset, we name it as "newdat"
pred <- predict(mylogit,newdata = newdat,type="response")
pred # the probability of being in class 1 will stored in this object

pred <- predict(mylogit,newdata = dat,type="response")
pred # the probability of being in class 1 will stored in this object
# accuracy
dat$pred <- 0
factor(dat$pred)
dat$pred[which(pred>0.5)] <- 1

table(dat$gender,dat$pred)
2390.72 1
324.6   0.83    1
331.8   0.95    1
334.3   0.83    1
259.7   0.89    1
212.3   0.88    1
204.7   0.65    1
253.86  0.75    1
258.94  0.85    1
329.66  0.95    0
469.68  1.46    0
459.74  1.11    0
293.2   0.64    0
297.88  0.98    0
267.9   0.82    0
374.1   1.29    0
333.62  0.74    0

dat您有两个连续的非分类变量,因此逻辑曲线将是3D曲线。我将为您提供两种演示方式

  • 使用
    persp
    函数生成真实的3D平滑曲线
  • v
    固定在多个值上,然后生成多个二维逻辑曲线(您称之为“S”形曲线)
3D曲线

press_grid <- seq(200, 480, by = 5)
v_grid <- seq(0.6, 1.5, by = 0.1)
newdat <- data.frame(press = rep(press_grid, times = length(v_grid)), v = rep(v_grid, each = length(press_grid)))
pred <- predict.glm(mylogit, newdata = newdat, type="response")
z <- matrix(pred, length(press_grid))
persp(press_grid, v_grid, z, xlab = "pressure", ylab = "velocity", zlab = "predicted probability", main = "logistic curve (3D)", theta = 30, phi = 20)
如果
add=FALSE
,则会打开一个新的打印窗口;虽然它是
TRUE
,但它在上一个窗口上绘制(但您有责任确保有这样一个窗口!)2D绘图提供了更多信息,因为您可以在0、0.5和1处添加水平线

让我们试一试:

curve_2D_fix_v(mylogit, v = 0.4, add = FALSE, col = "black")
curve_2D_fix_v(mylogit, v = 0.6, add = TRUE, col = "red")
curve_2D_fix_v(mylogit, v = 0.8, add = TRUE, col = "green")
curve_2D_fix_v(mylogit, v = 1, add = TRUE, col = "blue")
curve_2D_fix_v(mylogit, v = 1.2, add = TRUE, col = "cyan")
curve_2D_fix_v(mylogit, v = 0.4, add = TRUE, col = "yellow")
曲线如下:


讨论

在这两个图中,我们看到
性别
(预测概率)和
v
(速度)之间的关系不是很强。在2D绘图中,
v
的几乎所有值都产生相同的曲线。另一方面,
(压力)是一种强烈的效果

回到您的模型:

> summary(mylogit)
Coefficients:
            Estimate Std. Error z value Pr(>|z|)  
(Intercept)  8.08326    4.45463   1.815   0.0696 .
press       -0.02575    0.01618  -1.591   0.1115  
v           -0.15385    4.83824  -0.032   0.9746  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

您可以看到
v
根本不重要!严格来说,
press
在0.1水平上也不显著所以这是一个非常弱的模型。我建议您删除变量
v
,然后使用
press
作为唯一变量,再次进行建模。

是-我想绘制逻辑曲线它应该是这样的,但它显示了错误。我不知道如何处理它。绘图(dat$press,dat$SEXT)曲线(predict(mylogit,newdata=newdat,type=“resp”),add=TRUE)好的,我想在3D中绘图,你能告诉我怎么做吗,因为我还是R的初学者。据我所知,它应该绘制预测值以及逻辑模型系数。我知道它有两个数字。你能给我画一张图吗。我以前提供的代码是否也不适用于您?非常感谢您提供的有用信息。我没想到逻辑回归只能用一个数值变量来计算,我会听从你的建议。
> summary(mylogit)
Coefficients:
            Estimate Std. Error z value Pr(>|z|)  
(Intercept)  8.08326    4.45463   1.815   0.0696 .
press       -0.02575    0.01618  -1.591   0.1115  
v           -0.15385    4.83824  -0.032   0.9746  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1