全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
1411 1
2019-04-22
install.packages("foreach")
install.packages("doParallel")

######################################################################################prepare
rm(list = ls())

if(TRUE){
library(foreach)#并行计算
library(doParallel)#实现多核并行
no_cores<- detectCores(logical=FALSE)+15
cl<- makeCluster(no_cores)
registerDoParallel(cl)
}

###function:compute q2
q2_estimation<- function(xi_0,lam,m0,p,nn,k,xm,ym,nm){

  epsilon1=0.001
  sigma<- matrix(0,nrow=p+1,ncol=p+1)
  xi<- rep(0,p+1)
  z<- rep(0,m0*nn)
  zeta<- rep(0,m0*nn)
  w<- rep(0,m0*nn)
  ww<- matrix(0,nrow=m0*nn,ncol=m0*nn)

  l=0
  flag=0
  while(flag==0){
    l<- l+1
    xi0<- xi
    for(i in 1:m0){
      for(j in 1:nn){
        s<- (i-1)*nn+j
        zeta[s]<- sum(xm[s,]*xi)
        bp<- 1.0/(exp(-zeta[s])+1.0)
        z[s]<- zeta[s]+(ym[i,j]-nm[i,j]*bp)/(nm[i,j]*bp*(1.0-bp))
        w[s]<- lam*((1.0-lam)^(m0-i))*nm[i,j]*bp*(1.0-bp)
        ww[s,s]<- w[s]
      }
    }
    sigma<- t(xm)%*%ww%*%xm
    xi<- solve(sigma)%*%t(xm)%*%ww%*%z
    print(xi)
    ###
    absxi<- xi-xi0
    s1=0.0
    s2=0.0
    for(i in 1:(p+1)){
      s1<- s1+(absxi[i])^2
      s2<- s2+(xi0[i])^2
    }
    eps<- (sqrt(s1))/(sqrt(s2))
    ###
    if(eps<epsilon1 || l==30) flag=1
  }
  result<- (2-lam)/lam*t(xi-xi_0)%*%sigma%*%(xi-xi_0)
  return(result)
}


###function: compute run length
rlfun<- function(mu0,cov0,alpha,belta,lam,m0,p,a1,b1,nn,climit,tau,shift,case){
  library(MASS)
  kmax=3000
  xi_0<- rep(0,p+1)
  xi_0[1]<- alpha
  xi_0[2:(p+1)]<- belta[1:p]

  alpha1<- alpha+shift
  belta1<- belta
  belta1[1]<- belta[1]+shift
  mu1<- mu0
  mu1[1]<- mu0[1]+shift

  x<- matrix(0,nrow=nn,ncol=p)
  y<- rep(0,nn)
  n<- rep(0,nn)
  ew_x<- rep(0,p)

  xs<- matrix(0,nrow=kmax*nn,ncol=p)
  ys<- matrix(0,nrow=kmax,ncol=nn)
  ns<- matrix(0,nrow=kmax,ncol=nn)

  k=0
  flag=0
  rl=0
  while(k<kmax && flag==0){
    k<- k+1
    print(k)
    x<- mvrnorm(nn,rep(0,p),cov0)

    for(i in 1:nn){
      if(k<=(m0+tau)){
        x[i,]<- x[i,]+mu0
        ab<- alpha+sum(x[i,]*belta)
      }else{
        switch (case,
                {
                  x[i,]<- x[i,]+mu0
                  ab<- alpha1+sum(x[i,]*belta)
                },
                {
                  x[i,]<- x[i,]+mu0
                  ab<- alpha+sum(x[i,]*belta1)
                },
                {
                  x[i,]<- x[i,]+mu1
                  ab<- alpha+sum(x[i,]*belta)
                }
        )
      }
      bp<- 1/(exp(-ab)+1.0)
      n[i]=5
      y[i]<- rbinom(1,n[i],bp)
      xs[(k-1)*nn+i,]<- x[i,]
      ys[k,i]<- y[i]
      ns[k,i]<- n[i]
    }

    if(k>m0){
      m<- k-m0
      ew_x<- mu0
      xm<- matrix(1.0,nrow=m0*nn,ncol=p+1)
      ym<- matrix(0,nrow=m0,ncol=nn)
      nm<- matrix(0,nrow=m0,ncol=nn)
      xbar<- rep(0,p)
      for(i in 1:m0){
        xm[((i-1)*nn+1):(i*nn),2:(p+1)]=xs[((m+i-1)*nn+1):((m+i)*nn),1:p]
        ym[i,]=ys[m+i,]
        nm[i,]=ns[m+i,]
        for(j in 1:p){
          xbar[j]<- 1.0*sum(xs[((m+i-1)*nn+1):((m+i)*nn),j])/nn
        }
        ew_x<- (1.0-lam)*ew_x+lam*xbar
      }
      q1<- nn*((2-lam)/lam)*(t(ew_x-mu0))%*%(solve(cov0))%*%(ew_x-mu0)
      q2<- q2_estimation(xi_0,lam,m0,p,nn,k,xm,ym,nm)
      q<- q1+q2
      if(q>climit) flag=1
    }
  }
  rl<- k
  #print(rl)
  return(rl)
}
###################################################################################main project
#######################################################generate data

arl0=200
smax=500
lam=0.2
delta<- c(0.0,0.05,0.06,0.07,0.1,0.2,0.3,0.5)
#delta<- c(0.0,0.15,0.2,0.25,0.3,0.6,1.0,1.5)
#delta<- c(0.0,0.025,0.03,0.035,0.07,0.12,0.15,0.2)
p=2
nn=20
m0=40
tau=40
case=1

a1=1
b1=30
h0=15.95
#alpha=-2.2
alpha=-2.94
belta=rep(0,p)
belta[1]=1.0
belta[2]=2.0
#belta[2]=1.0

mu0<- rep(0,p)
cov0<- matrix(0,nrow=p,ncol=p)
for(i in 1:p) {
  for(j in 1:p){
    #cov0[i,j]<- ifelse(i==j,0.1,0.0)
     cov0[i,j]<- ifelse(i==j,1.0,0.0)
    #cov0[i,j]<- ifelse(i==j,1,0.5^abs(i-j))
  }
}
#print(cov0)

###############################################find control limit (arl0=370, lambda=0.1)
epsilon=1.0
hl=h0-0.5
hu=h0+0.5

arl=0
while(abs(arl-arl0)>epsilon){
  print("***********************************")
  climit=(hl+hu)/2
  print(climit)
  count=0
  arl=0
  rlvec=rep(0,smax)
  rlvec<- foreach(s=1:smax, .combine="c") %dopar%
    rlfun(mu0,cov0,alpha,belta,lam,m0,p,a1,b1,nn,climit,tau=0,shift=0,case=1)

  count=0
  rlvecc=rep(0,smax)
  for(s in 1:smax){
    if(rlvec[s]>m0){
      count=count+1
      rlvecc[count]=rlvec[s]-m0
      #print(rlvecc[count])
    }
  }
  arl=mean(rlvecc[1:count])
  print(arl)
  ic_out<-cbind(arl,climit)
  if(arl>=arl0){
    hu=climit
  }else{
    hl=climit
  }
}
write.table(ic_out,file="C:/Users/Administrator/Desktop/n=5_ic_climits.txt",row.names=F,quote=F,sep="\t")

###################################################compute arl1 (arl0=370, lambda=0.1)
arl1<- rep(0,length(delta))
sdrl1<- rep(0,length(delta))

for(i in 1:length(delta)){  
shift=delta[i]
rlvec=rep(0,smax)
rlvec<- foreach(s=1:smax, .combine="c") %dopar%
   rlfun(mu0,cov0,alpha,belta,lam,m0,p,a1,b1,nn,climit,tau,shift,case)

count=0
rlvecc=rep(0,smax)
for(s in 1:smax){
   if(rlvec[s]>(m0+tau)){
     count=count+1
     rlvecc[count]=rlvec[s]-(m0+tau)
     #print(rlvecc[count])
   }
}
#write.table(rlvecc[1:count],file="C:/Users/Administrator/Desktop/n=5_oc_rls.txt",row.names=F,quote=F)
#arl[i]=1.0*sum(rlvecc[1:count])/count
#sdrl[i]=sqrt(1.0*sum((rlvecc[1:count]-arl)^2)/count)
arl1[i]=mean(rlvecc[1:count])
sdrl1[i]=sd(rlvecc[1:count])
print("***********************************")
print(arl1[i])
print(sdrl1[i])   
}

oc_out<- cbind(arl1,sdrl1)
write.table(oc_out,file="C:/Users/Administrator/Desktop/n=5_oc_arl&sdrl.txt",row.names=F,quote=F,sep="\t")

附件列表

GLM-EWMA.txt

大小:5.96 KB

 马上下载

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2019-4-23 15:45:32
您好,如果您的求助没有解决,请到项目交易发布需求,会有更快更专业的用户帮助您 https://bbs.pinggu.org/prj/
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群