splits_evtl[[count+1]][[item]][[variable]][(knoten+1),splits_evtl[[count+1]][[item]][[variable]][(knoten+1),]<=split] <- NA # any split? anysplit <- !all(is.na(unlist(splits_evtl[[count+1]]))) # passe vars_evtl an vars_evtl[[count+1]] <- vars_evtl[[count]] vars_evtl[[count+1]][[item]] <- rep(0,n_knots) vars_evtl[[count+1]][[item]][c(knoten,knoten+1)] <- rep(vars_evtl[[count]][[item]][knoten],2) vars_evtl[[count+1]][[item]][-c(knoten,knoten+1)]<- vars_evtl[[count]][[item]][-knoten] if(length(which(!is.na(splits_evtl[[count+1]][[item]][[variable]][knoten,])))==0){ vars_evtl[[count+1]][[item]][knoten] <- vars_evtl[[count+1]][[item]][knoten]-1 } if(length(which(!is.na(splits_evtl[[count+1]][[item]][[variable]][knoten+1,])))==0){ vars_evtl[[count+1]][[item]][knoten+1] <- vars_evtl[[count+1]][[item]][knoten+1]-1 } # passe which_obs an which_obs[[count+1]] <- which_obs[[count]] which_obs[[count+1]][[item]] <- matrix(0,nrow=n_knots,ncol=npersons) which_obs[[count+1]][[item]][c(knoten,knoten+1),] <- matrix(rep(which_obs[[count]][[item]][knoten,],2),nrow=2,byrow=T) which_obs[[count+1]][[item]][-c(knoten,knoten+1),] <- which_obs[[count]][[item]][-knoten,] thresh <- ordered_values[[variable]][1:n_s[variable]][split] which_obs[[count+1]][[item]][knoten,DM_kov[,variable]>thresh] <- NA which_obs[[count+1]][[item]][(knoten+1),DM_kov[,variable]<=thresh] <- NA # passe numbers an numbers[[count+1]] <- numbers[[count]] numbers[[count+1]][[item]] <- numeric(length=n_knots) numbers[[count+1]][[item]][c(knoten,knoten+1)] <- c(left,right) numbers[[count+1]][[item]][-c(knoten,knoten+1)] <- numbers[[count]][[item]][-knoten] # trace if(trace){ cat(paste0("\n Split"," ",count,";"," ","Item"," ",item,"\n")) } # erhoehe counter count <- count+1 } else{ sig <- FALSE } } ################################################################################### # prettify results mod_opt <- mod_potential[[count]] ip_opt <- names(coef(mod_opt))[-c(1:(npersons-1))] theta_hat <- c(coef(mod_opt)[1:(npersons-1)],0) delta_hat <- coef(mod_opt)[npersons:length(coef(mod_opt))] if(count>1){ dif_items <- unique(splits[,2]) nodif_items <- c(1:nitems)[-dif_items] delta_hat_nodif <- sapply(nodif_items,function(j) delta_hat[grep(paste0("delta",j,":"),ip_opt)]) rownames(delta_hat_nodif) <- 1:nrow(delta_hat_nodif) colnames(delta_hat_nodif) <- paste0("delta", nodif_items) delta_hat_dif <- lapply(dif_items, function(j) delta_hat[grep(paste0("delta",j,":"),ip_opt)]) names(delta_hat_dif) <- dif_items help9 <- cumsum(c(0,(n_levels-1))) colnames(splits) <- c("var","item","split","level","node","number","left","right") splits <- data.frame(cbind(splits[,1:5,drop=FALSE],"variable"=rep(NA,nrow(splits)),"threshold"=rep(NA,nrow(splits)),splits[,6:8,drop=FALSE])) for(i in 1:nrow(splits)){ if(!is.null(colnames(DM_kov))){ splits[i,6] <- colnames(DM_kov)[splits[i,1]] } else{ splits[i,6] <- splits[i,1] } v2 <- lapply(1:nvar,function(j) ordered_values[[j]][-length(ordered_values[[j]])]) splits[i,7] <- v2[[splits[i,1]]][splits[i,3]] } splits <- splits[,-1] nthres <- length(unique(y))-1 for(i in dif_items){ info <- splits[splits[,"item"]==i,] endnodes <- get_endnodes(info) names(delta_hat_dif[[paste(i)]]) <- paste(rep(endnodes,each=nthres),rep(1:nthres,length(endnodes)),sep=":") } } else{ delta_hat_nodif <- sapply(1:nitems,function(j) delta_hat[grep(paste0("delta",j,":"),ip_opt)]) delta_hat_dif <- c() } to_return <- list("splits"=splits, "thetas"=theta_hat, "deltas_nodif"=delta_hat_nodif, "deltas_dif"=delta_hat_dif, "pvalues"=pvalues, "devs"=devs, "crits"=crits) return(to_return) } DIFtree(Y=dat1[,c('item1','item2','item3','item4','item5','item6','item7')],X=as.data.frame(dat1[,'TT']),model="PCM") DIFtree View(DIFtree) DIFtree <- function (Y, X, model = c("Rasch", "Logistic", "PCM"), type = c("udif", "dif", "nudif"), alpha = 0.05, nperm = 1000, trace = FALSE, penalize = FALSE, ...) { UseMethod("DIFtree") } DIFtree <- function (Y, X, model = c("Rasch", "Logistic", "PCM"), type = c("udif", "dif", "nudif"), alpha = 0.05, nperm = 1000, trace = FALSE, penalize = FALSE, ...) { browser() UseMethod("DIFtree") } DIFtree(Y=dat1[,c('item1','item2','item3','item4','item5','item6','item7')],X=as.data.frame(dat1[,'TT']),model="PCM") library(DIFtree) dat1 <- read.csv(file = '/home/corentin/Documents/These/Recherche/Simulations/Data/DIF/N300/scenario_13A_300.csv') dat1 <- dat1[dat1$replication==1] dat1 <- dat1[dat1$replication==1,] DIFtree(Y=dat1[,c('item1','item2','item3','item4','item5','item6','item7')],X=as.data.frame(dat1[,'TT']),model="PCM") function (Y, X, model = c("Rasch", "Logistic", "PCM"), type = c("udif", "dif", "nudif"), alpha = 0.05, nperm = 1000, trace = FALSE, penalize = FALSE, ...) { UseMethod("DIFtree") } DIFtree <- function (Y, X, model = c("Rasch", "Logistic", "PCM"), type = c("udif", "dif", "nudif"), alpha = 0.05, nperm = 1000, trace = FALSE, penalize = FALSE, ...) { UseMethod("DIFtree") } DIFtree(Y=dat1[,c('item1','item2','item3','item4','item5','item6','item7')],X=as.data.frame(dat1[,'TT']),model="PCM") library(DIFtree) dat1 <- read.csv(file = '/home/corentin/Documents/These/Recherche/Simulations/Data/DIF/N300/scenario_13A_300.csv') dat1 <- dat1[dat1$replication==1,] DIFtree(Y=dat1[,c('item1','item2','item3','item4','item5','item6','item7')],X=as.data.frame(dat1[,'TT']),model="PCM") DIFtree(Y=dat1[,c('item1','item2','item3','item4','item5','item6','item7')],X=as.data.frame(dat1[,'TT']),model="PCM",trace=T) dat1 <- read.csv(file = '/home/corentin/Documents/These/Recherche/Simulations/Data/DIF/N300/scenario_14A_300.csv') dat1 <- dat1[dat1$replication==1,] DIFtree(Y=dat1[,c('item1','item2','item3','item4','item5','item6','item7')],X=as.data.frame(dat1[,'TT']),model="PCM",trace=T) dat1$item1 <- as.factor(dat1$item1) dat1$item2 <- as.factor(dat1$item2) dat1$item3 <- as.factor(dat1$item3) dat1$item4 <- as.factor(dat1$item4) dat1$item5 <- as.factor(dat1$item5) dat1$item6 <- as.factor(dat1$item6) dat1$item7 <- as.factor(dat1$item7) DIFtree(Y=dat1[,c('item1','item2','item3','item4','item5','item6','item7')],X=as.data.frame(dat1[,'TT']),model="PCM",trace=T) data("data_sim_PCM") data_sim_PCM dat1 <- read.csv(file = '/home/corentin/Documents/These/Recherche/Simulations/Data/DIF/N300/scenario_14A_300.csv') dat1 <- dat1[dat1$replication==1,] dat1 DIFtree(Y=dat1[,c('item1','item2','item3','item4','item5','item6','item7')],X=as.data.frame(dat1[,'TT']),model="PCM",trace=T) dat1[,c('item1','item2','item3','item4','item5','item6','item7')] dat1[,c('item1','item2','item3','item4','item5','item6','item7')] <- dat1[,c('item1','item2','item3','item4','item5','item6','item7')]+1 dat1[,c('item1','item2','item3','item4','item5','item6','item7')] DIFtree(Y=dat1[,c('item1','item2','item3','item4','item5','item6','item7')],X=as.data.frame(dat1[,'TT']),model="PCM",trace=T) DIFtree(Y=dat1[,c('item1')],X=as.data.frame(dat1[,'TT']),model="PCM",trace=T) dat1[,c('item1')] dat1[,c('TT')] DIFtree(Y=dat1[,c('item1')],X=as.data.frame(dat1[,'TT']),model="PCM",trace=T) as.data.frame(dat1[,'TT']) DIFtree(Y=data.matrix(dat1[,c('item1','item2','item3','item4','item5','item6','item7')]),X=as.matrix(dat1[,'TT']),model="PCM",trace=T) DIFtree(Y=data.matrix(dat1[,c('item1','item2','item3','item4','item5','item6','item7')]),X=data.frame(x1=dat1[,'TT']),model="PCM",trace=T) data.matrix(dat1[,c('item1','item2','item3','item4','item5','item6','item7')]) Y2 <- data_sim_PCM[,1] X2 <- data_sim_PCM[,-1] Y2 X2 DIFtree(Y=as.matrix(dat1[,c('item1','item2','item3','item4','item5','item6','item7')]),X=data.frame(x1=dat1[,'TT']),model="PCM",trace=T) mod2 <- DIFtree(Y=Y2,X=X2,model="PCM",alpha=0.05,nperm=100,trace=TRUE) library(DIFtree) data(data_sim_Rasch) data(data_sim_PCM) Y1 <- data_sim_Rasch[,1] X1 <- data_sim_Rasch[,-1] Y2 <- data_sim_PCM[,1] X2 <- data_sim_PCM[,-1] ## Not run: mod1 <- DIFtree(Y=Y1,X=X1,model="Logistic",type="udif",alpha=0.05,nperm=1000,trace=TRUE) mod2 <- DIFtree(Y=Y2,X=X2,model="PCM",alpha=0.05,nperm=100,trace=TRUE) remove.packages("DIFtree") library(devtools) install_version("DIFtree","3.1.4") library(DIFtree) data(data_sim_Rasch) data(data_sim_PCM) Y1 <- data_sim_Rasch[,1] X1 <- data_sim_Rasch[,-1] Y2 <- data_sim_PCM[,1] X2 <- data_sim_PCM[,-1] ## Not run: mod1 <- DIFtree(Y=Y1,X=X1,model="Logistic",type="udif",alpha=0.05,nperm=1000,trace=TRUE) mod2 <- DIFtree(Y=Y2,X=X2,model="PCM",alpha=0.05,nperm=100,trace=TRUE) remove.packages("DIFtree") install_version("DIFtree","2.0.1") library(DIFtree) data(data_sim_Rasch) data(data_sim_PCM) Y1 <- data_sim_Rasch[,1] X1 <- data_sim_Rasch[,-1] Y2 <- data_sim_PCM[,1] X2 <- data_sim_PCM[,-1] ## Not run: mod1 <- DIFtree(Y=Y1,X=X1,model="Logistic",type="udif",alpha=0.05,nperm=1000,trace=TRUE) mod2 <- DIFtree(Y=Y2,X=X2,model="PCM",alpha=0.05,nperm=100,trace=TRUE) tree_PCM <- function(y, DM_kov, npersons, nitems, nvar, ordered_values, n_levels, n_s, alpha, nperm, trace ){ # design of PCM pp_design <- diag(npersons) # persons, person P reference pp_design <- pp_design[rep(1:nrow(pp_design),each=nitems),] pp_design <- pp_design[,-npersons] ip_design <- -1*diag(nitems) # item parameter ip_design <- ip_design[rep(1:nrow(ip_design),times=npersons),] dm_pcm <- cbind(pp_design,ip_design) names_pcm <- c(paste("theta",1:(npersons-1),sep=""),paste("delta",1:nitems,sep="")) colnames(dm_pcm) <- names_pcm # functions to build design thresholds <- lapply(1:nvar, function(j) ordered_values[[j]][-length(ordered_values[[j]])]) v <- lapply(1:nvar,function(j) 1:(n_levels[j]-1)) w <- lapply(1:nvar, function(j) rep(paste0("s",j),n_s[j])) design_one <- function(x,threshold,upper){ if(upper){ ret <- ifelse(x > threshold,1,0) } else{ ret <- ifelse(x > threshold,0,1) } return(ret) } design <- function(x,thresholds,upper){ ret <- sapply(thresholds, function(j) design_one(x,j,upper)) return(ret) } whole_design <- function(X,var,item,thresholds,upper=TRUE){ design_tree <- matrix(0,nrow=nitems*npersons,ncol=length(thresholds[[var]])) rows <- seq(item,(nitems*npersons),by=nitems) design_tree[rows,] <- design(X[,var],thresholds[[var]],upper) z <- rep(paste0(ifelse(upper,"_u","_l"),item),length(thresholds[[var]])) colnames(design_tree) <- paste0(w[[var]],v[[var]],z) return(design_tree) } designlists <- function(X,thresholds,upper=TRUE){ ret <- lapply(1:nitems, function(j){ lapply(1:nvar, function(var){ whole_design(X,var,j,thresholds,upper) }) }) return(ret) } ######################################################################################### mod_potential <- list() devs <- c() crits <- c() splits <- c() pvalues <- c() ip <- list() vars_evtl <- list() splits_evtl <- list() which_obs <- list() numbers <- list() count <- 1 numbers[[1]] <- lapply(1:nitems,function(j) 1) which_obs[[1]] <- lapply(1:nitems,function(j) matrix(1:npersons,nrow=1)) splits_evtl[[1]] <- lapply(1:nitems,function(j) lapply(1:nvar, function(var) matrix(1:n_s[var],nrow=1))) vars_evtl[[1]] <- lapply(1:nitems,function(j) nvar) ip[[1]] <- lapply(1:nitems,function(j) paste0("delta",j)) ### PCM ### pp <- paste("theta",1:(npersons-1),sep="") help_p <- paste0(pp,collapse="+") help01 <- formula(paste("y~",help_p,"+",paste0(unlist(ip[[1]]),collapse="+"),"-1")) help02 <- formula(paste0("FALSE~",paste0(unlist(ip[[1]]),collapse="+"))) dat0 <- data.frame(y,dm_pcm) mod0 <- tryCatch(vglm(help01, family=acat(parallel=help02, reverse=FALSE), data=dat0, na.action=na.omit, checkwz=FALSE), error = function(e) stop("PCM not identified!", call. =FALSE)) start <- VGAM::predict(mod0) mod_potential[[1]] <- mod0 design_upper <- designlists(DM_kov,thresholds) design_lower <- designlists(DM_kov,thresholds,upper=FALSE) sig <- TRUE anysplit <- TRUE # function to compute all models in one knot allmodels <- function(i,var,kn,design_lower,design_upper){ deviances <- rep(0,n_s[var]) help_kn <- ip[[count]][[i]][kn] help1 <- paste0(unlist(ip[[count]])[-which(unlist(ip[[count]])==help_kn)],collapse="+") splits_aktuell <- splits_evtl[[count]][[i]][[var]][kn,] splits_aktuell <- splits_aktuell[!is.na(splits_aktuell)] obs0 <- which(!is.na(which_obs[[count]][[i]][kn,])) if(length(splits_aktuell)>0){ for(j in splits_aktuell){ n_lower <- sum(DM_kov[obs0,var]<=ordered_values[[var]][j]) n_upper <- sum(DM_kov[obs0,var]>ordered_values[[var]][j]) if(n_lower>=30 & n_upper>=30){ dat <- data.frame(dat0,design_lower[[i]][[var]][,j,drop=FALSE],design_upper[[i]][[var]][,j,drop=FALSE]) help2 <- paste(ip[[count]][[i]][kn],c(colnames(design_lower[[i]][[var]])[j],colnames(design_upper[[i]][[var]])[j]),sep=":") help3 <- paste(help2,collapse="+") help41 <- formula(paste("y~",help1,"+",help3,"-1")) help42 <- formula(paste0("FALSE~",help1,"+",help3)) suppressWarnings( mod <- try(vglm(help41, family=acat(parallel=help42, reverse=FALSE), data=dat, checkwz=FALSE, na.action=na.omit, offset=start)) ) if(class(mod)!="try-error"){ deviances[j] <- deviance(mod0)-deviance(mod) } } } } return(deviances) } # estimate tree while(sig & anysplit){ # compute all models dv <- lapply(1:nvar,function(var) { lapply(1:nitems,function(i) { n_knots <- length(ip[[count]][[i]]) deviances <- matrix(rep(0,n_s[var]*n_knots),ncol=n_knots) for(kn in 1:n_knots){ deviances[,kn] <- allmodels(i,var,kn,design_lower,design_upper) } return(deviances) }) }) # select optimum variable <- which.max(lapply(1:nvar,function(j) max(unlist(dv[[j]])))) item <- which.max(lapply(1:nitems, function(j) max(dv[[variable]][[j]]))) split <- as.numeric(which(dv[[variable]][[item]]==max(dv[[variable]][[item]]),arr.ind=TRUE)[,1]) knoten <- as.numeric(which(dv[[variable]][[item]]==max(dv[[variable]][[item]]),arr.ind=TRUE)[,2]) if(length(split)>1){ split <- split[1] knoten <- knoten[1] warning(paste("Maximum in iteration ",count," not uniquely defined")) } ip_old <- ip[[count]][[item]][knoten] level <- length(strsplit(ip_old,":")[[1]]) number <- numbers[[count]][[item]][knoten] left <- max(numbers[[count]][[item]])+1 right <- max(numbers[[count]][[item]])+2 # compute permutation test dev <- rep(NA,nperm) for(perm in 1:nperm){ dv_perm <- rep(0,n_s[variable]) obs_aktuell <- which_obs[[count]][[item]][knoten,] obs_aktuell <- obs_aktuell[!is.na(obs_aktuell)] DM_kov_perm <- DM_kov DM_kov_perm[obs_aktuell,variable] <- sample(DM_kov_perm[obs_aktuell,variable],length(obs_aktuell)) design_upper_perm <- design_upper design_upper_perm[[item]][[variable]] <- whole_design(DM_kov_perm,variable,item,thresholds) design_lower_perm <- design_lower design_lower_perm[[item]][[variable]] <- whole_design(DM_kov_perm,variable,item,thresholds,upper=FALSE) dv_perm <- allmodels(item,variable,knoten,design_lower_perm,design_upper_perm) dev[perm] <- max(dv_perm) if(trace){ cat(".") } } # test decision crit_val <- quantile(dev,1-(alpha/vars_evtl[[count]][[item]][knoten])) proof <- max(dv[[variable]][[item]]) > crit_val devs[count] <- max(dv[[variable]][[item]]) crits[count] <- crit_val pvalues[count] <- length(which(dev>max(dv[[variable]][[item]])))/nperm if(proof){ # get new formula help_kn2 <- ip[[count]][[item]][knoten] help5 <- paste0(unlist(ip[[count]])[-which(unlist(ip[[count]])==help_kn2)],collapse="+") help6 <- paste(ip[[count]][[item]][knoten],c(colnames(design_lower[[item]][[variable]])[split],colnames(design_upper[[item]][[variable]])[split]),sep=":") help7 <- paste(help6,collapse="+") help81 <- formula(paste("y~",help_p,"+",help5,"+",help7,"-1")) help82 <- formula(paste0("FALSE~",help5,"+",help7)) ###################### if(level>1){ help_kn4 <- lu(c(),1,level-1,c()) help_kn5 <- unlist(strsplit(help_kn2,"")) help_kn6 <- paste0(help_kn5[which(help_kn5=="_")+1],collapse="") knoten2 <- which(help_kn4==help_kn6) } else{ knoten2 <- knoten } ###################### splits <- rbind(splits,c(variable,item,split,level,knoten2,number,left,right)) # fit new model dat <- dat0 <- data.frame(dat0,design_lower[[item]][[variable]][,split,drop=FALSE],design_upper[[item]][[variable]][,split,drop=FALSE]) suppressWarnings( mod0 <- mod_potential[[count+1]] <- tryCatch(vglm(help81, family=acat(parallel=help82, reverse=FALSE), data=dat, na.action=na.omit, checkwz=FALSE, etastart=start), error = function(e) stop("IFT_PCM not identified!", call. =FALSE)) ) start <- VGAM::predict(mod0) # generiere neue itemparameter ip[[count+1]] <- ip[[count]] ip[[count+1]][[item]] <- rep("",length(ip[[count]][[item]])+1) ip[[count+1]][[item]][c(knoten,knoten+1)] <- help6 ip[[count+1]][[item]][-c(knoten,knoten+1)]<- ip[[count]][[item]][-knoten] # passe splits_evtl an n_knots <- length(ip[[count+1]][[item]]) splits_evtl[[count+1]] <- splits_evtl[[count]] for(var in 1:nvar){ splits_evtl[[count+1]][[item]][[var]] <- matrix(0,nrow=n_knots,ncol=n_s[var]) splits_evtl[[count+1]][[item]][[var]][c(knoten,knoten+1),] <- matrix(rep(splits_evtl[[count]][[item]][[var]][knoten,],2),nrow=2,byrow=T) splits_evtl[[count+1]][[item]][[var]][-c(knoten,knoten+1),] <- splits_evtl[[count]][[item]][[var]][-knoten,] } splits_evtl[[count+1]][[item]][[variable]][knoten,splits_evtl[[count+1]][[item]][[variable]][knoten,]>=split] <- NA splits_evtl[[count+1]][[item]][[variable]][(knoten+1),splits_evtl[[count+1]][[item]][[variable]][(knoten+1),]<=split] <- NA # any split? anysplit <- !all(is.na(unlist(splits_evtl[[count+1]]))) # passe vars_evtl an vars_evtl[[count+1]] <- vars_evtl[[count]] vars_evtl[[count+1]][[item]] <- rep(0,n_knots) vars_evtl[[count+1]][[item]][c(knoten,knoten+1)] <- rep(vars_evtl[[count]][[item]][knoten],2) vars_evtl[[count+1]][[item]][-c(knoten,knoten+1)]<- vars_evtl[[count]][[item]][-knoten] if(length(which(!is.na(splits_evtl[[count+1]][[item]][[variable]][knoten,])))==0){ vars_evtl[[count+1]][[item]][knoten] <- vars_evtl[[count+1]][[item]][knoten]-1 } if(length(which(!is.na(splits_evtl[[count+1]][[item]][[variable]][knoten+1,])))==0){ vars_evtl[[count+1]][[item]][knoten+1] <- vars_evtl[[count+1]][[item]][knoten+1]-1 } # passe which_obs an which_obs[[count+1]] <- which_obs[[count]] which_obs[[count+1]][[item]] <- matrix(0,nrow=n_knots,ncol=npersons) which_obs[[count+1]][[item]][c(knoten,knoten+1),] <- matrix(rep(which_obs[[count]][[item]][knoten,],2),nrow=2,byrow=T) which_obs[[count+1]][[item]][-c(knoten,knoten+1),] <- which_obs[[count]][[item]][-knoten,] thresh <- ordered_values[[variable]][1:n_s[variable]][split] which_obs[[count+1]][[item]][knoten,DM_kov[,variable]>thresh] <- NA which_obs[[count+1]][[item]][(knoten+1),DM_kov[,variable]<=thresh] <- NA # passe numbers an numbers[[count+1]] <- numbers[[count]] numbers[[count+1]][[item]] <- numeric(length=n_knots) numbers[[count+1]][[item]][c(knoten,knoten+1)] <- c(left,right) numbers[[count+1]][[item]][-c(knoten,knoten+1)] <- numbers[[count]][[item]][-knoten] # trace if(trace){ cat(paste0("\n Split"," ",count,";"," ","Item"," ",item,"\n")) } # erhoehe counter count <- count+1 } else{ sig <- FALSE } } ################################################################################### # prettify results mod_opt <- mod_potential[[count]] ip_opt <- names(coef(mod_opt))[-c(1:(npersons-1))] theta_hat <- c(coef(mod_opt)[1:(npersons-1)],0) delta_hat <- coef(mod_opt)[npersons:length(coef(mod_opt))] if(count>1){ dif_items <- unique(splits[,2]) nodif_items <- c(1:nitems)[-dif_items] delta_hat_nodif <- sapply(nodif_items,function(j) delta_hat[grep(paste0("delta",j,":"),ip_opt)]) rownames(delta_hat_nodif) <- 1:nrow(delta_hat_nodif) colnames(delta_hat_nodif) <- paste0("delta", nodif_items) delta_hat_dif <- lapply(dif_items, function(j) delta_hat[grep(paste0("delta",j,":"),ip_opt)]) names(delta_hat_dif) <- dif_items help9 <- cumsum(c(0,(n_levels-1))) colnames(splits) <- c("var","item","split","level","node","number","left","right") splits <- data.frame(cbind(splits[,1:5,drop=FALSE],"variable"=rep(NA,nrow(splits)),"threshold"=rep(NA,nrow(splits)),splits[,6:8,drop=FALSE])) for(i in 1:nrow(splits)){ if(!is.null(colnames(DM_kov))){ splits[i,6] <- colnames(DM_kov)[splits[i,1]] } else{ splits[i,6] <- splits[i,1] } v2 <- lapply(1:nvar,function(j) ordered_values[[j]][-length(ordered_values[[j]])]) splits[i,7] <- v2[[splits[i,1]]][splits[i,3]] } splits <- splits[,-1] nthres <- length(unique(y))-1 for(i in dif_items){ info <- splits[splits[,"item"]==i,] endnodes <- get_endnodes(info) names(delta_hat_dif[[paste(i)]]) <- paste(rep(endnodes,each=nthres),rep(1:nthres,length(endnodes)),sep=":") } } else{ delta_hat_nodif <- sapply(1:nitems,function(j) delta_hat[grep(paste0("delta",j,":"),ip_opt)]) delta_hat_dif <- c() } to_return <- list("splits"=splits, "thetas"=theta_hat, "deltas_nodif"=delta_hat_nodif, "deltas_dif"=delta_hat_dif, "pvalues"=pvalues, "devs"=devs, "crits"=crits) return(to_return) } library(VGAM) mod2 <- DIFtree(Y=Y2,X=X2,model="PCM",alpha=0.05,nperm=100,trace=TRUE) colnames(res.dat.dif) max(res.dat[res.dat$scenario.type=="A",]$h0.rejected.p) max(1-res.dat[res.dat$scenario.type!="A",]$beta.same.sign.truebeta.signif.p) max(res.dat[res.dat$scenario.type!="A",]$beta.same.sign.truebeta.signif.p) res.dat[res.dat$scenario.type!="A",]$beta.same.sign.truebeta.signif.p View(res.dat) res.dat[res.dat$beta.same.sign.truebeta.p==NaN & res.dat$eff.size!=0,] res.dat[res.dat$beta.same.sign.truebeta.p==NaN & res.dat$eff.size!=0,]$N res.dat[is.nan(res.dat$beta.same.sign.truebeta.p) & res.dat$eff.size!=0,]$N res.dat[res.dat$N==50,] res.dat[res.dat$N==50,]$eff.size max(res.dat[res.dat$scenario.type!="A" & res.dat$N!=50,]$beta.same.sign.truebeta.signif.p) max(1-res.dat[res.dat$scenario.type!="A" & res.dat$N!=50,]$beta.same.sign.truebeta.signif.p) max(1-res.dat[res.dat$scenario.type!="A" & res.dat$N!=50,]$beta.same.sign.truebeta.p)