## run BMEM for mediation analysis
## generate batch file
gen.batch<-function(datafile){
filename<-'batch.txt'
cat("out.txt\n", file=filename)
cat(datafile, file=filename, append=T)
cat("\n", file=filename, append=T)
cat("99999\n", file=filename, append=T)
cat(".95\n", file=filename, append=T)
cat(runif(1), file=filename, append=T)
cat("\n", file=filename, append=T)
cat("1000\n", file=filename, append=T)
}
runone<-function(datafile, resfile){
for (i in 1001:2000){
file<-paste(datafile,'-',i,'.txt', sep='')
gen.batch(file)
system("./bmem < batch.txt")
temp<-scan('out.txt')
cat(c(i, temp), file=resfile, append=T)
cat("\n", file=resfile,append=T)
}
}
for (ab in c(0, .14, .39, .59)){
for (N in c(50,100,200)){
for (miss in c('MCAR','MNAR1', 'MNAR2')){
for (rate in c(.1,.2,.4) ){
for (av in c('av','noav')){
## folder name
data.name<-paste('/pscratch/zzhang4/Private/mediation/data/ab',ab,'N',N,miss,'M',rate
,'/data-',av,sep='')
res.name<-paste('ab',ab,'N',N,miss,'M',rate,av,'-em-results.txt',sep='')
runone(data.name, res.name)
}
}
}
for (miss in 'MAR'){
for (rate in c(1.5, 4, 9) ){
for (av in c('av','noav')){
## folder name
data.name<-paste('/pscratch/zzhang4/Private/mediation/data/ab',ab,'N',N,miss,'M',rate
,'/data-',av,sep='')
res.name<-paste('ab',ab,'N',N,miss,'M',rate,av,'-em-results.txt',sep='')
runone(data.name, res.name)
}
}
}
}
}
Process the results
runone<-function(filename, par){
temp<-read.table(filename, fill=T)
if (dim(temp)[2]==1){
c(0,0,0)
}else{
par<-par*par
if (par==0){
bias<-100*(mean(temp[,2],na.rm=T)-par)
}else{
bias<-100*(mean(temp[,2],na.rm=T)-par)/par
}
n<-dim(temp)[1]
cvg<-mean((temp[,6]<par) & (temp[,7]>par), na.rm=T)*100
power<-mean((temp[,6]>0) | (temp[,7]<0), na.rm=T)*100
c(bias, cvg, power)
}
}
for (ab in c(0, .14, .39, .59)){
for (N in c(50,100,200)){
for (miss in c('MCAR','MNAR1', 'MNAR2')){
for (rate in c(.1,.2,.4) ){
for (av in c('av','noav')){
res.name<-paste('ab',ab,'N',N,miss,'M',rate,av,'-em-results.txt',sep='')
if (file.exists(res.name)){
cat(ab, N, miss, rate, av, runone(res.name, ab),'\n') }
}
}
}
for (miss in 'MAR'){
for (rate in c(1.5, 4, 9) ){
for (av in c('av','noav')){
res.name<-paste('ab',ab,'N',N,miss,'M',rate,av,'-em-results.txt',sep='')
if (file.exists(res.name)){
cat(ab, N, miss, rate, av, runone(res.name, ab),'\n') }
}
}
}
}
}