从技术角度看交互作用分析
从技术角度看交互作用分析
从技术角度看交互作用分析,帮助理解和实现交互作用的分析和展示。
一、分类变量之间的交互作用分析-Publish包
整个Publish包是为了包装数据分析结果,其中有一个亚组分析的函数(subgroupAnalysis)可以用于进行交互作用分析,可以通过P interaction结果,表明变量间是否存在交互作用。支持分类变量间的交互作用分析,其中一个变量可以是多分类变量。
library(Publish)
library(survival)
data(traceR) #get dataframe traceR
data.table::setDT(traceR)
traceR[,':='(wmi2=factor(wallMotionIndex<0.9,levels=c(TRUE,FALSE),
labels=c("bad","good")),
abd2=factor(abdominalCircumference<95, levels=c(TRUE,FALSE),
labels=c("slim","fat")))]
traceR[,sex:=as.factor(sex)] # all subgroup variables needs to be factor
traceR[observationTime==0,observationTime:=1]
# remove missing covariate values
traceR=na.omit(traceR)
head(traceR)
#这是一个比较典型的例子,探索treatment(二分类)和其它分类变量(二分类和多分类)之间的交互作用
# univariate analysis of smoking in subgroups of age and sex
# Main regression analysis is a simple/univariate Cox regression
fit_cox <- coxph(Surv(observationTime,dead)~treatment,data=traceR)
sub_cox <- subgroupAnalysis(fit_cox,traceR,treatment="treatment",
subgroups=c("smoking","sex","wmi2","abd2"))
sub_cox
二、有一个或两个是连续变量的交互作用分析-interactions包
如果交互作用的两个变量中有一个是连续变量,需要用到interactions包,另外一个变量可以多分类变量或者是连续变量,这个包也提供了可视化函数来展示分析结果。
library(tidyverse)
library(interactions)
data(mtcars)
mtcars$cyl <- as.factor(mtcars$cyl)
#hp 马力, cyl:气缸数
glm_model <- glm(mpg ~ cyl * hp, data = mtcars)
# 使用sim_margins函数
marginal_effects <- sim_margins(glm_model, pred = "hp", modx = "cyl")
tidy(marginal_effects)
# 之前的交互作用图示例
int_plot <- interact_plot(model = glm_model, pred = hp, modx = cyl,
plot.points = TRUE, interval = TRUE,
int.width = 0.5,
main = "Interaction between Cylinders and Horsepower on MPG",
xlab = "Horsepower", ylab = "Miles per Gallon")
print(int_plot)
三、SHAP分析交互作用分析功能
SHAP分析也有分析交互作用的功能,可以通过蜂窝图或热图来可视化变量之间的交互作用,也可以通过依赖图来可视化两个变量之间的交互作用,因为SHAP分析一下给出了所有变量之间的关系,可以用来筛查变量间的交互作用。但是,缺乏统计学方面的计算不能实现对交互作用的定性。
最后
以上步骤整合在一起,SHAP分析中对交互作用的筛查,结合传统的使用P值对交互作用进行定性,形成一个相对完整的交互作用分析过程。还有interactionR和epiR包可以用来进行交互作用的分析,要求参与分析的两个变量是二分类变量,可以尝试进行探索。