在SCI文章中,交互效应表格(通常是表五)能为文章锦上添花,增加文章的信服力,增加结果的可信程度,还能进行数据挖掘。
交互效应表我在既往文章《R语言手把手教你制作一个交互效应表》已经介绍怎么制作了,详细的可以去看一下。在既往文章《scitb5函数1.6版本(交互效应函数P for interaction)发布----用于一键生成交互效应表》中,我发布了本人编写的scitb5函数1.6版本,反应还不错,没有发现很大的问题,本期发布最新的1.7版本scitb5函数,1.7版本修复了1.6版本的一些小问题,最主要的一个是当结果变量Y是连续变量时,生成的表格应该是β而不是OR,虽然结果没错,但是列名没有改,1.7版本修复了这个问题。1.7版本还增加了plotforest函数,可以一键生成交互效应的森林图,下面咱们来演示一下。
导入我们的早产数据,这里提一下,把数据转成CSV格式,按我的方法导入,可以减少R报错
bc<-read.csv("E:/r/test/zaochan.csv",sep=',',header=TRUE)
bc <- na.omit(bc)
names(bc)
dput(names(bc))
这是一个关于早产低体重儿的数据(公众号回复:早产数据,可以获得该数据),低于2500g被认为是低体重儿。数据解释如下:low 是否是小于2500g早产低体重儿,age 母亲的年龄,lwt 末次月经体重,race 种族,smoke 孕期抽烟,ptl 早产史(计数),ht 有高血压病史,ui 子宫过敏,ftv 早孕时看医生的次数,bwt 新生儿体重数值
分类变量转成因子
bc$race<-ifelse(bc$race=="black",1,ifelse(bc$race=="white",2,3))
bc$smoke<-ifelse(bc$smoke=="nonsmoker",0,1)
bc$low<-factor(bc$low)
bc$race<-factor(bc$race)
bc$ht<-factor(bc$ht)
bc$ui<-factor(bc$ui)
定义协变量和分层因子
cov1<-c("lwt","smoke","ptl","ui","ftv","race")
Interaction<-c("race","smoke","ui")
导入函数,我这里直接写成函数文件1.7final.R,直接导入就可以了
source("E:/r/test/1.7final.R")
导入成功后应该生成8个函数
生成表,和1.6版本一样data是你的数据,必须是数据框形式,x是你研究的目标变量,y是你的结局变量,Interaction是你的分层变量,这个必须是分类变量并转成因子,cov是你的协变量,在我的设定中cov是要包含Interaction的,这也符合我们的习惯。family这里和原来有点不同,统一使用family=“glm”,支持逻辑回归和线性回归,cox回归目前还没支持,需要的可以使用1.4版本。
out<-scitb5(data=bc,x="age",y="low",Interaction=Interaction,cov = cov1,family="glm")
我对列名进行了进一步的修改,更加美观,你可以直接生成表就可以了,不需要再修改列名。
使用plotforest函数绘制森林图
plotforest(out)
这里说明一下plotforest函数调用的是forestplot包和stringr包来绘制森林图,所以这两个包必须安装,不然绘制不出来。
换一个分类数据试一下,这里ht是个分类数据,表示是否有高血压。
out<-scitb5(data=bc,x="ht",y="low",Interaction=Interaction,cov = cov1,family="glm")
plotforest(out)
我们可以看到,OR太大了,上图X轴太小了,所以看起来有点怪,我们可以调整一下参数
plotforest(out,xticks=c(0,10,20))
这样稍微好点了。将来plotforest还将加入更多调节参数。当然这种集成代码生成的森林图肯定比不上你自己画的美观,主打方便实用,你也可以自己画,这样更灵活。咱们换个粉丝的数据来试试,这里就不解释数据了,直接上代码
bc<-read.csv("E:/r/fensi/DII_GROUP.csv",sep=',',header=TRUE)
dput(names(bc))
bc[,c("sex_02", "nianling_02", "marriage_02", "GROUP",
"smoke_02")] <- lapply(bc[,c("sex_02", "nianling_02", "marriage_02","GROUP", "smoke_02")], factor)
str(bc)
Interaction<-c("sex_02", "nianling_02", "marriage_02", "smoke_02")
cov<-c("sex_02", "nianling_02", "marriage_02", "smoke_02","wc_02")
生成结果先来个Y是分类的
out<-scitb5(data=bc,x="GROUP",y="dm_19",Interaction=Interaction,cov = cov,family="glm")
数据很大,上图只是一部分,生成森林图
plotforest(out)
换个Y是连续变量的,生成的就是β而不是OR了
我们可以看到scitb5函数对数据类型自己进行了判断,把OR改成β了,纠正了1.6版本不能修改的错误。
这里要说一下β一般不绘制森林图,所以我没有添加β的接口,如果数据这里是β使用plotforest函数绘制森林图会失败。
plotforest(out)
如果你确实需要绘制关于β的森林图,可以私信告诉我。
生成表后怎么导出来,可以看上一篇文章,这里就不多废话了。原来购买1.4版本和1.6版本的无需重新购买,重新回复一次就可以了,已经进行链接更新。
获得1.7版本函数请看这篇文章
scitb5函数1.7版本(交互效应函数P for interaction)发布----用于一键生成交互效应表、森林图