######################################## ## LIBRARIES ######################################## library(TAM) library(doMC) library(parallel) library(pbmcapply) library(funprog) lastChar <- function(str){ substr(str, nchar(str)-2, nchar(str)) } ####################################### ## ANALYSIS FUNCTIONS ####################################### pcm_analysis <- function(df=NULL,treatment='TT',irtmodel='PCM2',method='MML') { nbitems <- sum(sapply(1:20,function(x) paste0('item',x)) %in% colnames(df)) resp <- df[,sapply(seq(1,nbitems),function(x) paste0('item',x))] if (method=='MML') { tam1 <- tam.mml(resp=resp,Y=df[,treatment],irtmodel = irtmodel,est.variance = T,verbose=F) } if (method=='JML') { tam1 <- tam.jml(resp=resp,group=1+df[,treatment]) } if (method!='MML' & method!='JML') { stop('Invalid method. Please choose among MML or JML') } return(tam1) } replicate_pcm_analysis_m4 <- function(df=NULL,treatment='TT',irtmodel='PCM2',method='MML',sequence='replication',truebeta=0,eff.size=0,difsize=NA,nbdif=0) { nbitems <- sum(sapply(1:20,function(x) paste0('item',x)) %in% colnames(df)) resp <- df[,sapply(seq(1,nbitems),function(x) paste0('item',x))] if (method=='MML') { n <- max(df[,sequence]) print(n) tam1 <- pbmclapply(seq(1,n), function(x) pcm_analysis(df=df[df[,sequence]==x,],treatment=treatment,irtmodel=irtmodel) ) } listitems <- c(sapply(c('_1','_2','_3'),function(x) paste0(sapply(seq(1,nbitems),function(x) paste0('item',x)),x))) returndat <- data.frame(matrix(nrow=max(df[,sequence]),ncol=length(listitems))) colnames(returndat) <- listitems for (s in seq(1,max(df[,sequence]))) { for (k in seq(1,nbitems)) { returndat[s,paste0('item',k,'_1')] <- tam1[[s]]$item[k,'AXsi_.Cat1'] returndat[s,paste0('item',k,'_2')] <- tam1[[s]]$item[k,'AXsi_.Cat2']-tam1[[s]]$item[k,'AXsi_.Cat1'] returndat[s,paste0('item',k,'_3')] <- tam1[[s]]$item[k,'AXsi_.Cat3']-tam1[[s]]$item[k,'AXsi_.Cat2'] } } returndat <- returndat[,sort_by(listitems, lastChar)] returndat$beta <- sapply(seq(1,max(df[,sequence])),function(k) tam1[[k]]$beta[2]) returndat$se.beta <- 1.413612*sapply(seq(1,max(df[,sequence])),function(k) tam.se(tam1[[k]])$beta$se.Dim1[2] ) returndat$low.ci.beta <- returndat$beta-1.96*returndat$se.beta returndat$high.ci.beta <- returndat$beta+1.96*returndat$se.beta returndat$true.value.in.ci <- 1*(truebeta>returndat$low.ci.beta & truebetareturndat$high.ci.beta) if (truebeta==0) { returndat$beta.same.sign.truebeta <- NA } else { returndat$beta.same.sign.truebeta <- 1*(sign(truebeta)==sign(returndat$beta)) } returndat2 <- data.frame(J=rep(nbitems,max(df[,sequence])), M=1+max(df$item1), N=nrow(df[df$replication==1,])/2, eff.size=eff.size, dif.size= difsize, nb.dif= nbdif ) returndat <- cbind(returndat2,returndat) return(returndat) } replicate_pcm_analysis_m2 <- function(df=NULL,treatment='TT',irtmodel='PCM2',method='MML',sequence='replication',truebeta=0,eff.size=0,difsize=NA,nbdif=0) { nbitems <- sum(sapply(1:20,function(x) paste0('item',x)) %in% colnames(df)) resp <- df[,sapply(seq(1,nbitems),function(x) paste0('item',x))] if (method=='MML') { n <- max(df[,sequence]) print(n) tam1 <- pbmclapply(seq(1,n), function(x) pcm_analysis(df=df[df[,sequence]==x,],treatment=treatment,irtmodel=irtmodel) ) } listitems <- sapply(seq(1,nbitems),function(x) paste0('item',x)) returndat <- data.frame(matrix(nrow=max(df[,sequence]),ncol=length(listitems))) colnames(returndat) <- listitems for (s in seq(1,max(df[,sequence]))) { for (k in seq(1,nbitems)) { returndat[s,paste0('item',k)] <- tam1[[s]]$xsi$xsi[k] } } returndat$beta <- sapply(seq(1,max(df[,sequence])),function(k) tam1[[k]]$beta[2]) returndat$se.beta <- 1.413612*sapply(seq(1,max(df[,sequence])),function(k) tam.se(tam1[[k]])$beta$se.Dim1[2] ) returndat$low.ci.beta <- returndat$beta-1.96*returndat$se.beta returndat$high.ci.beta <- returndat$beta+1.96*returndat$se.beta returndat$true.value.in.ci <- 1*(truebeta>returndat$low.ci.beta & truebetareturndat$high.ci.beta) if (truebeta==0) { returndat$beta.same.sign.truebeta <- NA } else { returndat$beta.same.sign.truebeta <- 1*(sign(truebeta)==sign(returndat$beta)) } returndat2 <- data.frame(J=rep(nbitems,max(df[,sequence])), M=1+max(df$item1), N=nrow(df[df$replication==1,])/2, eff.size=eff.size, dif.size= difsize, nb.dif= nbdif ) returndat <- cbind(returndat2,returndat) return(returndat) } ####################################### ## SCENARIO ANALYSIS ####################################### registerDoMC(4) ######### Scenario 1: J=4 / M=2 #### A: H0 TRUE dat1 <- read.csv(file = '/home/corentin/Documents/These/Recherche/Simulations/Data/NoDIF/N100/scenario_1A_100.csv') dat2 <- read.csv(file = '/home/corentin/Documents/These/Recherche/Simulations/Data/NoDIF/N200/scenario_1A_200.csv') dat3 <- read.csv(file = '/home/corentin/Documents/These/Recherche/Simulations/Data/NoDIF/N300/scenario_1A_300.csv') res <- pbmclapply(c('dat1','dat2','dat3'),function(x) replicate_pcm_analysis_m2(get(x))) write.csv(res[[1]],'/home/corentin/Documents/These/Recherche/Simulation/Analysis/NoDIF/N100/scenario_1A_100.csv') write.csv(res[[2]],'/home/corentin/Documents/These/Recherche/Simulation/Analysis/NoDIF/N200/scenario_1A_200.csv') write.csv(res[[3]],'/home/corentin/Documents/These/Recherche/Simulation/Analysis/NoDIF/N300/scenario_1A_300.csv') ######### Scenario 2: J=4 / M=4 #### A: H0 TRUE dat1 <- read.csv(file = '/home/corentin/Documents/These/Recherche/Simulations/Data/NoDIF/N100/scenario_2A_100.csv') dat2 <- read.csv(file = '/home/corentin/Documents/These/Recherche/Simulations/Data/NoDIF/N200/scenario_2A_200.csv') dat3 <- read.csv(file = '/home/corentin/Documents/These/Recherche/Simulations/Data/NoDIF/N300/scenario_2A_300.csv') res <- pbmclapply(c('dat1','dat2','dat3'),function(x) replicate_pcm_analysis_m4(get(x))) write.csv(res[[1]],'/home/corentin/Documents/These/Recherche/Simulation/Analysis/NoDIF/N100/scenario_2A_100.csv') write.csv(res[[2]],'/home/corentin/Documents/These/Recherche/Simulation/Analysis/NoDIF/N200/scenario_2A_200.csv') write.csv(res[[3]],'/home/corentin/Documents/These/Recherche/Simulation/Analysis/NoDIF/N300/scenario_2A_300.csv') ######### Scenario 3: J=7 / M=2 #### A: H0 TRUE dat1 <- read.csv(file = '/home/corentin/Documents/These/Recherche/Simulations/Data/NoDIF/N100/scenario_3A_100.csv') dat2 <- read.csv(file = '/home/corentin/Documents/These/Recherche/Simulations/Data/NoDIF/N200/scenario_3A_200.csv') dat3 <- read.csv(file = '/home/corentin/Documents/These/Recherche/Simulations/Data/NoDIF/N300/scenario_3A_300.csv') res <- pbmclapply(c('dat1','dat2','dat3'),function(x) replicate_pcm_analysis_m2(get(x))) write.csv(res[[1]],'/home/corentin/Documents/These/Recherche/Simulation/Analysis/NoDIF/N100/scenario_3A_100.csv') write.csv(res[[2]],'/home/corentin/Documents/These/Recherche/Simulation/Analysis/NoDIF/N200/scenario_3A_200.csv') write.csv(res[[3]],'/home/corentin/Documents/These/Recherche/Simulation/Analysis/NoDIF/N300/scenario_3A_300.csv') ######### Scenario 4: J=7 / M=4 #### A: H0 TRUE dat1 <- read.csv(file = '/home/corentin/Documents/These/Recherche/Simulations/Data/NoDIF/N100/scenario_4A_100.csv') dat2 <- read.csv(file = '/home/corentin/Documents/These/Recherche/Simulations/Data/NoDIF/N200/scenario_4A_200.csv') dat3 <- read.csv(file = '/home/corentin/Documents/These/Recherche/Simulations/Data/NoDIF/N300/scenario_4A_300.csv') res <- pbmclapply(c('dat1','dat2','dat3'),function(x) replicate_pcm_analysis_m4(get(x))) write.csv(res[[1]],'/home/corentin/Documents/These/Recherche/Simulation/Analysis/NoDIF/N100/scenario_4A_100.csv') write.csv(res[[2]],'/home/corentin/Documents/These/Recherche/Simulation/Analysis/NoDIF/N200/scenario_4A_200.csv') write.csv(res[[3]],'/home/corentin/Documents/These/Recherche/Simulation/Analysis/NoDIF/N300/scenario_4A_300.csv')