在SCI文章中,交互效应表格(通常是表五)能为文章锦上添花,增加文章的信服力,增加结果的可信程度,还能进行数据挖掘。什么是亚组,通常就是特殊类 型人群,比如男女,种族等,就是说你的数据放入特殊人群中结果还可靠吗?如果在各个特殊人群中,你的结果很稳定,说明你的结论很可靠。如果亚组的结论和你的数据数据结论相反,你可以拿来做个新论题。还可以比较不同亚组之间有无区别,比如做了心脏支架和没做支架的区别,可以发现很多新思路,易于数据挖掘。
其实交互作用就是一个变量通过对另一个变量的影响,导致结局变量改变,最常见的就是我们药物之间的交互作用,比如β受体阻滞剂对血糖有影响,同时和降糖药使用可能会加强或者减弱降糖药的降糖效果,这就是交互作用。,既往我已经介绍过多篇交互效应文章,比如:
R语言logistic回归交互项(交互作用)的可视化分析2
这个文章介绍的是随着年龄增大,流产2次以上的比没有流产的女性,不孕症的概率明显增大,因此流产和年龄对不孕症的结局存在交互影响。但是对于连续变量,这样的图形不好表示交互效应,根据粉丝要求,编写了ggsci3d函数,能够一步到位,生成交互效应数据并绘图,
下面我来演示一下,先导入数据和R包
library(foreign)library(mgcv)library(rms)library(ggscitable)library(scitable)be<-read.spss("E:/r/test/ozone.sav",use.value.labels=F,to.data.frame=T)names(be)
数据中有七个变量,ozon每日臭氧水平为结局变量,Inversion base height(ibh)反转基准高度,Pressure gradient (mm Hg) 压力梯度(mm Hg),Visibility (miles) 能见度(英里),Temperature (degrees F) 温度(华氏度),Day of the year日期,vh我也不知道是什么,反正就是一参数,这里所有的变量都是连续的
假设我想知道ibh和dpg对结局臭氧(ozon)的影响
out<-ggsci3d(x=c("ibh","dpg"),y="ozon",data=be,username=username,token=token)
这里m1和m2表示ibh和dpg,预测值就是臭氧,就得到一个随着ibh和dpg变化,臭氧改变的3D图,可以看到并不是ibh和dpg最大,就是臭氧浓度最高,而是一个曲线的变化,有一个峰值。
还可以进一步假如协变量的影响,假设这里协变量是"temp",“vis”
out<-ggsci3d(x=c("ibh","dpg"),y="ozon",cov=c("temp","vis"),data=be,username=username,token=token)
可以自定义颜色,有"topo", “heat”, “cm”, “terrain”, “gray” ,"bw"这些颜色参数可以选择,
out<-ggsci3d(x=c("ibh","dpg"),y="ozon",cov=c("temp","vis"),color="cm",data=be,username=username,token=token)咱们还可以增加区域网格数,这样可以更加详细的显示曲线波动
out<-ggsci3d(x=c("ibh","dpg"),y="ozon",cov=c("temp","vis"),color="cm",n.grid=60,data=be,username=username,token=token)
给x轴y轴z轴都打上标签
out<-ggsci3d(x=c("ibh","dpg"),y="ozon",cov=c("temp","vis"),color="cm",n.grid=60,data=be,xlab="高度",ylab="压力",main="3D图",zlab="臭氧",username=username,token=token)还可以更换其他计算3D图的算法
out<-ggsci3d(x=c("ibh","dpg"),y="ozon",data=be,type="s",username=username,token=token)
还可以使用等高线来表示
out<-ggsci3d(x=c("ibh","dpg"),y="ozon",data=be,plot.type="contour",username=username,token=token)
这个等高线画得明显不如咱们的ggconinteraction函数绘制效果,如果想绘制等高线的可以看文章
R语言基于ggscitable包复现一篇3.5分的文章的连续变量交互效应(交互作用)的可视化图
ggsci3d函数还生成有绘图数据,你可以借助绘图数据,使用其他R包绘图也是可以的
先把数据提取出来
library(mgcv)library(rgl)library(plotly)x<-out[["plotdt"]][["x"]]y<-out[["plotdt"]][["y"]]z<-out[["plotdt"]][["z"]]使用plot_ly函数绘图 plot_ly(x=x,y=y,z=z,type="surface")%>%layout(scene=list(xaxis=list(title="x1"),yaxis=list(title="x2"),zaxis=list(title="fit")))
这个图是能旋转的,有需要旋转的可以使用这个函数绘图
使用persp3d函数绘图
persp3d(x=x,y=y,z=z,xlab="x1",ylab="x2",zlab="fit")
文字表达有限,下面视频更加精彩