中介变量和因变量为分类变量的中介模型R实现

学术   2024-08-04 12:42   陕西  

中介变量和因变量为分类变量的中介模型R实现    

 

中介变量

 因变量

2分类变量

2分类变量

连续变量

2分类变量

2分类变量

连续变量

连续变量

生存时间/2分类变量

2分类变量

生存时间/2分类变量

         

 

接着上一期的分享,这一期分享一下中介变量和因变量不同类型时候拟合中介模型:

所有的自变量都是连续变量:

1.中介变量和因变量都是2分类:  

##加载R包

#中介包

library(mediation)

#载入数据

data <- read.csv("C:/Users/12974/Desktop/百度经验/03R语言图形绘制/01R绘制限制性立方样条图/cc1.csv", as.is = TRUE, header = TRUE, sep = ",", fileEncoding='utf-8')

#自变量:wenhua,连续变量

#中介  :bmi,二分类变量

#因变量:心血管,二分类变量

特别注意:中介变量必须变为1/0的数值变量,并且不能转为因子,不然后续一直会出现下面这个错误:    

# 生成二分类新变量data$bmi1 <- ifelse(data$bmi > 24, 1, 0)          # complete.cases函数可以用来删除特定变量缺失的行#data <- data[complete.cases(data$wenhua, data$bmi, data$心血管), ]           # 运行模型:这里注意两个模型都用glm拟合#自变量和中介变量的logistic模型med.fit <- glm(bmi1 ~ wenhua, data = data, family = binomial())#自变量、中介变量和因变量的logistic模型out.fit <- glm(心血管 ~ bmi1+wenhua, data = data, family = binomial())           # 执行中介效应分析set.seed(1000)#设置随机种子med.out <- mediate(med.fit, out.fit,                   treat = "wenhua", #自变量                   mediator = "bmi1",#中介变量                    robustSE = TRUE,                    sims = 10)#重复抽样10次summary(med.out)    

其他几行我的理解是中介变量bmi取0和1时分别的直接效应、间接效应、中介效应占比;所以有6行。

论文里面大家写出我画的这几行就行了,那么有的孩子还想得到OR值,这个自己算就行了

比如总效应:-0.01315(95%CI:-0.021793,-0.01)

相应的OR值为:exp(-0.01315)  95%CI:exp(-0.021793),exp(-0.01)

2.中介变量连续变量,因变量2分类变量   

#自变量:bmi,连续变量

#中介  :wenhua,连续变量

#因变量:心血管,二分类变量

 

        #bmi变为四分类的连续变量data$bmi1 <- NA  # 先为age1变量创建一个空的向量               data <- within(data, {  bmi1[bmi < 18.5] = 1  bmi1[bmi >= 18.5 & bmi < 24] = 2  bmi1[bmi >= 24 & bmi < 28] = 3  bmi1[bmi >= 28] = 4})           # 运行模型med.fit <- glm(wenhua~ bmi1, data = data)# 设定参照data$心血管<-as.factor(data$心血管)data$心血管 <- relevel(data$心血管, ref = "0")out.fit <- glm(心血管 ~ bmi1+wenhua, data = data, family = binomial())           # 执行中介效应分析set.seed(1000)#设置随机种子med.out <- mediate(med.fit, out.fit,                   treat = "bmi1",                    mediator = "wenhua",                    robustSE = TRUE,                    sims = 10)summary(med.out)    

这个时候中介变量明明是连续变量,但结果还是和第一种情况一样的,所以

ACME (control)  ACME (treated)    ADE (control)  ADE (treated)  

Prop. Mediated (control) Prop. Mediated (treated) 里面的control和treated大有可能说的因变量的两个取值。

有大神的话,这里给解释一下??????????????????????????????

3.中介变量2分类变量,因变量连续变量   

#自变量:wenhua,连续变量

#中介  :心血管,二分类变量

#因变量:bmi,连续变量

#bmi变为四分类的连续变量data$bmi1 <- NA  # 先为age1变量创建一个空的向量               data <- within(data, {  bmi1[bmi < 18.5] = 1  bmi1[bmi >= 18.5 & bmi < 24] = 2  bmi1[bmi >= 24 & bmi < 28] = 3  bmi1[bmi >= 28] = 4})#中介变量变为1/0数值变量data$心血管<-as.numeric(data$心血管)#判断变量是否为1data$心血管 <- as.integer(data$心血管 == 1)# 运行模型med.fit <- glm(心血管 ~ wenhua, data = data, family = binomial())out.fit <- glm( bmi1~ 心血管+wenhua, data = data)           # 执行中介效应分析set.seed(1000)#设置随机种子med.out <- mediate(med.fit, out.fit,                   treat = "wenhua",                    mediator = "心血管",                    robustSE = TRUE,                    sims = 10)summary(med.out)

         

 

果然,这次因变量为连续变量,所以结果没有了ACME (control)  、ACME (treated)    、ADE (control)  、ADE (treated)   、Prop. Mediated (control) 、Prop. Mediated (treated);因此我猜测这些就是结果变量为二分类时,因变量不同取值的直接效应,间接效应,中介效应占比。    

下期分享因变量为生存数据的中介效应如何实现,这期就到这里吧。。。。    

流病统计与科研学习笔记
流行病与卫生统计学专业主要分享基于SAS、R以及其他统计软件实现各种统计学方法和结果绘图,提高自己的学习能力
 最新文章