조건부간접효과중 가장 인기 있는 model 7을 해보장

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

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

#개수 구하기

boot7_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], data = nnk)
    s2<-summary(k2)
    coem2<-s2$coefficients
    eff2<-as.data.frame(coem2)
    eff5<-eff2[nrow(eff2),1]
    eff*eff5 #indirect
    k3<-lm(nnk[,mmm] ~ nnk[,xxx]+ nnk[,www] + nnk[,xxx]*nnk[,www], data = nnk)
    s3<-summary(k3)
    coem3<-s3$coefficients
    eff2_1<-as.data.frame(coem3)
    eff7<-eff2_1[nrow(eff2_1),1]
    
    nnk2<-nnk
    nnk2[,www]<-ifelse(nnk2[,www]> mean(nnk2[,www])+sd(nnk2[,www]), nnk2[,www], NA)
    nnk2<-na.omit(nnk2)
    k3_1<-lm(nnk2[,yyy] ~ nnk2[,xxx], data = nnk2)
    s3_1<-summary(k3_1)
    coem3_1<-s3_1$coefficients
    effhx<-as.data.frame(coem3_1)
    effhx<-effhx[nrow(effhx),1]
    k3_2<-lm(nnk2[,yyy] ~ nnk2[,xxx] + nnk2[,mmm], data = nnk2)
    s3_2<-summary(k3_2)
    coem3_2<-s3_2$coefficients
    effhm<-as.data.frame(coem3_2)
    effhm<-effhm[nrow(effhm),1]
    effh<-effhx*effhm
    

    nnk3<-nnk
    nnk3[,www]<-ifelse(nnk3[,www]< mean(nnk3[,www]) - sd(nnk3[,www]), nnk3[,www], NA)
    nnk3<-na.omit(nnk3)
    k4_1<-lm(nnk3[,yyy] ~ nnk3[,xxx], data = nnk3)
    s4_1<-summary(k4_1)
    coem4_1<-s4_1$coefficients
    efflx<-as.data.frame(coem4_1)
    efflx<-efflx[nrow(efflx),1]
    k4_2<-lm(nnk3[,yyy] ~ nnk3[,xxx] + nnk3[,mmm], data = nnk3)
    s4_2<-summary(k4_2)
    coem4_2<-s4_2$coefficients
    efflm<-as.data.frame(coem4_2)
    efflm<-efflm[nrow(efflm),1]
    effl<-efflx*efflm
    
    
    meff<-eff*eff5
    moff<-eff7
    index_mo<-meff*moff
    efff<-c(meff, moff, index_mo, effh, effl)
    efff<-matrix(efff, ncol = 5)
    efff
}

boot7_1(1,2,3,4,d)
##         [,1]    [,2]     [,3]     [,4]      [,5]
## [1,] 0.79773 2.05952 1.642941 4.663347 -2.620161

#boot결과 써보기 솔직히 너무 정보가 많아서 쓰기 귀찮아진다. 다른거 해야겠다.

boot7<-function(xxx,mmm,www,yyy,d,bootnum){
  ###estimate a*m
  boot7_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], data = nnk)
    s2<-summary(k2)
    coem2<-s2$coefficients
    eff2<-as.data.frame(coem2)
    eff5<-eff2[nrow(eff2),1]
    eff*eff5 #indirect
    k3<-lm(nnk[,mmm] ~ nnk[,xxx]+ nnk[,www] + nnk[,xxx]*nnk[,www], data = nnk)
    s3<-summary(k3)
    coem3<-s3$coefficients
    eff2_1<-as.data.frame(coem3)
    eff7<-eff2_1[nrow(eff2_1),1]
    
    nnk2<-nnk
    nnk2[,www]<-ifelse(nnk2[,www]> mean(nnk2[,www])+sd(nnk2[,www]), nnk2[,www], NA)
    nnk2<-na.omit(nnk2)
    k3_1<-lm(nnk2[,yyy] ~ nnk2[,xxx], data = nnk2)
    s3_1<-summary(k3_1)
    coem3_1<-s3_1$coefficients
    effhx<-as.data.frame(coem3_1)
    effhx<-effhx[nrow(effhx),1]
    k3_2<-lm(nnk2[,yyy] ~ nnk2[,xxx] + nnk2[,mmm], data = nnk2)
    s3_2<-summary(k3_2)
    coem3_2<-s3_2$coefficients
    effhm<-as.data.frame(coem3_2)
    effhm<-effhm[nrow(effhm),1]
    effh<-effhx*effhm
    

    nnk3<-nnk
    nnk3[,www]<-ifelse(nnk3[,www]< mean(nnk3[,www]) - sd(nnk3[,www]), nnk3[,www], NA)
    nnk3<-na.omit(nnk3)
    k4_1<-lm(nnk3[,yyy] ~ nnk3[,xxx], data = nnk3)
    s4_1<-summary(k4_1)
    coem4_1<-s4_1$coefficients
    efflx<-as.data.frame(coem4_1)
    efflx<-efflx[nrow(efflx),1]
    k4_2<-lm(nnk3[,yyy] ~ nnk3[,xxx] + nnk3[,mmm], data = nnk3)
    s4_2<-summary(k4_2)
    coem4_2<-s4_2$coefficients
    efflm<-as.data.frame(coem4_2)
    efflm<-efflm[nrow(efflm),1]
    effl<-efflx*efflm
    
    
    meff<-eff*eff5
    moff<-eff7
    index_mo<-meff*moff
    efff<-c(meff, moff, index_mo, effh, effl)
    efff<-matrix(efff, ncol = 5)
    efff
  }
  k<-1
  l<-matrix(rep(NA,bootnum*5),ncol = 5)
  l<-as.data.frame(l)
  repeat{
    l[k,]<-boot7_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))
  ci3<-quantile(l[,3],probs = c(.001,0.01,0.05,0.10,0.90,0.95,0.99,.999))
  ci4<-quantile(l[,4],probs = c(.001,0.01,0.05,0.10,0.90,0.95,0.99,.999))
  ci5<-quantile(l[,5],probs = c(.001,0.01,0.05,0.10,0.90,0.95,0.99,.999))
  
  r1<-summary(lm(d[,mmm]~ d[,xxx] + d[,www] + d[,xxx]*d[,www], data = d))
  r11<-r1$adj.r.squared
  r2<-summary(lm(d[,yyy]~ d[,xxx] + d[,mmm] + d[,www] + d[,xxx]*d[,www], data = d))
  r12<-r2$adj.r.squared
  
  kmkmkmkm<-list(c(mean(l[,1]),sd(l[,1])),ci1, c(mean(l[,2]),sd(l[,2])),ci2, c(mean(l[,3]),sd(l[,3])),ci3, c(mean(l[,4]),sd(l[,4])),ci4, c(mean(l[,5]),sd(l[,5])),ci5, r11,r12)
  names(kmkmkmkm)<-c("mediation_mean_BootSE", "mediation_CI","moderation_mean_BootSE", "moderation_CI","index_mean_BootSE", "index_CI","+1sd_indirect_mean_BootSE", "+1sd_indirect_CI","-1sd_indirect_mean_BootSE", "-1sd_indirect_CI",
                     "mediation r^2", "total r^2")
  kmkmkmkm
}
boot7(1,2,3,4,d,5000)
## $mediation_mean_BootSE
## [1] 1.2735563 0.3653454
## 
## $mediation_CI
##      0.1%        1%        5%       10%       90%       95%       99%     99.9% 
## 0.2509987 0.4695889 0.6928572 0.8094277 1.7451325 1.8786458 2.1727903 2.4209386 
## 
## $moderation_mean_BootSE
## [1] 1.8592766 0.1394208
## 
## $moderation_CI
##     0.1%       1%       5%      10%      90%      95%      99%    99.9% 
## 1.330371 1.502711 1.611950 1.675343 2.027867 2.070595 2.146376 2.239904 
## 
## $index_mean_BootSE
## [1] 2.3841682 0.7621835
## 
## $index_CI
##      0.1%        1%        5%       10%       90%       95%       99%     99.9% 
## 0.4181733 0.8150223 1.2302829 1.4286278 3.3949870 3.6937418 4.2901225 5.0475814 
## 
## $`+1sd_indirect_mean_BootSE`
## [1] 5.126119 1.344359
## 
## $`+1sd_indirect_CI`
##        0.1%          1%          5%         10%         90%         95% 
##  0.03462165  1.58517410  3.00820516  3.62764011  6.63770027  7.22775884 
##         99%       99.9% 
##  8.87115018 11.89170854 
## 
## $`-1sd_indirect_mean_BootSE`
## [1] -0.9530577  1.1246842
## 
## $`-1sd_indirect_CI`
##      0.1%        1%        5%       10%       90%       95%       99%     99.9% 
## -4.320002 -3.136619 -2.409837 -2.127015  0.788888  1.225049  1.762490  2.420024 
## 
## $`mediation r^2`
## [1] 0.8062191
## 
## $`total r^2`
## [1] 0.9098085