交互作用效应(p for Interaction)在SCI文章中可以算是一个必杀技,几乎在高分的SCI中必出现,因为把人群分为亚组后再进行统计可以增强文章结果的可靠性,进行可视化后可以清晰的表明变量之间的关系。不仅如此,交互作用还可以使用来进行数据挖掘。在既往文章中,我们已经介绍了怎么使用R语言和SPSS对logistic回归亚组交互效应(交互作用)进行可视化分析(见下图)
后台有粉丝问能不能进行COX回归交互效应可视化分析和对连续变量进行交互效应可视化分析,都是可以的,下面我们来一一进行演示。
COX回归交互效应可视化分析和logistic回归交互项的可视化分析的步骤基本一样的,继续使用我们的乳腺癌数据(公众号回复:乳腺癌,可以获得数据)我们先导入数据和R包
library(foreign)
library(visreg)
library(survival)
bc <- read.spss("E:/r/test/Breast cancer survival agec.sav",
use.value.labels=F, to.data.frame=T)
我们先来看看数据:
age表示年龄,pathsize表示病理肿瘤大小(厘米),lnpos表示腋窝淋巴结阳性,histgrad表示病理组织学等级,er表示雌激素受体状态,pr表示孕激素受体状态,status结局事件是否死亡,pathscat表示病理肿瘤大小类别(分组变量),ln_yesno表示是否有淋巴结肿大,time是生存时间,后面的agec是我们自己设定的,不用管它。
接下来删除缺失变量和把分类变量转成因子
bc <- na.omit(bc)
bc$er<-as.factor(bc$er)
bc$pr<-as.factor(bc$pr)
bc$ln_yesno<-as.factor(bc$ln_yesno)
bc$histgrad<-as.factor(bc$histgrad)
建立cox回归方程,我们假设age和histgrad有交互
f1<- coxph(Surv(time, status) ~ age + histgrad+
pathsize+ er + pr + ln_yesno+age*histgrad, data=bc)
summary(f1)
这里发现age:histgrad的P值大于0.05,两者之间没有交互效应,我们不管他,这里主要是演示怎么做图
visreg(f1, "age", "histgrad", ylab="log(Hazard ratio)")
visreg(f1, "age", "histgrad", ylab="log(Hazard ratio)", overlay = T)
plot(visreg(f1,xvar = "age",by="histgrad",plot=F),xlab="age",ylab="log(Hazard ratio)",
overlay = T,partial = F,rug=F,,line=list(lty=1:6))
legend("bottomright",
c("histgrad1","histgrad2","histgrad3"),
lty=c(1,1,1),
col=c("red","green","blue"),
lwd=c(2,1,1),
bty="n")
plot(visreg(f1, "histgrad", by="age",plot=F),xlab="age",ylab="log(Hazard ratio)",
overlay = T,partial = F,rug=F,,line=list(lty=1:6))
legend("bottomright",
c("age38","age55","age74"),
lty=c(1,1,1),
col=c("red","green","blue"),
lwd=c(2,1,1),
bty="n")
从图上中数据的可信区间严重重合也可以看出来两者并没有交互。
下面来演示连续变量的交互可视化分析,使用我们的臭氧数据(公众号回复:臭氧可以获得数据)
我们先导入R包和臭氧数据
library(splines)
be <- read.spss("E:/r/test/ozone.sav",
use.value.labels=F, to.data.frame=T)
数据中有七个变量,ozon每日臭氧水平为结局变量,Inversion base height(ibh)反转基准高度,Pressure gradient (mm Hg) 压力梯度(mm Hg),Visibility (miles) 能见度(英里),Temperature (degrees F) 温度(华氏度),Day of the year日期,vh我也不知道是什么,反正就是一参数,这里所有的变量都是连续的。
假设我们想知道反转基准高度和温度对臭氧浓度有无存在交互影响
fit <- lm(ozon ~ vh +ns(ibh, df=2)*ns(temp, df=2), data=be)
summary(fit)
visreg2d(fit, "ibh", "temp")
visreg2d(fit, "ibh", "temp", color.palette=colorRampPalette(c("black", "white", "purple")))
visreg2d(fit,"ibh", "temp", plot.type="persp")
plot(visreg(fit,xvar = "ibh",by="temp",plot=F),xlab="age",ylab="log(Probability)",
overlay = T,partial = F,rug=F,,line=list(lty=1:6))
legend("topright",
c("temp41","temp62","temp81"),
lty=c(1,1,1),
col=c("red","green","blue"),
lwd=c(2,1,1),
bty="n")