## a simple simulation
proc.res<-function(out.file){
output <- suppressWarnings(readLines(out.file))
lnumber <- grep(" X", output)
est<- output[lnumber[2]]
sub('X', '', est)
}
res1<-NULL
res2<-NULL
for (i in 1:1000){
N<-500
x<-rnorm(N)
y<-0*x + rnorm(N)
z<-(x+y)+rnorm(N)
cor(cbind(x,y,z))
x[sample(1:N, N*.3)]<-NA
y[sample(1:N, N*.3)]<-NA
z[z>quantile(z, .7)]<-NA
write.table(cbind(x,y,z), 'testreg.txt', row.names=F, col.names=F, na='.')
system("c:/programs/mplus/mplus reg.inp",show.output.on.console=F)
temp1<-proc.res('reg.out')
res1<-cbind(res1, temp1)
system("c:/programs/mplus/mplus reg-aux.inp",show.output.on.console=F)
temp2<-proc.res('reg-aux.out')
res2<-cbind(res2, temp2)
cat(i, '\n')
}
write.table(res1, 'res1.txt', row.names=F, col.names=F, quote=F)
write.table(res2, 'res2.txt', row.names=F, col.names=F, quote=F)
res1<-scan('res1.txt')
res1<-array(res1, dim=c(4,1000))
res2<-scan('res2.txt')
res2<-array(res2, dim=c(4,1000))
apply(res1,1,mean)
apply(res2,1,mean)
library(norm)
library(MASS)
library(mvtnorm)
N<-500
r<-.9
set.seed(0)
allres<-NULL
for (i in 1:1000){
sigma <- matrix(c(1,0.3,0.3,1),2,2)
yx <- mvrnorm(N, rep(0,2),sigma)
yx[sample(1:N, N*r), 1]<-NA
yx[yx[, 2]>quantile(yx[,2], 1-r), 2]<-NA
m<-prelim.norm(yx)
est<-em.norm(m)
res<-getparam.norm(m, est)
res<-c(unlist(res), mean(yx[,1], na.rm=T), var(yx[,1], na.rm=T))
allres<-rbind(allres, res)
}
apply(allres, 2, mean)
## function to get the likelihood function
llik<-function(x, par){
#par[1]: mu1
#par[2]: mu2
#par[3]: s1
#par[4]: s2
#par[5]: s12
mu<-par[1:2]
sigma <- array(c(par[3], par[5], par[5], par[4]), dim=c(2,2))
n<-dim(x)[1]
l<-0
for (i in 1:n){
if ((!is.na(x[i,1])) & (!is.na(x[i,2]))){
l<-l + dmvnorm(x[i,], mu, sigma, log=T)
}
if ((!is.na(x[i,1])) & (is.na(x[i,2]))){
l<-l + dnorm(x[i,1], par[1], sqrt(par[3]), log=T)
}
if ((is.na(x[i,1])) & (!is.na(x[i,2]))){
l<-l + dnorm(x[i,2], par[2], sqrt(par[4]), log=T)
}
}
l
}
nlm(llik, c(0,0,1,1,0), x=yx)