绘制连续变量预测概率的平滑曲线及95%可信区间

今天有同学问咨询我以下图怎么绘制

文章样图

首先,就我目前的知识范围,这个图应该可以用易侕统计软件的平滑曲线拟合的菜单得到。
这个图应该也是可以用ggplot2绘制的了,不过绘制之前先分析下图的横纵坐标,横坐标为以连续变量,为动脉血氧分压水平;纵坐标为发生SIRS的概率。那个其内在的函数应该是逻辑回归模型,既以动脉血氧分压水平预测SIRS的概率。所以绘图前我们需要先构建一个矩阵,至少有4列,分布为动脉血氧分压,预测概率,预测概率97.5%可信区间值,预测概率2.5%可信区间。

为了模拟绘图过程,我们以下应用survival包的colon数据集,以淋巴结数预测患者的生存状态(生存或者死亡)

library(rms)
library(ggplot2)
library(survival)
df <- colon

df$sex <- factor(df$sex,#性别因子化
                 levels = c(0,1),
                 labels = c("male","female"))

df <- na.omit(df)#删除缺失值

str(df)
数据集结构

以下个构建逻辑回归方程

fit <- glm(status ~ nodes, 
           data=df,
           family=binomial(link = "logit"))

summary(fit)
逻辑回归方程

以下计算预测概率及其95%可信区间

predAll<- predict(fit,#计算预测概率及标准误,生存一个list
        newdata = df,
        type="response",
        se.fit = T)
df$pred <- predAll$fit#预测概率
df$upper <- predAll$fit + 1.96 * predAll$se.fit #95%区间上限
df$lower <- predAll$fit - 1.96 * predAll$se.fit #95%区间下限
View(df)
可以看到数据集内已经添加了需要的3列内容

以下画图,同时把密度曲线画上

ggplot()+
geom_smooth(df, mapping = aes(x=nodes,y=pred))+
geom_density(df,mapping = aes(x=nodes),color="#ADB6B699",fill="#ADB6B699")+
geom_point(df, mapping = aes(x=nodes,y=pred))+
geom_smooth(df, mapping = aes(x=nodes,y=upper),linetype = 2)+
geom_smooth(df, mapping = aes(x=nodes,y=lower),linetype = 2)

最终结果,后续可以用eoffice包导出PPT做继续美化

你可能感兴趣的:(绘制连续变量预测概率的平滑曲线及95%可信区间)