中介变量和因变量为分类变量的中介模型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$心血管)
#判断变量是否为1
data$心血管 <- 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);因此我猜测这些就是结果变量为二分类时,因变量不同取值的直接效应,间接效应,中介效应占比。
下期分享因变量为生存数据的中介效应如何实现,这期就到这里吧。。。。