这是在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