搜索
人大经济论坛 附件下载

附件下载

所在主题:
文件名:  GLM-EWMA.txt
资料下载链接地址: https://bbs.pinggu.org/a-2796002.html
附件大小:
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")



    熟悉论坛请点击新手指南
下载说明
1、论坛支持迅雷和网际快车等p2p多线程软件下载,请在上面选择下载通道单击右健下载即可。
2、论坛会定期自动批量更新下载地址,所以请不要浪费时间盗链论坛资源,盗链地址会很快失效。
3、本站为非盈利性质的学术交流网站,鼓励和保护原创作品,拒绝未经版权人许可的上传行为。本站如接到版权人发出的合格侵权通知,将积极的采取必要措施;同时,本站也将在技术手段和能力范围内,履行版权保护的注意义务。
(如有侵权,欢迎举报)
二维码

扫码加我 拉你入群

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

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

GMT+8, 2026-1-15 18:24