You are on page 1of 3

numberofcases<-500 #problem size, n1=200, n2=500

numberofvariables<-5
numberoflatent<-3
set.seed(123456)
library(VIM)
library(simFrame)
library(simPopulation)
library(rrcov)
library(rrcovNA)
library(RColorBrewer)
library(mvtnorm)
library(mi)
library(mice)
library(lme4)

n<-500
asim<-5000
ls195<-rep(NA,asim)
ls295<-rep(NA,asim)
ls395<-rep(NA,asim)
ls495<-rep(NA,asim)
ls595<-rep(NA,asim)
rs195<-rep(NA,asim)
rs295<-rep(NA,asim)
rs395<-rep(NA,asim)
rs495<-rep(NA,asim)
rs595<-rep(NA,asim)

mu<-0
pv1<-rep(NA,asim)
pv2<-rep(NA,asim)
pv3<-rep(NA,asim)
pv4<-rep(NA,asim)
pv5<-rep(NA,asim)

l<-rep(NA,5000)
r<-rep(NA,5000)

for(i in 1:5000)
{
set.seed(i)
effect<-matrix(c(1,5,.7,0,1,1.6,0,.0,3.39,1,0.5,2,.7,.5,.3),nrow=numberoflatent
,ncol=numberofvariables,byrow=TRUE)
#measurement model
model<-matrix(c(1,8,-9,7,5,0,1,0,4,4,0,0,1,2,5,0,0,0,1,-
5,0,0,0,0,1),nrow=numberofvariables,byrow=TRUE)

tmodel<-t(model) #transpose of model


solve(model%*%tmodel)
#show the resulting latent structure

communality<-diag(model%*%tmodel) #find how much to weight true

#scores and errors given the measurement model

uniqueness<-communality
errorweight<-sqrt(uniqueness)
errorweight<-diag(errorweight) #how much to weight the errors

truescores<-matrix(rnorm(numberofcases*(numberoflatent)),numberofcases)
#create true scores for the latent variables.
Matrix 200 by 3.

round(cor(truescores),2)
truescores<-truescores%*%effect #create true scores to reflect
structural relations

observedscore<-truescores%*%tmodel
round(cor(observedscore),2) #show the true score correlation
matrix (without error)
error<- matrix(rnorm(numberofcases*(numberofvariables)),numberofcases) #create
normal error scores
#error<- matrix(rchisq(1000,5),ncol=5) #create chisquare error scores

error<-error%*%errorweight #matrix 200 by 5 and 500 by 5


observedscore<-observedscore+error #matrix 200 by 5 and 500 by 5
round(cor(observedscore),2) #show the correlation matrix
#this gives the data "realistic"
properties
V1<-round(observedscore[,1],2)
V2<-round(observedscore[,2],2)
V3<-round(observedscore[,3],2)
V4<-round(observedscore[,4],2)
V5<-round(observedscore[,5],2)

pindar1=data.frame(V1,V2,V3,V4,V5)

##contaminate the data


cc <- DARContControl(target = "V1", epsilon = 0.2, # epsilon=0.2 and 0.5
fun = function(x) x * 10)
ibrahim <- contaminate(pindar1, cc)

## missing completely at random


ib <- NAControl( NArate = 0.3) # 0.3, 0.45
mary=setNA(ibrahim, ib)

pindar=irmi(mary, eps = 0.01, maxit = 20, mixed = NULL, step = FALSE,


#data=ibrahim, musa, daniel
robust = FALSE, takeAll = TRUE, noise = TRUE, noise.factor = 1,
force = FALSE, robMethod = "lmrob", force.mixed = TRUE, mi = 1,
trace=FALSE)

##Proportion of Coverage and average length of confidence interval

ls195[i]<-mean(pindar[,1])-qt(0.975,499)*sqrt(var(pindar[,1])/n)
ls295[i]<-mean(pindar[,2])-qt(0.975,499)*sqrt(var(pindar[,2])/n)
ls395[i]<-mean(pindar[,3])-qt(0.975,499)*sqrt(var(pindar[,3])/n)
ls495[i]<-mean(pindar[,4])-qt(0.975,499)*sqrt(var(pindar[,4])/n)
ls595[i]<-mean(pindar[,5])-qt(0.975,499)*sqrt(var(pindar[,5])/n)
rs195[i]<-mean(pindar[,1])+qt(0.975,499)*sqrt(var(pindar[,1])/n)
rs295[i]<-mean(pindar[,2])+qt(0.975,499)*sqrt(var(pindar[,2])/n)
rs395[i]<-mean(pindar[,3])+qt(0.975,499)*sqrt(var(pindar[,3])/n)
rs495[i]<-mean(pindar[,4])+qt(0.975,499)*sqrt(var(pindar[,4])/n)
rs595[i]<-mean(pindar[,5])+qt(0.975,499)*sqrt(var(pindar[,5])/n)

l[i]<-t.test(pindar[,1],alternative="two.sided",mu = 0,conf.level=0.95)$conf.int[1]
r[i]<-t.test(pindar[,1],alternative="two.sided",mu = 0,conf.level=0.95)$conf.int[2]

##p-value
pv1[i]<-t.test(pindar[,1],alternative="two.sided",mu=0)$p.value
pv2[i]<-t.test(pindar[,2],alternative="two.sided",mu=0)$p.value
pv3[i]<-t.test(pindar[,3],alternative="two.sided",mu=0)$p.value
pv4[i]<-t.test(pindar[,4],alternative="two.sided",mu=0)$p.value
pv5[i]<-t.test(pindar[,5],alternative="two.sided",mu=0)$p.value
}

##proportion of the 500 confidence intervals


mean((ls195<=2)&(2<=rs195))
mean((ls295<=2)&(2<=rs295))
mean((ls395<=2)&(2<=rs395))
mean((ls495<=2)&(2<=rs495))
mean((ls595<=2)&(2<=rs595))

##length of intervals
mean(rs195-ls195)
mean(rs295-ls295)
mean(rs395-ls395)
mean(rs495-ls495)
mean(rs595-ls595)

##pvalues
mean(pv1<0.05)
mean(pv2<0.05)
mean(pv3<0.05)
mean(pv4<0.05)
mean(pv5<0.05)

# Graphical display of results


win.graph()
plot(c(l,r),c(1:5000,1:5000),type="n",xlab="Confidence interval",ylab="Sample")
s<-seq(1,5000,length=5000)
for (i in 1:5000)
{ifelse((l[s][i]<=mean(pindar[,1],na.rm=T))&(mean(pindar[,1],na.rm=T)<=r[s][i]),b<-
1,b<-2)
lines(c(l[s][i],r[s][i]),c(s[i],s[i]),col=b)}
lines(rep(mean(pindar[,1],na.rm=T),5000),1:5000)

hist(pv)

You might also like