#============================================================================================================
#
# Licensing:
#
# Copyright Maria Grünewald and Ola Hössjer (2010)
#
# This code is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. See .
#
# This code is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
#
# Citation:
#
# The methodology used in this library is described in Grünewald & Hössjer (2011) A General Statistical Framework
# for Multistage Designs, ...
# Please refer to this paper when using the library.
#============================================================================================================
#
# Contents:
#
# This library computes and plots efficiencies for sequential design in Three-stage sampling design with two Gaussian outcomes
# For description of the model see Example 5 in
# Grünewald & Hössjer (2011) A General Statistical Framework
# for Multistage Designs, ...
#
#
# Output:
#
# File "EfficiencyTreestage.txt" saved to R working directory
# containing settings and numerical results from simulation run
#
# Figures shown in R Graphics devise
# *Plots illustrating cost adjusted efficiency
#
#
#============================================================================================================
#
# The code is intended for use in the software R (version 2.10.0):
# R Development Core Team (2008). R: A language and environment for
# statistical computing. R Foundation for Statistical Computing,
# Vienna, Austria. ISBN 3-900051-07-0, URL http://www.R-project.org.
#
#============================================================================================================
#============================================================================================================
# Setting parameters for your calculations
#============================================================================================================
# Model
# x2->x1, x1,x2->y x1,y->A
# X2~Bin, X1~Bin, Y~N
#------------------------------------------------------------------------------------------------------------
# Parameters specified by user
#------------------------------------------------------------------------------------------------------------
# Number of simulated individuals. This number does not refer to the number of subjects in the actual study,
# but only affects how well the Monte Calo method approximates theoretical results.
N<-100
#
B0x2<-0
#px2= exp(B0x2)/(1+exp(B0x2))
x2groups<-2
#Here programmed only to work with x1groups=2. If more groups, the ascertainment
#scheme has to be updated.
x1groups<-2
x1s<-c(0,1)
B0x1<--3
Bx2x1<-2
B0y<-0
Bx2y<-1
Bx1y<-1
SDy<-1
# for sampling scheme with only two regions per variable "cuty" and "cutx1" determines these.
# See function "weights" for further specification
cuty<-3
cutx1<-0.5
# Specifying sampling probabilities
# (Vector of length >=1)
#lambda_2 for y=cuty
PAyh<-c(rep(1,(length(PAyl)-1)),1)
#lambda_3 for y=cuty,x1=cuty,x1>=cutx1
pAyhx1h<-c(rep(1,(length(pAylx1l)-1)),1)
#lambda_3 for y=cutx1
pAylx1h<-c(rep(1,(length(pAylx1l)-1)),1)
#------------------------------------------------------------------------------------------------------------
# The following parameters follow from settings above
#------------------------------------------------------------------------------------------------------------
#number of parameters in the model
parnum<-7
# number of parameters in explanatory variable
x2parnum<-1
parnumfirsty<-x2parnum+1
#============================================================================================================
# Functions to simulate data and create weights for Monte carlo calculations
#============================================================================================================
# Simulating data
simdata<-function(N,B0x2,x2groups,B0x1,Bx2x1,x1groups,B0y,Bx2y,Bx1y,SDy){
sim<-matrix(NA,N,3)
#x2
x2<-rbinom(N,x2groups-1,exp(B0x2)/(1+exp(B0x2)))
#x1
x1<-rbinom(N,x1groups-1,exp(B0x1+Bx2x1*x2)/(1+exp(B0x1+Bx2x1*x2)))
#y
y<-rnorm(N,B0y+Bx2y*x2+Bx1y*x1,SDy)
sim[,1]<-x2
sim[,2]<-x1
sim[,3]<-y
return(sim)
}
# The weights below corresponds to the sampling scheme
# used in Example 5
# Change the weight function to alter the sampling scheme
weightsX2<-function(x1,y,cutx1,cuty,pAyhx1h,pAyhx1l,pAylx1h,pAylx1l){
ascprob<-matrix(NA,length(x1),1)
for (i in 1:length(x1)){
if (y[i]> cuty) {
if (x1[i]> cutx1) {
ascprob[i,]<-pAyhx1h}
if (x1[i]< cutx1) {
ascprob[i,]<-pAyhx1l}
}
if (y[i] < cuty){
if (x1[i]> cutx1) {
ascprob[i,]<-pAylx1h}
if (x1[i]< cutx1) {
ascprob[i,]<-pAylx1l}
}
}
return(ascprob)
}
weightsX1<-function(y,cuty,PAyl,PAyh){
ascprob<-matrix(NA,length(y),1)
for (i in 1:length(y)){
if (y[i]> cuty) {
ascprob[i,]<-PAyh
}
if (y[i] < cuty){
ascprob[i,]<-PAyl
}
}
return(ascprob)
}
#============================================================================================================
# Functions to calculate efficiency
#============================================================================================================
#------------------------------------------------------------------------------------------------------------
# Function to calculate \psi
#------------------------------------------------------------------------------------------------------------
psi<-function(N,B0x2,B0x1,Bx2x1,B0y,Bx2y,Bx1y,SDy,x2groups,x1groups,x2,x1,y){
dB0x2<-(exp(B0x2)*(x2-(x2groups-1))+x2)/(1+exp(B0x2))
dB0x1<-(exp(B0x1+Bx2x1*x2)*(x1-(x1groups-1))+x1)/(1+exp(B0x1+Bx2x1*x2))
dBx2x1<-x2*(exp(B0x1+Bx2x1*x2)*(x1-(x1groups-1))+x1)/(1+exp(B0x1+Bx2x1*x2))
dB0y<--(B0y+Bx2y*x2+Bx1y*x1-y)/SDy^2
dBx2y<-x2*(-(B0y+Bx2y*x2+Bx1y*x1-y))/SDy^2
dBx1y<-x1*(-(B0y+Bx2y*x2+Bx1y*x1-y))/SDy^2
dSDy<--(SDy^2-(B0y+Bx2y*x2+Bx1y*x1-y)^2)/SDy^3
dpar<-matrix(c(dB0x2,dB0x1,dBx2x1,dB0y,dBx2y,dBx1y,dSDy),N,parnum)
return(dpar)
}
#------------------------------------------------------------------------------------------------------------
# Function to calculate P(z)
#------------------------------------------------------------------------------------------------------------
Pz<-function(B0x2,B0x1,Bx2x1,B0y,Bx2y,Bx1y,SDy,x2groups,x1groups,x2,x1,y){
dnorm(y, mean=(B0y+Bx2y*x2+Bx1y*x1), sd=SDy)*dbinom(x1, size=(x1groups-1), prob=exp(B0x1+Bx2x1*x2)/(1+exp(B0x1+Bx2x1*x2)))*dbinom(x2, size=(x2groups-1), prob=exp(B0x2)/(1+exp(B0x2)))
}
#------------------------------------------------------------------------------------------------------------
# Function to calculate P(y)
#------------------------------------------------------------------------------------------------------------
Py<-function(B0x2,B0x1,Bx2x1,B0y,Bx2y,Bx1y,SDy,x2groups,x1groups,y){
py<-0
for(j in 1:x2groups){
for(k in 1:x1groups){
py<-Pz(B0x2,B0x1,Bx2x1,B0y,Bx2y,Bx1y,SDy,x2groups,x1groups,(j-1),(k-1),y)+py
}
}
return(py)
}
#------------------------------------------------------------------------------------------------------------
# Function to calculate P(yx1)
#------------------------------------------------------------------------------------------------------------
Pyx1<-function(B0x2,B0x1,Bx2x1,B0y,Bx2y,Bx1y,SDy,x2groups,x1groups,x1,y){
pyx1<-0
for(j in 1:x2groups){
pyx1<-Pz (B0x2,B0x1,Bx2x1,B0y,Bx2y,Bx1y,SDy,x2groups,x1groups,(j-1),x1,y)+pyx1
}
return(pyx1)
}
#------------------------------------------------------------------------------------------------------------
# Function to calculate P(x2x1)
#------------------------------------------------------------------------------------------------------------
Px2x1<-function(B0x2,B0x1,Bx2x1,x2groups,x1groups,x2,x1){
px2x1<-dbinom(x1, size=(x1groups-1), prob=exp(B0x1+Bx2x1*x2)/(1+exp(B0x1+Bx2x1*x2)))*dbinom(x2, size=(x2groups-1), prob=exp(B0x2)/(1+exp(B0x2)))
return(px2x1)
}
#------------------------------------------------------------------------------------------------------------
# Function to calculate P(x2)
#------------------------------------------------------------------------------------------------------------
Px2<-function(B0x2,x2groups,x2){
dbinom(x2, size=(x2groups-1), prob=exp(B0x2)/(1+exp(B0x2)))
}
#------------------------------------------------------------------------------------------------------------
# Function to calculate P(x1)
#------------------------------------------------------------------------------------------------------------
Px1<-function(B0x2,B0x1,Bx2x1,x2groups,x1groups,x1){
px1<-0
for(j in 1:x2groups){
px1<-dbinom(x1, size=(x1groups-1), prob=exp(B0x1+Bx2x1*(j-1))/(1+exp(B0x1+Bx2x1*(j-1))))*dbinom((j-1), size=(x2groups-1), prob=exp(B0x2)/(1+exp(B0x2)))+px1
}
return(px1)
}
#------------------------------------------------------------------------------------------------------------
# Function to calculate variances
#------------------------------------------------------------------------------------------------------------
variances<-function(N,B0x2,B0x1,Bx2x1,B0y,Bx2y,Bx1y,SDy,x2groups,x1groups,x2,x1,y,w1,w2,w12,w12s,NstarX1,NstarX12,parnum){
#-----------------------------------------------------------------------------------------------------
# Calculating the fist term of the information as E[(f'/f)^2] in ascertainment sample
#-----------------------------------------------------------------------------------------------------
infopart1<-matrix(NA,parnum,parnum)
for (i in 1:parnum){
for (j in 1:parnum){
infopart1[i,j]<-sum(psidata[,i]*psidata[,j]*w12)/N
}
}
#-----------------------------------------------------------------------------------------------------
# Calculating the second term of the information in ascertainment sample
#-----------------------------------------------------------------------------------------------------
#-----------------------------------------------------------------------------------------------------
#Joint likelihood
#-----------------------------------------------------------------------------------------------------
infopart2joint<-matrix(NA,parnum,parnum)
for (i in 1:parnum){
for (j in 1:parnum){
infopart2joint[i,j]<-sum(psidata[,i]*w12)/N*sum(psidata[,j]*w12)/N
}
}
#-----------------------------------------------------------------------------------------------------
#Prospective likelihood
#-----------------------------------------------------------------------------------------------------
infopart2prosp<-matrix(0,parnum,parnum)
for (j in 1:x2groups){
psidataj<-psidata[x2==j-1,]
wj<-w12[x2==j-1]
Nstarj<-sum(wj)
for (i in 1:parnum){
for (k in 1:parnum){
infopart2prosp[i,k]<-(sum(psidataj[,i]*wj)/N*sum(psidataj[,k]*wj)/N)+infopart2prosp[i,k]
}
}
}
#-----------------------------------------------------------------------------------------------------
# Retrospective likelihood X1
#-----------------------------------------------------------------------------------------------------
sumIyretroX1<-matrix(0,parnum,parnum)
#------------------------------
#for each sampled value of y
#------------------------------
for (j in 1:length(y)){
Epsiy<-matrix(0,1,parnum)
Epsiypsiy<-matrix(0,parnum,parnum)
Epsiyx1etc<-matrix(0,parnum,parnum)
#------------------------------
#for each possible value of x2 and x1 (again) borde kunna flyttas ut ett steg
#------------------------------
for (q1 in 1:x1groups){
for (q2 in 1:x2groups){
psidatajs<-psi(1,B0x2,B0x1,Bx2x1,B0y,Bx2y,Bx1y,SDy,x2groups,x1groups,(q2-1),(q1-1),y[j])
Epsiy<-Pz(B0x2,B0x1,Bx2x1,B0y,Bx2y,Bx1y,SDy,x2groups,x1groups,(q2-1),(q1-1),y[j])/Py(B0x2,B0x1,Bx2x1,B0y,Bx2y,Bx1y,SDy,x2groups,x1groups,y[j])*psidatajs+Epsiy
}
}
#------------------------------
#for each possible value of x1
#------------------------------
for (l in 1:x1groups){
Epsiyx1<-matrix(0,1,parnum)
Epsiyx1etc<-Pz(B0x2,B0x1,Bx2x1,B0y,Bx2y,Bx1y,SDy,x2groups,x1groups,(k-1),(l-1),y[j])/Pyx1(B0x2,B0x1,Bx2x1,B0y,Bx2y,Bx1y,SDy,x2groups,x1groups,(l-1),y[j])*t(Epsiyx1-Epsiy)%*%(Epsiyx1-Epsiy)+Epsiyx1etc
}
sumIyretroX1<-w1[j,]*Epsiyx1etc+sumIyretroX1
}
IretroX1<-sumIyretroX1/N
#-----------------------------------------------------------------------------------------------------
#Retrospective likelihood X2
#-----------------------------------------------------------------------------------------------------
sumIyretroX2<-matrix(0,parnum,parnum)
#------------------------------
#for each sampled value of y
#------------------------------
for (j in 1:length(y)){
#------------------------------
#for each possible value of x1
#------------------------------
for (l in 1:x1groups){
Epsiyx1etc<-matrix(0,parnum,parnum)
Epsiyx1<-matrix(0,1,parnum)
#------------------------------
#for each possible value of x2 and x1 (again) borde kunna flyttas ut ett steg
#------------------------------
for (q1 in 1:x1groups){
for (q2 in 1:x2groups){
psidatajs<-psi(1,B0x2,B0x1,Bx2x1,B0y,Bx2y,Bx1y,SDy,x2groups,x1groups,(q2-1),(q1-1),y[j])
Epsiyx1<-Pz(B0x2,B0x1,Bx2x1,B0y,Bx2y,Bx1y,SDy,x2groups,x1groups,(q2-1),(q1-1),y[j])/Py(B0x2,B0x1,Bx2x1,B0y,Bx2y,Bx1y,SDy,x2groups,x1groups,y[j])*psidatajs+Epsiyx1
}
}
#------------------------------
#for each possible value of x2
#------------------------------
for (k in 1:x2groups){
psidatajs<-psi(1,B0x2,B0x1,Bx2x1,B0y,Bx2y,Bx1y,SDy,x2groups,x1groups,(k-1),(l-1),y[j])
Epsiyx1etc<-Pz(B0x2,B0x1,Bx2x1,B0y,Bx2y,Bx1y,SDy,x2groups,x1groups,(k-1),(l-1),y[j])/Pyx1(B0x2,B0x1,Bx2x1,B0y,Bx2y,Bx1y,SDy,x2groups,x1groups,(l-1),y[j])*t(psidatajs-Epsiyx1)%*%(psidatajs-Epsiyx1)+Epsiyx1etc
}
sumIyretroX2<-w12s[j,l]*Pyx1(B0x2,B0x1,Bx2x1,B0y,Bx2y,Bx1y,SDy,x2groups,x1groups,(l-1),y[j])/Py(B0x2,B0x1,Bx2x1,B0y,Bx2y,Bx1y,SDy,x2groups,x1groups,y[j])*Epsiyx1etc+sumIyretroX2
}
}
#------------------------------------------------------------------------------------------------------------
# Calculating information matrix from the parts above
#------------------------------------------------------------------------------------------------------------
IretroX2<-sumIyretroX2/N
infojoint<-infopart1-infopart2joint
infomulti<-(Iy+IretroX1+IretroX2)
#------------------------------------------------------------------------------------------------------------
# Inverting the information matrix to get variance
#------------------------------------------------------------------------------------------------------------
variancematrixjoint<-solve(infojoint)
variancematrixmulti<-solve(infomulti)
#------------------------------------------------------------------------------------------------------------
# Output of function:variancematrix
#------------------------------------------------------------------------------------------------------------
return(list(variancematrixjoint=variancematrixjoint,variancematrixmulti=variancematrixmulti))
}
#============================================================================================================
# Running simulations
#============================================================================================================
#------------------------------------------------------------------------------------------------------------
# Simulate data
#------------------------------------------------------------------------------------------------------------
data<-simdata(N,B0x2,x2groups,B0x1,Bx2x1,x1groups,B0y,Bx2y,Bx1y,SDy)
x2<-data[,1]
x1<-data[,2]
y<-data[,3]
#------------------------------------------------------------------------------------------------------------
# Calculating psi using function "psi"
#------------------------------------------------------------------------------------------------------------
psidata<-psi(N,B0x2,B0x1,Bx2x1,B0y,Bx2y,Bx1y,SDy,x2groups,x1groups,x2,x1,y)
#------------------------------------------------------------------------------------------------------------
# Calculating \hat{I}_{Y}(\theta)
#------------------------------------------------------------------------------------------------------------
sumIy<-matrix(0,parnum,parnum)
for (j in 1:length(y)){
Epsiy<-matrix(0,1,parnum)
for (k in 1:x2groups){
for (l in 1:x1groups){
psidatajs<-psi(1,B0x2,B0x1,Bx2x1,B0y,Bx2y,Bx1y,SDy,x2groups,x1groups,(k-1),(l-1),y[j])
Epsiy<-Pz(B0x2,B0x1,Bx2x1,B0y,Bx2y,Bx1y,SDy,x2groups,x1groups,(k-1),(l-1),y[j])/Py(B0x2,B0x1,Bx2x1,B0y,Bx2y,Bx1y,SDy,x2groups,x1groups,y[j])*psidatajs+Epsiy
}
}
sumIy<-t(Epsiy)%*%Epsiy+ sumIy
}
Iy<-sumIy/N
#------------------------------------------------------------------------------------------------------------
# Running Monte Carlo simulations
#------------------------------------------------------------------------------------------------------------
varperpay0s<-matrix(NA,parnum,length(pAyhx1l)*length(PAyl))
varperpay0smulti<-matrix(NA,parnum,length(pAyhx1l)*length(PAyl))
pAhat1<-matrix(NA,1,length(PAyl))
pAhat12<-matrix(NA,1,length(pAyhx1l)*length(PAyl))
for (j in 1: length(PAyl)){
w1<-weightsX1(y,cuty,PAyl[j],PAyh[j])
pAhat1[,j]<-sum(w1)/N
NstarX1<-N*pAhat1[,j]
for (i in 1:length(pAyhx1l)){
w2<-weightsX2(x1,y,cutx1,cuty,pAyhx1h[i]*PAyh[j],pAyhx1l[i]*PAyh[j],pAylx1h[i]*PAyl[j],pAylx1l[i]*PAyl[j])
w12s<-matrix(c(w1,w1),N,2)*matrix(weightsX2(c(rep(0,N),rep(1,N)),c(y,y),cutx1,cuty,pAyhx1h[i]*PAyh[j],pAyhx1l[i]*PAyh[j],pAylx1h[i]*PAyl[j],pAylx1l[i]*PAyl[j]),N,2)
w12<-w1*w2
pAhat12[,((j-1)*length(pAyhx1l)+i)]<-sum(w12)/N
# The sample size after ascertainment= sum of the ascertainment prob.
NstarX12<-N*pAhat12[,((j-1)*length(pAyhx1l)+i)]
varperpay0<-variances(N,B0x2,B0x1,Bx2x1,B0y,Bx2y,Bx1y,SDy,x2groups,x1groups,x2,x1,y,w1,w2,w12,w12s,NstarX1,NstarX12,parnum)
varperpay0s[,((j-1)*length(pAyhx1l)+i)]<-diag(varperpay0$variancematrixjoint)
varperpay0smulti[,((j-1)*length(pAyhx1l)+i)]<-diag(varperpay0$variancematrixmulti)
}
}
#------------------------------------------------------------------------------------------------------------
# Saving the results to your working directory
#------------------------------------------------------------------------------------------------------------
results<-list(title="Efficiency of samling schemes for three-stage model", created=date(),N=N,B0x2=B0x2,x2groups=x2groups,B0x1=B0x1,Bx2x1=Bx2x1,B0y=B0y,Bx2y=Bx2y,Bx1y=Bx1y,SDy=SDy,cuty=cuty,cutx1=cutx1,PAyl=PAyl,PAyh=PAyh,pAyhx1h=pAyhx1h,pAyhx1l=pAyhx1l,pAylx1h=pAylx1h,pAylx1l=pAylx1l,varperpay0s=varperpay0s,varperpay0smulti=varperpay0smulti,pAhat1=pAhat1,pAhat12=pAhat12)
dput(results, file = "EfficiencyTreestage.txt")
#============================================================================================================
# Creating plots
#============================================================================================================
#------------------------------------------------------------------------------------------------------------
#Retrieving your results from file in your working directory
#------------------------------------------------------------------------------------------------------------
ResultsFromFile<-dget(file = "EfficiencyTreestage.txt")
#If you have trouble saving the file you can instead use the following line
#ResultsFromFile<-results
#------------------------------------------------------------------------------------------------------------
# Chosing your cost functions
#------------------------------------------------------------------------------------------------------------
C1<-0
C2<-0
C3<-1
#------------------------------------------------------------------------------------------------------------
#Preparation for plots
#------------------------------------------------------------------------------------------------------------
varBx2x1<-ResultsFromFile$varperpay0smulti[3,]
varBx2y<-ResultsFromFile$varperpay0smulti[5,]
varBx1y<-ResultsFromFile$varperpay0smulti[6,]
urval2<-ResultsFromFile$pAylx1l
# Function to calculate total avarage cost (TAC)
TAC<-function(C1,C2,C3){C1*(rep(1,times=length(ResultsFromFile$pAhat12))-rep(ResultsFromFile$pAhat1, each=length(ResultsFromFile$pAylx1l)))+C2*(rep(ResultsFromFile$pAhat1, each=length(ResultsFromFile$pAylx1l))-ResultsFromFile$pAhat12)+C3*ResultsFromFile$pAhat12}
#-----------------------------------------------------------------
# Threedimensional plots
#-----------------------------------------------------------------
x<-ResultsFromFile$PAyl
y<-ResultsFromFile$pAylx1l
cost<-TAC(C1,C2,C3)
costeffBx2x1<-(varBx2x1[length(varBx2x1)]/varBx2x1)/cost
costeffBx2y<-(varBx2y[length(varBx2y)]/varBx2y)/cost
costeffBx1y<-(varBx1y[length(varBx1y)]/varBx1y)/cost
effsummary<-((varBx2x1[length(varBx2x1)]/varBx2x1)^(-1)+(varBx2y[length(varBx2y)]/varBx2y)^(-1)+(varBx1y[length(varBx1y)]/varBx1y)^(-1))^(-1)
costeffsumamry<-effsummary/effsummary[length(varBx2y)]/cost
costeffs<-matrix(c(costeffBx2x1,costeffBx2y,costeffBx1y),length(cost),3)
z1<-(matrix(costeffs[,1],length(y),length(x)))
z2<-(matrix(costeffs[,2],length(y),length(x)))
z3<-(matrix(costeffs[,3],length(y),length(x)))
z4<-(matrix(costeffsumamry,length(y),length(x)))
#settings for plotting
op<-par(mfrow=c(2,4))
op <- par(bg = "white")
op<-par(cex=0.4, cex.main=2,cex.axis=1.2,cex.lab=1.8)
#hat(beta)[x2Y]
persp(y,x, z1, theta = 30, phi = 30, expand = 0.5, col = "darkolivegreen3",
ltheta = 120, shade = 0.75, ticktype = "detailed",nticks=4,
xlab="\n a ",ylab="\n b ",zlab="\n CE"
)
title(main=expression(paste('CE ',hat(beta)[x2Y])),font.main = 4, cex.main = 3)
#hat(beta)[x2x1]
persp(y,x, z2, theta = 30, phi = 30, expand = 0.5, col = "darkolivegreen3",
ltheta = 120, shade = 0.75, ticktype = "detailed",nticks=4,
xlab="\n a ",ylab="\n b ",zlab="\n CE"
)
title(main=expression(paste('CE ',hat(beta)[x2x1])),font.main = 4, cex.main = 3)
#hat(beta)[x1Y]
persp(y,x, z3, theta = 30, phi = 30, expand = 0.5, col = "darkolivegreen3",
ltheta = 120, shade = 0.75, ticktype = "detailed",nticks=4,
xlab="\n a ",ylab="\n b ",zlab="\n CE"
)
title(main=expression(paste('CE ',hat(beta)[x1Y])),font.main = 4, cex.main = 3)
#summary measure of the three parameters
persp(y,x, z4, theta = 30, phi = 30, expand = 0.5, col = "orangered2",
ltheta = 120, shade = 0.75, ticktype = "detailed",nticks=4,
xlab="\n a ",ylab="\n b ",zlab="\n CE"
)
title(main=expression(paste('CE')),font.main = 4, cex.main = 3)
#----------------------------------------------------
# Two-dimensional plots with efficinecy illustrated by colour
#----------------------------------------------------
op<-par(cex=0.6, cex.main=1.6,cex.axis=1.2,cex.lab=1.2)
#hat(beta)[x2Y]
image(y, x, z1, col = terrain.colors(100), axes = TRUE, xlab="a",ylab="b")
contour(y, x, z1, levels = seq(0, 5, by = 0.1),
add = TRUE, col = "peru")
box()
#hat(beta)[x2x1]
image(y, x, z2, col = terrain.colors(100), axes = TRUE, xlab="a",ylab="b")
contour(y, x, z2, levels = seq(0, 5, by = 0.1),
add = TRUE, col = "peru")
box()
#hat(beta)[x1Y]
image(y, x, z3, col = terrain.colors(100), axes = TRUE, xlab="a",ylab="b")
contour(y, x, z3, levels = seq(0, 5, by = 0.1),
add = TRUE, col = "peru")
box()
#summary measure of the three parameters
image(y, x, z4, col = heat.colors(100), axes = TRUE, xlab="a",ylab="b")
contour(y, x, z4, levels = seq(0, 5, by = 0.1),
add = TRUE, col = "peru")
box()