헤이즈 모델 다 만들어 보고 싶다. 1번 해보장

#데이터 만들기

library(stats)
#model 1
x<-rnorm(1000)
w<-rnorm(1000)+ x^2
y<-rnorm(1000, 0,1)  + w*x
co1<-rnorm(1000)

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

#함수1 조절 변수의 CI만 나오게 해봄. 일단 estimates만 뽑아내는 함수 만듬. 함수 입력값은 각 변수의 열 숫자를 쓰게 해봄. 복원추출로 하는거라 할때마다 살짝씩 다름

boot1_1<-function(xxx,mmm,yyy,d){
    n<-sample(1:nrow(d),nrow(d),replace = T)
    nnk<-d[n,]
    nnk<-as.data.frame(nnk)
    k2<-lm(nnk[,yyy]~ nnk[,xxx]+nnk[,mmm] + nnk[,xxx]*nnk[,mmm], data=nnk)
    s2<-summary(k2)
    coem<-s2$coefficients
    eff<-as.data.frame(coem)
    eff<-eff[nrow(eff),1]
    eff}
boot1_1(1,2,3,d)
## [1] 0.9756724

##boot 반복구문으로 CI 를 구해보장 bootnum은 몇번 반복할지이고 d는 데이터임

boot1<-function(xxx,mmm,yyy,d,bootnum){
  ###estimate a*m
  boot1_1<-function(xxx,mmm,yyy,d){
    n<-sample(1:nrow(d),nrow(d),replace = T)
    nnk<-d[n,]
    nnk<-as.data.frame(nnk)
    k2<-lm(nnk[,yyy]~ nnk[,xxx]+nnk[,mmm] + nnk[,xxx]*nnk[,mmm], data=nnk)
    s2<-summary(k2)
    coem<-s2$coefficients
    eff<-as.data.frame(coem)
    eff<-eff[nrow(eff),1]
    eff}
  k<-1
  l<-matrix(rep(NA,bootnum),ncol = 1)
  l<-as.data.frame(l)
  repeat{
    l[k,]<-boot1_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))
  kmkmkmkm<-list(c(mean(l[,1]),sd(l[,1])),ci1)
  names(kmkmkmkm)<-c("moderation_mean_BootSE", "moderation_CI")
  kmkmkmkm
}
boot1(1,2,3,d,1000)
## $moderation_mean_BootSE
## [1] 0.99010252 0.01310065
## 
## $moderation_CI
##      0.1%        1%        5%       10%       90%       95%       99%     99.9% 
## 0.9544036 0.9606966 0.9685565 0.9726658 1.0066389 1.0120625 1.0207615 1.0248795

##다른표기 생각해보니 +1sd, -1sd로 나눠서 x->y 개수 구하는 경향이 있으니 그 값도 넣어보장

##model 1 +sd,-sd
boot1r<-function(xxx,mmm,yyy,d,bootnum){
  ###estimate a*m
  boot1_1<-function(xxx,mmm,yyy,d){
    n<-sample(1:nrow(d),nrow(d),replace = T)
    nnk<-d[n,]
    nnk<-as.data.frame(nnk)
    nnk2<-nnk
    nnk3<-nnk
    k2<-lm(nnk[,yyy]~ nnk[,xxx]+nnk[,mmm] + nnk[,xxx]*nnk[,mmm], data=nnk)
    s2<-summary(k2)
    coem<-s2$coefficients
    eff<-as.data.frame(coem)
    eff<-eff[nrow(eff),1]
    
    nnk2[,mmm]<-ifelse(nnk2[,mmm]> mean(nnk2[,mmm])+sd(nnk2[,mmm]), nnk2[,mmm], NA)
    nnk2<-na.omit(nnk2)
    k3<-lm(nnk2[,yyy] ~ nnk2[,xxx], data = nnk2)
    s3<-summary(k3)
    coem2<-s3$coefficients
    effh<-as.data.frame(coem2)
    effh<-effh[nrow(effh),1]
    
    nnk3[,mmm]<-ifelse(nnk3[,mmm] < (mean(nnk3[,mmm])-sd(nnk3[,mmm])), nnk3[,mmm], NA)
    nnk3<-na.omit(nnk3)
    k4<-lm(nnk3[,yyy] ~ nnk3[,xxx], data = nnk3)
    s4<-summary(k4)
    coem3<-s4$coefficients
    effl<-as.data.frame(coem3)
    effl<-effl[nrow(effl),1]
    
    effff<-c(eff, effh,effl)
    effff<-matrix(effff,ncol=3)
    effff}
  k<-1
  l<-matrix(rep(NA,bootnum*3),ncol = 3)
  l<-as.data.frame(l)
  repeat{
    l[k,]<-boot1_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))
  ci3<-quantile(l[,3],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,
                 c(mean(l[,3]),sd(l[,3])),ci3)
  names(kmkmkmkm)<-c("moderation_mean_BootSE", "moderation_CI","+1SD_mean_BootSE", "+1SD_CI","-1SD_mean_BootSE", "-1SD_CI")
  kmkmkmkm
}
boot1r(1,2,3,d,10)
## $moderation_mean_BootSE
## [1] 0.99529671 0.01300555
## 
## $moderation_CI
##      0.1%        1%        5%       10%       90%       95%       99%     99.9% 
## 0.9765921 0.9771685 0.9797304 0.9829328 1.0128686 1.0160875 1.0186625 1.0192419 
## 
## $`+1SD_mean_BootSE`
## [1] 4.6345749 0.1970077
## 
## $`+1SD_CI`
##     0.1%       1%       5%      10%      90%      95%      99%    99.9% 
## 4.316725 4.327053 4.372954 4.430331 4.867672 4.917263 4.956936 4.965862 
## 
## $`-1SD_mean_BootSE`
## [1] -1.085306  0.200605
## 
## $`-1SD_CI`
##       0.1%         1%         5%        10%        90%        95%        99% 
## -1.3799588 -1.3694278 -1.3226233 -1.2641177 -0.8033253 -0.7619762 -0.7288970 
##      99.9% 
## -0.7214541