5번 모델이다. 사실 쓰는 사람을 못봤다.

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

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

조건부 직접효과…. 이걸 써서 가설 검정을 할 게 있나…? 그래도 있으니 써본다…

boot5<-function(xxx,mmm,www,yyy,d,bootnum){
  ###estimate a*m
  boot5_1<-function(xxx,mmm,www,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] +nnk[,www] + nnk[,mmm]*nnk[,www], data = nnk)
    s2<-summary(k2)
    coem2<-s2$coefficients
    eff2<-as.data.frame(coem2)
    eff5<-eff2[nrow(eff2),1]
    eff3<-eff2[nrow(eff2)-2,1]
    meff<-eff*eff3
    dieff<-eff5
    efff<-c(meff, dieff)
    efff<-matrix(efff, ncol = 2)
    efff
  }
  k<-1
  l<-matrix(rep(NA,bootnum*2),ncol = 2)
  l<-as.data.frame(l)
  repeat{
    l[k,]<-boot5_1(xxx,mmm,www,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("mediation_mean_BootSE", "mediation_CI","moderation_mean_BootSE", "moderation_CI" )
  kmkmkmkm
}
boot5(1,2,3,4,d,1000)
## $mediation_mean_BootSE
## [1] 0.9125814 0.1421626
## 
## $mediation_CI
##      0.1%        1%        5%       10%       90%       95%       99%     99.9% 
## 0.5200137 0.5959402 0.6851873 0.7307531 1.1017179 1.1602623 1.2616851 1.4157780 
## 
## $moderation_mean_BootSE
## [1] 0.54499617 0.07554487
## 
## $moderation_CI
##      0.1%        1%        5%       10%       90%       95%       99%     99.9% 
## 0.2129353 0.3504143 0.4185618 0.4472728 0.6298707 0.6579393 0.7219044 0.7913313