# Figure 1 & 2 of manuscript - linear effect of NE on HP
rm(list = ls(all = TRUE)) #clear workspace
#setwd("C:/Documents and Settings/jolynn/Desktop/Fall 2010/CI auto/examples/negative emotions/linear")
#setwd("C:/Documents and Settings/Diane Losardo/Desktop/Quant Research/mixtureproj/workingcode")
setwd("C:/Documents and Settings/pek/Desktop/CEauto/example/negative emotions/linear")
nclass <- 1 #user input
nparm <-19 #user input - can be used to check whether acov has correct dimensions
alpha<- 0.10 #user defined
points <- 50
acov_f <- "acov.dat"
means_f <- "result.dat"
#location of parameters from TECH1 is input by user
c_loc <- 0
alpha_loc <- c(15,16) #alpha1, alpha2 by class
beta_loc <- c(17)
psi_loc <- c(18,19) #psi1, psi2 by class
classes <- nclass #number of classes
p <- nclass*(4)+(nclass-1) #number of variables to be used later in generating curves
acov_ <- matrix(scan(file=acov_f,what=numeric(0))) #inputting acov matrix
acov <- matrix(0,nparm,nparm)
acov[upper.tri(acov,diag=TRUE)] <- acov_ #full acov matrix
acov<-acov+t(acov)-diag(diag(acov)) #making acov square
means_<- matrix(scan(file=means_f,what=double(0))) #inputting mean vector
means <-matrix(means_[1:nparm,1]) #mean vector
alphaarray <- array(data = 0, c(2,classes))
j <- 0 #modified to make sure it's correct
for (i in 1:classes) {
alphaarray[1,i] <- means[alpha_loc[i+j],1]
alphaarray[2,i] <- means[alpha_loc[i+j+1],1]
j <- j+1
}
psiarray <- array(data = 0, c(2,classes))
j <- 0
for (i in 1:classes) {
psiarray[1,i] <- means[psi_loc[i+j],1]
psiarray[2,i] <- means[psi_loc[i+j+1],1]
j <- j+1
}
betavec <- vector(length=classes)
ci_v <- vector(length=classes)
pi_v<-vector(length=classes)
for (i in 1:classes) {
betavec[i]<-means[beta_loc[i],1]
if (nclass==1) ci_v[i] <- 1 else
ci_v[i]<-means[c_loc[i],1] }
ci_v[classes] <- 0
sum_expi <- 0
for(i in 1:classes) {
sum_expi <- sum_expi + exp(ci_v[i]) }
for(i in 1:classes) {
pi_v[i]<-exp(ci_v[i])/sum_expi }
gamma <- betavec
#----------------------------------------------------------------------------------------------------------------------
# code for computing I(z)
# taken from older plotting code
#----------------------------------------------------------------------------------------------------------------------
# these need to be in 2x2 matrices/ 2x1 vectors for computations
alphaarray2 <- array(data = NA ,c(2,1,classes))
betaarray <- array(data = NA ,c(2,2,classes))
psiarray2 <- array(data = NA ,c(2,2,classes))
for(i in 1:classes) {
alphaarray2[,,i] <-matrix(c(alphaarray[1,i], alphaarray[2,i]), 2, 1, byrow=TRUE)
betaarray[,,i] <- matrix(c(0,0,betavec[i],0), 2, 2, byrow=TRUE)
psiarray2[,,i] <- matrix(c(psiarray[1,i],0,0,psiarray[2,i]),
2, 2, byrow=TRUE)
}
IMPCOV <- array(data = NA, c(2, 2, classes))
IMPMEAN <- array(data = NA, c(2, 2, classes))
for(i in 1:classes) {
IMPCOV[,,i] <- solve(diag(x = 1, nrow = 2, ncol = 2) - betaarray[,,i]) %*% (psiarray2[,,i]) %*% t(solve(diag(x = 1, nrow = 2, ncol = 2) - betaarray[,,i]))
IMPMEAN[,,i] <- solve(diag(x = 1, nrow = 2, ncol = 2) - betaarray[,,i]) %*% (alphaarray2[,,i])
}
MuEta_1 <- vector(mode = "numeric", length = classes)
MuEta_2 <- vector(mode = "numeric", length = classes)
VEta_1 <- vector(mode = "numeric", length = classes)
VEta_2 <- vector(mode = "numeric", length = classes)
COVKSIETA <- vector(mode = "numeric", length = classes)
for(i in 1:classes) {
MuEta_1[i] = IMPMEAN[1,1,i]
MuEta_2[i] = IMPMEAN[2,2,i]
VEta_1[i] = IMPCOV[1,1,i]
VEta_2[i] = IMPCOV[2,2,i]
COVKSIETA[i] = IMPCOV[1, 2,i]
}
#upper and lower bounds for plots
muEta1 <- 0
muEta2 <-0
for(i in 1:classes) {
muEta1 <- muEta1 + pi_v[i]*MuEta_1[i]
muEta2 <- muEta2 + pi_v[i]*MuEta_2[i] }
vEta1 <- 0
vEta2 <- 0
for(i in 1:classes) {
for(j in 1:classes) {
if (i < j) {
vEta1 <- vEta1 + pi_v[i]*pi_v[j]*(MuEta_1[i]-MuEta_1[j])^2
vEta2 <- vEta2 + pi_v[i]*pi_v[j]*(MuEta_2[i]-MuEta_2[j])^2
}
}
}
for(i in 1:classes) {
vEta1 <- vEta1 + pi_v[i]*VEta_1[i]
vEta2 <- vEta2 + pi_v[i]*VEta_2[i]
}
LEta1 = muEta1 - 3*sqrt(vEta1)
UEta1 = muEta1 + 3*sqrt(vEta1)
LEta2 = muEta2 - 3*sqrt(vEta2)
UEta2 = muEta2 + 3*sqrt(vEta2)
LB = min(LEta1,LEta2)
UB = max(UEta1, UEta2)
#computations for contour plot
Eta1 <- seq(LEta1, UEta1, length=points)
Eta2 <- seq(LEta2, UEta2, length=points)
r <- vector(mode = "numeric", length = classes)
for(i in 1: classes) {
r[i] <- COVKSIETA[i]/sqrt(VEta_1[i]*VEta_2[i])
}
denKE <- function(Eta1, Eta2) {
placeholder <- 0
denKE_ <- matrix(data = 0, nrow = length(Eta1), ncol = classes)
for(i in 1:classes) {
z <- ((Eta1 - MuEta_1[i])^2)/VEta_1[i] + ((Eta2 - MuEta_2[i])^2)/VEta_2[i] - 2*r[i]*(Eta1 - MuEta_1[i])*(Eta2 - MuEta_2[i])/sqrt(VEta_1[i]*VEta_2[i])
denKE_[,i] <- (1/(2*22/7*sqrt(VEta_1[i])*sqrt(VEta_2[i])*sqrt(1-r[i]^2))) * exp(-z/(2*(1-r[i]^2))) }
for (i in 1:classes) {
placeholder <- placeholder + pi_v[i]*denKE_[,i] }
denKE <- placeholder
}
z <-outer (Eta1, Eta2, denKE)
#----------------------------------------------------------------------------------------------------------------------
# End of code for computing I(z)
#----------------------------------------------------------------------------------------------------------------------
x <- seq(LEta1,UEta1,length=points)
x2 <- seq(LEta2,UEta2,length=points)
phi <-array(data = 0, c(points,classes))
for(i in 1:classes) {
phi[,i]<-dnorm(x,mean=alphaarray[1,i],sd=sqrt(psiarray[1,i]))
}
a_pi <-array(data=0,c(points,classes))
a_pi2 <-array(data=0,c(points,classes))
for(i in 1:classes) {
a_pi[,i]<- pi_v[i]*dnorm(x,mean=MuEta_1[i],sd=sqrt(VEta_1[i]))
a_pi2[,i]<- pi_v[i]*dnorm(x2,mean=MuEta_2[i],sd=sqrt(VEta_2[i]))
}
sumpi <- array(data=0,c(points,1))
sumpi2 <- array(data=0,c(points,1))
for(i in 1:classes) {
sumpi[,1] <- sumpi[,1]+a_pi[,i]
sumpi2[,1] <- sumpi2[,1]+a_pi2[,i]
}
pi <- array(data=0,c(points,classes))
for(i in 1:classes) {
pi[,i] <- a_pi[,i]/sumpi[,1] }
y <- 0
for (i in 1:classes) {
y<-y+ pi[,i]*(alphaarray[2,i]+gamma[i]*x) }
#Derivatives for delta method CIs
D<-0
for(i in 1:classes) {
D = D+ exp(ci_v[i])*phi[,i]}
dalpha <-array(data = 0, c(points,classes))
dphi <-array(data = 0, c(points,classes))
dc <-array(data = 0, c(points,classes-1))
for(i in 1:classes) {
for (j in 1:classes) {
if(i != j) {
dalpha[,i]<-dalpha[,i]+((exp(ci_v[j])*phi[,j]*((alphaarray[2,i]-alphaarray[2,j])+(gamma[i]-gamma[j])*x)))
dphi[,i]<- dphi[,i]+((exp(ci_v[j])*phi[,j]*((alphaarray[2,i]-alphaarray[2,j])+(gamma[i]-gamma[j])*x)))
}
}
dalpha[,i]<-(dalpha[,i]*exp(ci_v[i])*phi[,i]*((x-alphaarray[1,i])/psiarray[1,i]))*(1/D^2)
dphi[,i]<-dphi[,i]*exp(ci_v[i])*phi[,i]*(((x-alphaarray[1,i])^2-1)/psiarray[1,i])*(1/(2*psiarray[1,i]))*(1/D^2)
}
if(nclass > 1)
for(i in 1:(classes-1)) {
for (j in 1:(classes)) {
if(i != j) {
dc[,i]<-dc[,i]+(exp(ci_v[j])*phi[,j]*((alphaarray[2,i]-alphaarray[2,j])+(gamma[i]-gamma[j])*x))
} }
dc[,i]<-dc[,i]*exp(ci_v[i])*phi[,i]*(1/D^2)
}
dkappa <-array(data = 0, c(points,classes))
dgamma <-array(data = 0, c(points,classes))
for(i in 1:classes) {
dkappa[,i]<-exp(ci_v[i])*phi[,i]/D
dgamma[,i]<-exp(ci_v[i])*phi[,i]*x/D }
ct <-0
varordered <-c()
for(i in 1:classes) {
varordered <-c(varordered,alpha_loc[i+ct],alpha_loc[i+1+ct],beta_loc[i])
ct <- ct+1}
varordered <-c(varordered,c_loc)
ct <-0
for(i in 1:classes) {
varordered <-c(varordered,psi_loc[i+ct])
ct <- ct+1}
acovd <- acov[varordered,varordered]
deriv <-c()
for(i in 1:classes) {
deriv <-cbind(deriv,dalpha[,i],dkappa[,i],dgamma[,i]) }
deriv <-c(deriv,dc,dphi)
deriv <-matrix(deriv,nrow=points,ncol=p)
se<-sqrt(diag(deriv%*%acovd%*%t(deriv)))
q <- abs(qnorm(alpha/2,mean=0,sd=1))
sq <- sqrt(qchisq(1-alpha,p))
# delta method nonsimultaneous confidence intervals
lo <- y - q*se
hi <- y + q*se
# delta method simultaneous confidence intervals
slo <- y - sq*se
shi <- y + sq*se
# Bs confidence bands
ct <-0
varorder <-c()
alpha_loc1 <-vector(mode="numeric",length=classes)
kappa_loc <- vector(mode="numeric",length=classes)
psi_loc1 <- vector(mode="numeric",length=classes)
phi_loc <-vector(mode="numeric",length=classes)
for(i in 1:classes) {
varorder <-c(varorder,alpha_loc[i+ct])
alpha_loc1[i] <- alpha_loc[i+ct]
psi_loc1[i] <- psi_loc[i+ct]
ct <- ct+1}
ct <-0
for(i in 2:(classes+1)) {
varorder <-c(varorder,alpha_loc[i+ct])
kappa_loc[i-1] <- alpha_loc[i+ct]
phi_loc[i-1] <- psi_loc[i+ct]
ct <- ct+1}
varorder <-c(varorder,beta_loc)
equal <- NULL
if (identical(means[psi_loc[1]],means[psi_loc[3]])) equal<-TRUE else equal<- FALSE
ct <- 0
if (!equal) {
for(i in 1:(classes)){
varorder <-c(varorder,psi_loc[i+ct])
ct <- ct+1
}
}
if (equal) {varorder <-c(varorder,psi_loc[1])}
varorder <- c(varorder,c_loc)
#selecting submatrices of acov
#vector of variable positions
acov0 <- acov[varorder,varorder]
means0 = means[varorder]
#nonsimultaneous bs CIs
#generating the data
draws = 1000
L = chol(acov0) #chol decomposition of acov
Z = rnorm(matrix(0,draws,length(means0))) #random normal variates
Z = matrix(Z,draws,length(means0)) #placing in matrix form
Sim_est = Z%*%L + matrix(1,draws,1)%*%means0 #getting simulated values
################################################################################
# need to make general
################################################################################
#check to see how many negative variances there are
#missing = 0
#for (i in 1:nrow(Sim_est)){
#if (Sim_est[i,psi1_1_]<0) missing = missing+1
#}
#################################################################################
#obtaining the eta2 values for all simulated data
yall <-NULL
if (!equal) {
for (i in seq(LEta1,UEta1,length=points)){
yy <-0
placeholder <-0
for (j in 1:classes) {
if (j < classes) {
placeholder = placeholder+exp(Sim_est[,classes*4+j])*dnorm(i,mean=Sim_est[,j],sd=sqrt(Sim_est[,classes*3+j])) }
else { placeholder = placeholder + dnorm(i,mean=Sim_est[,classes],sd=sqrt(Sim_est[,classes*4])) } }
for (k in 1:classes) {
if (k < classes) {
yy = yy + (exp(Sim_est[,classes*4+k])*dnorm(i,mean=Sim_est[,k],sd=sqrt(Sim_est[,classes*3+k]))*(Sim_est[,classes+k]+Sim_est[,classes*2+k]*i))/placeholder }
else { yy = yy+(dnorm(i,mean=Sim_est[,classes],sd=sqrt(Sim_est[,classes*4]))*(Sim_est[,classes*2]+Sim_est[,classes*3]*i))/placeholder }
}
yall = rbind(yall,yy)
} }
if(equal) { for (i in seq(LEta1,UEta1,length=points)){
yy <-0
placeholder <-0
for (j in 1:classes) {
if (j < classes) {
placeholder = placeholder+exp(Sim_est[,classes*3+1+j])*dnorm(i,mean=Sim_est[,j],sd=sqrt(Sim_est[,classes*3+1])) }
else { placeholder = placeholder + dnorm(i,mean=Sim_est[,classes],sd=sqrt(Sim_est[,classes*3+1])) } }
for (k in 1:classes) {
if (k < classes) {
yy = yy + (exp(Sim_est[,classes*3+1+k])*dnorm(i,mean=Sim_est[,k],sd=sqrt(Sim_est[,classes*3+1]))*(Sim_est[,classes+k]+Sim_est[,classes*2+k]*i))/placeholder }
else { yy = yy+ (dnorm(i,mean=Sim_est[,classes],sd=sqrt(Sim_est[,classes*3+1]))*(Sim_est[,classes*2]+Sim_est[,classes*3]*i))/placeholder } }
yall = rbind(yall,yy)
} }
#sorting before getting upper and lower CI values
for (i in 1:nrow(yall)){
yall[i,] = sort(yall[i,])
}
LCL = (alpha/2)*draws
UCL = (1-(alpha/2))*draws
LCLall = yall[,LCL]
UCLall = yall[,UCL]
bcMin <- bcyall[,LCL]+y
bcMax <- bcyall[,UCL]+y
#for bootstrapped simultaneous bands
if(alpha == 0.05) a<-1
if(alpha == 0.1) a<-2
nall = matrix(c(557,228,
29943,9234,
1018340,261260,
28666000,6296000),4,2,byrow=T)
namesN = list(c(1,2,3,4),c(.05,.10))
dimnames(nall) = namesN
n = nall[nclass,a]
L = chol(acov0) #chol decomposition of acov
sZ = rnorm(matrix(0,n,length(means0))) #random normal variates
sZ = matrix(sZ,n,length(means0)) #placing in matrix form
sSim_est = sZ%*%L + matrix(1,n,1)%*%means0 #getting simulated values
syall<-NULL
sMin<-NULL
sMax<-NULL
if (!equal) {
for (i in seq(LEta1,UEta1,length=points)){
yy <-0
placeholder <-0
for (j in 1:classes) {
if (j < classes) {
placeholder = placeholder+exp(sSim_est[,classes*4+j])*dnorm(i,mean=sSim_est[,j],sd=sqrt(sSim_est[,classes*3+j])) }
else { placeholder = placeholder + dnorm(i,mean=sSim_est[,classes],sd=sqrt(sSim_est[,classes*4])) } }
for (k in 1:classes) {
if (k < classes) {
yy = yy + (exp(sSim_est[,classes*4+k])*dnorm(i,mean=sSim_est[,k],sd=sqrt(sSim_est[,classes*3+k]))*(sSim_est[,classes+k]+sSim_est[,classes*2+k]*i))/placeholder }
else { yy = yy+(dnorm(i,mean=sSim_est[,classes],sd=sqrt(sSim_est[,classes*4]))*(sSim_est[,classes*2]+sSim_est[,classes*3]*i))/placeholder }
}
sMin <- c(sMin,min(yy))
sMax <- c(sMax,max(yy))
syall <- rbind(syall,yy)
} }
if(equal) { for (i in seq(LEta1,UEta1,length=points)){
yy <-0
placeholder <-0
for (j in 1:classes) {
if (j < classes) {
placeholder = placeholder+exp(sSim_est[,classes*3+1+j])*dnorm(i,mean=sSim_est[,j],sd=sqrt(sSim_est[,classes*3+1])) }
else { placeholder = placeholder + dnorm(i,mean=sSim_est[,classes],sd=sqrt(sSim_est[,classes*3+1])) } }
for (k in 1:classes) {
if (k < classes) {
yy = yy + (exp(sSim_est[,classes*3+1+k])*dnorm(i,mean=sSim_est[,k],sd=sqrt(sSim_est[,classes*3+1]))*(sSim_est[,classes+k]+sSim_est[,classes*2+k]*i))/placeholder }
else { yy = yy+ (dnorm(i,mean=sSim_est[,classes],sd=sqrt(sSim_est[,classes*3+1]))*(sSim_est[,classes*2]+sSim_est[,classes*3]*i))/placeholder } }
sMin <- c(sMin,min(yy))
sMax <- c(sMax,max(yy))
syall <- rbind(syall,yy)
} }
#----------------------------------------------------------------------------------------------------------------------
# Plots
#----------------------------------------------------------------------------------------------------------------------
Ksi <- Eta1
Eta <- Eta2
denKsi <- sumpi
denEta <- sumpi2
post <- pi
pKsi <- a_pi
pEta <- a_pi2
etahmat <- matrix(data = 0, nrow = length(Ksi), ncol = classes)
for(i in 1:classes) {
etahmat[,i] <- alphaarray[2,i]+gamma[i]*Ksi }
etah_ <- y
#supress lines/points to plot when data is sparse
etah_[denKsi<=.02] <- NA
etah_[denEta<=.02] <- NA
lo_ <- lo
hi_ <- hi
slo_ <- slo
shi_ <- shi
lo_[denKsi<=.02] <- NA
lo_[denEta<=.02] <- NA
hi_[denKsi<=.02] <- NA
hi_[denEta<=.02] <- NA
slo_[denKsi<=.02] <- NA
slo_[denEta<=.02] <- NA
shi_[denKsi<=.02] <- NA
shi_[denEta<=.02] <- NA
LCLall_ <- LCLall
UCLall_ <- UCLall
LCLall_[denKsi<=.02] <- NA
LCLall_[denEta<=.02] <- NA
UCLall_[denKsi<=.02] <- NA
UCLall_[denEta<=.02] <- NA
sMin_ <- sMin
sMax_ <- sMax
sMin_[denKsi<=.02] <- NA
sMin_[denEta<=.02] <- NA
sMax_[denKsi<=.02] <- NA
sMax_[denEta<=.02] <- NA
plot(Ksi,Eta,type='n',xlab="", ylab="",
cex.lab=1, cex.axis=1,yaxt="n")
points(x,etah_,col=1,lwd=2, pch=16, cex=.8)
points(x,lo_,col=1,lwd=1.5,lty=2,cex=.8)
points(x,hi_,col=1,lwd=1.5,lty=2,cex=.8)
points(x,LCLall_,col=1,lwd=1.5,lty=3,pch=4,cex=.8)
points(x,UCLall_,col=1,lwd=1.5,lty=3,pch=4,,cex=.8)
plot(Ksi,Eta,type='n',xlab="Negative Emotions", ylab="",
cex.lab=1, cex.axis=1,yaxt="n")
lines(x,etah_,col=1,lwd=2, pch=16, cex=.8)
lines(x,slo_,col=1,lwd=1,lty=2)
lines(x,shi_,col=1,lwd=1,lty=2)
lines(x,sMin_,col=1,lwd=1,lty=3)
lines(x,sMax_,col=1,lwd=1,lty=3)
#y1 <- -0.25+exp(-0.14*x)
#y1 <- 0.7-0.1*x
#lines(x,y1,lty=1,col="grey",lwd=2)
#----------------------------------------------------------------------------------------------------------------------
# Output points to plot
#----------------------------------------------------------------------------------------------------------------------
out <- data.frame(x, etah_, lo_, hi_, LCLall_, UCLall_, slo_, shi_, sMin_, sMax_)
write.table(out, file='neg.1class.dat', append=FALSE, quote=FALSE,
col.names=TRUE, row.names=FALSE)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.