跟练Rstudio绘制基线表、ROC、AUC图、lasso

这是在jupyer中运行的,后来发现包没装好,后来换在Rstudio练

以下所有内容都只是练习,只能保证不报错,不能运用到实际操作中!!!

1、将.xls转为.csv文件,并保存到自己的硬盘里(这是绝对路径)

import pandas as pd
import xlrd  //xls文件转化为csv文件需要的包

ex = pd.read_excel("E:/practice_data/data.xls")
ex.to_csv("E:/practice_data/data.csv",encoding = "gbk")

2、

df.head()   //输出数据的前五行
df.tail()   //输出数据的后五行
len(df)   //查看数据量
df.columns = ['year', 'rank', 'company', 'revenue', 'profit']  //对列重命名
df.dtypes   //查看数据类型

3、R语言,变量过多,str显示不全

str(df, list.len=ncol(df))

 以下是在Rstudio中练习:

1、一定要先在excel中处理好数据再导入Rstudio

如果缺失值很多,先删减大块的缺失值,然后再确定变量是二分类变量还是多分类变量

2、先导入library

library(corrplot)
library(glmnet)
library(caret)
library(CBCgrps)
library(nortest)
library(tidyverse)
library(ggpubr)
library(rms)
library(pROC)

3、导入csv文件

4、处理缺失值

data<-na.omit(data)
head(data)

5、设置因子型变量

注意:处理缺失值后可能会出现某个分类变量少了一个类,所以在设置时,可以先把处理过缺失值的表导出,然后打开表格确定该分类变量。

导出csv文件语句:

write.csv(tab1$Table,file = "E:/practice_data/tab1.csv")

设置因子型变量语句:

data$first_careunit<-as.factor(data$first_careunit)
```

6、制作基线表

tab1<-twogrps(data,gvar="first_careunit")  #gvar的值是你的数据以什么分类
write.csv(tab1$Table,file="E:/practice_data/tab1.csv")

 7、画ROC曲线

把前面设为因子型变量的变量重新设为数据型,除了gvar的值所提到的变量

rocdata<.data%>%
        mutate(echo=as.numeric(echo)
              ```
        )

#把所有变量名加起来

roc.list<-roc(mort_28_day ~ first_careunit+icustay_id + hadm_id + subject_id + age + icu_order + echo_exclude + echo_include + echo + gender + weight + saps + sofa + elix_score + vent + vaso +icu_adm_weekday + icu_adm_hour + icu_los_day + vs_temp_first + vs_temp_min + vs_temp_max + vs_heart_rate_first + vs_heart_rate_min + vs_heart_rate_max + sedative + vs_temp_flag,data = rocdata)

 注:可以使用以下语句输出全部的变量名称,然后把”,”改成+:

dput(names(dataname))

 出现如下结果:

 8、绘图

g.list<-ggroc(roc.list,alpha = 0.5,linetype = 1,size = 0.5)
g.list + theme_bw()

 得到下面图片:

 9、提取AUC值

auc<-sapply(roc.list,"[",9)  #9指的是icustay_id里的第9个数据,从0开始
auc<-as.data.frame(auc)

#对AUC倒置,并排序

auc<-t(auc)
auc<-as.data.frame(auc)
AUC<-arrange(auc,desc(V1),by_group = FALSE)

 #绘制可视化柱状图

ggplot(AUC,aes(x=V1,y=reorder(rownames(AUC),V1)))+geom_bar(stat="identity",fill="skyblue",alpha = 1,width = 0.4)

 10、相关性共线性分析

numdata=data%>%
     mutate(data$first_careunit<-as.factor(data$first_careunit)
            ···
)%>%
     select(where(is.numeric))

#得到相关系数矩阵

M<-cor(numdata)
M

#进行相关性显著性检验

testRes<-cor.mtest(numdata,conf.level = 0.5)
testRes
par(mfrow = c(2,3))

 #相关性热图(每个变量与各个变量之间的关系)绘制

corrplot(M,method = 'circle')
corrplot(
    M
    ,method = 'color'
    ,type = 'upper'
    ,add = T
    ,tl.pos = "n"
    ,cl.pos = "n"
    ,p.mat = testRes$p
    ,sig.level = c(0.001,0.01,0.05)
    ,pch.cex = 1.5
    ,insig = 'label_sig'
)

注:这可能会报错,如下:

 

 这时需要再R studio的右下角,点击这个按钮清理:

然后再次运行上面绘图的代码,就能得到相关性热图(只是练习,数据存在一定问题)

导出pdf可以对图片上的文字或者各种信息进行修改,可以为30*30

 11、Lasso

##minmax标准化转化

min_max_scale = function(x){
    (x-min(x))/(max(x)-min(x))
}

 #对data中的因子型变量定义

data2 = data%>%
     mutate(
         data<-as.factor(data$first_careunit)
            ````
        )%>%
#如果在data中是数值型变量的,对这些数值型变量进行min_max标准化,并且将data2设置成数据框的格式
     mutate_if(.predicate = is.numeric
               ,.funs = min_max_scale)%>%
     as.data.frame()

 #z转化矩阵

set.seed(123)  #random number generator
x<-data.matrix(data2[,-4])   #x是data2中除了第4列的所有变量,x是除了结局变量的变量;如果是很多列,可以x<-data.matrix(data2[,-c(4,5,6)])
y<-data2[,4]   #y是data2中的第4列,y指的是结局变量
y<-as.numeric(unlist(y))   #y是factor型的,所以在这里把它变成数值型

#lasso

lasso<-glmnet(x,y,family = "binomial",nlambda = 1000,alpha = 1)
print(lasso)

 遇到的问题:

(1)选错结局变量,y应为4

(2)x,y赋值对后,x存在空值(目前不清楚什么原因,初始数据并没有缺失值)

解决:删除存在缺失值的列,重新给x,y赋值,成功

data2 <- select(data2,-c(icu_order,echo_include,echo_exclude,vs_temp_flag,vs_heart_rate_flag))
plot(lasso,xvar = "lambda",label = TRUE)

 得到:

以上在Rstudio的操作,跟练B站博主练习,视频链接为【R语言临床预测模型 一个月水一篇SCI 临床学硕专硕通用】 https://www.bilibili.com/video/BV1KV4y1Q7Q8/?p=8&share_source=copy_web&vd_source=ef681c21b18b281bd70e194833da2957

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值