4번 모델이다. 가장 많이 쓰는 매개 모델이다.

#model 4

x<-rnorm(100)
me<-rnorm(100)+ x
y<-rnorm(100, 0,1)  + me
co1<-rnorm(100)

d<-data.frame(x,me,y,co1)

간접효과는 유의하고 직접효과는 유의하지 않았다. 갠저긍로 직접-간접매개 구분 자체가 이상하다 생각하지만 그래도 이쁘게 나왔다(그렇게 나오게 임의로 데이터를 만들었으니 당연하다.)

boot4<-function(xxx,mmm,yyy,d,bootnum){
  ###estimate a*m
  boot4_1<-function(xxx,mmm,yyy,d){
    n<-sample(1:nrow(d),replace = T)
    nnk<-d[n,]
    nnk<-as.data.frame(nnk)
    k1<-lm(nnk[,mmm]~ nnk[,xxx], data=nnk)
    s1<-summary(k1)
    coem<-s1$coefficients
    eff<-as.data.frame(coem)
    eff<-eff[nrow(eff),1]
    k2<-lm(nnk[,yyy] ~ nnk[,xxx]+ nnk[,mmm], data = nnk)
    s2<-summary(k2)
    coem2<-s2$coefficients
    eff2<-as.data.frame(coem2)
    eff3<-as.data.frame(coem2)
    eff2<-eff2[nrow(eff2),1]
    eff3<-eff3[nrow(eff3)-1, 1]
    indi<-eff*eff2
    di<-eff3
    efff<-c(indi,di)
    efff<-matrix(efff, ncol = 2)
    efff
  }
  k<-1
  l<-matrix(rep(NA,bootnum*2),ncol = 2)
  l<-as.data.frame(l)
  repeat{
    l[k,]<-boot4_1(xxx,mmm,yyy,d)
    k<-k+1
    if(k>=bootnum+1) break
  }
  estimates<-list(l)
  ci1<-quantile(l[,1],probs = c(.001,0.01,0.05,0.10,0.90,0.95,0.99,.999))
  ci2<-quantile(l[,2],probs = c(.001,0.01,0.05,0.10,0.90,0.95,0.99,.999))
  kmkmkmkm<-list(c(mean(l[,1]),sd(l[,1])),ci1, c(mean(l[,2]),sd(l[,2])),ci2)
  names(kmkmkmkm)<-c("indirect_mean_BootSE", "indirect_CI",
                     "direct_mean_BootSE", "direct_CI")
  kmkmkmkm
}

boot4(1,2,3,d,1000)
## $indirect_mean_BootSE
## [1] 1.0102746 0.1467172
## 
## $indirect_CI
##      0.1%        1%        5%       10%       90%       95%       99%     99.9% 
## 0.6055365 0.6843508 0.7821000 0.8323691 1.1975599 1.2781653 1.4008436 1.5089090 
## 
## $direct_mean_BootSE
## [1] -0.156218  0.158940
## 
## $direct_CI
##       0.1%         1%         5%        10%        90%        95%        99% 
## -0.6719708 -0.5540935 -0.4226542 -0.3669941  0.0552478  0.1009094  0.1768974 
##      99.9% 
##  0.2456666