lab:r_codes_for_simulation_study_in_experiment_4
## Dec 14, 2008
## Estimating the parameters
est.g34.inv<-function(par, data, cor=TRUE){
x1<-data$x1
x2<-data$x2
## factor correlation matrix
phi<-matrix(c(1, par[1], par[2],
par[1], 1, par[3],
par[2], par[3], 1 ), nrow=3, byrow=T)
## factor residual variance
psi1<-diag(1,9,9)
for (i in 1:9){
psi1[i,i]<-par[3+i]
}
## factor loading matrix
lam11<-diag(1,3,3)
for (i in 1:3){
lam11[i,i]<-par[12+i]
}
lam12<-matrix(par[16:33],nrow=6,byrow=T)
lambda1<-rbind(lam11,lam12)
## the population covariance matrix
sigma1<-lambda1%*%phi%*%t(lambda1)+psi1
## the observed covariance/correlation matrix
if (cor){
S1<-cor(x1)
}else{
S1<-cov(x1)
}
## the likelihood function
n1<-dim(x1)[1]
p1<-dim(x2)[2]
l1<-n1*(log(det(sigma1))+sum(diag(S1%*%solve(sigma1)))-log(det(S1))-p1)/2
## for the second group
## factor residual variance
psi2<-diag(1,9,9)
for (i in 1:9){
psi2[i,i]<-par[33+i]
}
## factor loading matrix
lam21<-diag(1,3,3)
for (i in 1:3){
lam21[i,i]<-par[43+i]
}
lam22<-matrix(par[46:63],nrow=6,byrow=T)
lambda2<-rbind(lam21,lam22)
## the population covariance matrix
sigma2<-lambda2%*%phi%*%t(lambda2)+psi2
## the observed covariance/correlation matrix
if (cor){
S2<-cor(x2)
}else{
S2<-cov(x2)
}
## the likelihood function
n2<-dim(x2)[1]
p2<-dim(x2)[2]
l2<-n2*(log(det(sigma2))+sum(diag(S2%*%solve(sigma2)))-log(det(S2))-p2)/2
l1+l2
}
## estimate the model with different factor correlation matrices
est.g34.v<-function(par, data, cor=TRUE){
x1<-data$x1
x2<-data$x2
## factor correlation matrix
phi1<-matrix(c(1, par[1], par[2],
par[1], 1, par[3],
par[2], par[3], 1 ), nrow=3, byrow=T)
## factor residual variance
psi1<-diag(1,9,9)
for (i in 1:9){
psi1[i,i]<-par[3+i]
}
## factor loading matrix
lam11<-diag(1,3,3)
for (i in 1:3){
lam11[i,i]<-par[12+i]
}
lam12<-matrix(par[16:33],nrow=6,byrow=T)
lambda1<-rbind(lam11,lam12)
## the population covariance matrix
sigma1<-lambda1%*%phi1%*%t(lambda1)+psi1
## the observed covariance/correlation matrix
if (cor){
S1<-cor(x1)
}else{
S1<-cov(x1)
}
## the likelihood function
n1<-dim(x1)[1]
p1<-dim(x2)[2]
l1<-n1*(log(det(sigma1))+sum(diag(S1%*%solve(sigma1)))-log(det(S1))-p1)/2
## for the second group
## factor correlation matrix
phi2<-matrix(c(1, par[64], par[65],
par[64], 1, par[66],
par[65], par[66], 1 ), nrow=3, byrow=T)
## factor residual variance
psi2<-diag(1,9,9)
for (i in 1:9){
psi2[i,i]<-par[33+i]
}
## factor loading matrix
lam21<-diag(1,3,3)
for (i in 1:3){
lam21[i,i]<-par[43+i]
}
lam22<-matrix(par[46:63],nrow=6,byrow=T)
lambda2<-rbind(lam21,lam22)
## the population covariance matrix
sigma2<-lambda2%*%phi2%*%t(lambda2)+psi2
## the observed covariance/correlation matrix
if (cor){
S2<-cor(x2)
}else{
S2<-cov(x2)
}
## the likelihood function
n2<-dim(x2)[1]
p2<-dim(x2)[2]
l2<-n2*(log(det(sigma2))+sum(diag(S2%*%solve(sigma2)))-log(det(S2))-p2)/2
l1+l2
}
## data
#x<-read.table("test.txt")
#res<-nlm(hof, par, x=x, cor=T, hessian=T)
## data generation
library(mvtnorm)
sim.data.g3<-function(par,n1,n2){
## factor correlation matrix
phi<-matrix(c(1, par[1], par[2],
par[1], 1, par[3],
par[2], par[3], 1 ), nrow=3, byrow=T)
## factor residual variance
psi<-diag(1,9,9)
for (i in 1:9){
psi[i,i]<-par[3+i]
}
## factor loading matrix
lam1<-diag(1,3,3)
for (i in 1:3){
lam1[i,i]<-par[12+i]
}
lam2<-matrix(par[16:33],nrow=6,byrow=T)
lambda<-rbind(lam1,lam2)
x<-array(NA, dim=c(n1,9))
for (i in 1:n1){
f<-rmvnorm(1,c(0,0,0),phi)
x[i,]<-rmvnorm(1,lambda%*%t(f),psi)
}
## for the second group
## factor residual variance
psi2<-diag(1,9,9)
for (i in 1:9){
psi2[i,i]<-par[33+i]
}
## factor loading matrix
lam21<-diag(1,3,3)
for (i in 1:3){
lam21[i,i]<-par[43+i]
}
lam22<-matrix(par[46:63],nrow=6,byrow=T)
lambda2<-rbind(lam21,lam22)
y<-array(NA, dim=c(n2,9))
for (i in 1:n2){
f<-rmvnorm(1,c(0,0,0),phi)
y[i,]<-rmvnorm(1,lambda2%*%t(f),psi2)
}
list(x1=x,x2=y)
}
## starting values
par<-c(.5,.4,.3,rep(.5,9),rep(.707,3), rep(c(.41,.41,0,0,.439,.439,.422,0,.422),2),
rep(.5,9),rep(.707,3), rep(c(.707,0,0,0,.707,0,0,0,.707),2))
par1<-c(.5,.4,.3,rep(.45,9),rep(.707,3), rep(c(.41,.41,0,0,.439,.439,.422,0,.422),2),
rep(.45,9),rep(.707,3), rep(c(.707,0,0,0,.707,0,0,0,.707),2))
par2<-c(.5,.4,.3,rep(.45,9),rep(.707,3), rep(c(.41,.41,0,0,.439,.439,.422,0,.422),2),
rep(.45,9),rep(.707,3), rep(c(.707,0,0,0,.707,0,0,0,.707),2),.5,.4,.3)
n1<-500
n2<-500
R<-1000
sim.res<-NULL
chi.res<-NULL
i<-1
while (i<=R){
data.i<-sim.data.g3(par,n1,n2)
res1.i<-nlm(est.g34.inv,par1,data=data.i,cor=T)
res2.i<-nlm(est.g34.v,par2,data=data.i,cor=T)
if (res1.i$code<=2 && res2.i$code<=2 ){
sim.res<-rbind(sim.res,c(res1.i$estimate,res2.i$estimate))
chi.res<-rbind(chi.res,c(res1.i$minimum,res2.i$minimum))
i<-i+1
}
}
dim(sim.res)
lab/r_codes_for_simulation_study_in_experiment_4.txt · Last modified: 2016/01/24 09:48 by 127.0.0.1
