Thansk Gang,
I liked this:
> Alternatively, in this case, you can temporarily comment out those few lines in 3dMVM.R that performs model checking, and then run 3dMVM on those first and last 10 slices
Do you mind helping me identifying those lines?
It was not these (line 1558-1569)
# pick up a test voxel
if(!is.na(lop$maskFN)) {
idx <- which(lop$maskData == 1, arr.ind = T)
idx <- idx[floor(dim(idx)[1]/2),1:3]
xinit <- idx[1]; yinit <- idx[2]; zinit <- idx[3]
ii <- xinit; jj <- yinit; kk <- zinit
} else {
xinit <- dimx%/%3
if(dimy==1) {xinit <-1; yinit <- 1} else yinit <- dimy%/%2
if(dimz==1) {xinit <-1; zinit <- 1} else zinit <- dimz%/%2
ii <- xinit; jj <- yinit; kk <- zinit
}
It complained about not finding variable jj.
Instead, i tried removing the while-loop containing the model warning strings:
while(is.null(fm)) {
fm<-NULL
if (all(abs(inData[ii, jj, kk,]) < 10e-8)) fm<-NULL else {
lop$dataStr$Beta<-inData[ii, jj, kk,1:lop$NoFile]
if(any(!is.null(lop$vVars))) {
#lop$dataStr <- assVV(lop$dataStr, lop$vQV[1], vQV[ii,jj,kk,])
lop$dataStr <- assVV(lop$dataStr, lop$vQV[1], inData[ii,jj,kk,(lop$NoFile+1):(lop$NoFile+lop$nSubj)], lop$vVarCenters[1])
#if(all(is.na(lop$vVarCenters)))
# lop$dataStr[,lop$QV] <- scale(lop$dataStr[,lop$QV], center=TRUE, scale=F) else
# lop$dataStr[,lop$QV] <- scale(lop$dataStr[,lop$QV], center=lop$vVarCenters, scale=F)
}
#options(warn=-1)
if(lop$robust) {
suppressMessages(try(fm <- lmrob(lop$ModelForm, data=lop$dataStr), silent=TRUE))
if(!fm$converged) fm <- NULL
} else {
if(lop$afex_new) suppressMessages(try(fm <- aov_car(ModelForm, data=lop$dataStr, factorize=FALSE, type=lop$SS_type), silent=TRUE)) else
suppressMessages(try(fm <- aov.car(ModelForm, data=lop$dataStr, factorize=FALSE, type=lop$SS_type, return='full'), silent=TRUE)) }
if(!is.null(fm)) {
if(lop$robust) uvfm <- Anova(fm, test.statistic="F", type=3) else {
if(lop$afex_new) {
uvfm <- summary(fm)
uvfm0 <- anova(fm, intercept=T) # contains intercept when no within-subject factors involved, and provides GES
} else uvfm <- univ(fm$Anova) # univariate modeling
if(!is.na(lop$mVar)) if(is.na(lop$wsVars)) mvfm <- Anova(fm$lm, type=lop$SS_type, test='Pillai')
}
}
if(!is.null(fm)) if((lop$num_glt > 0) | (lop$num_glf > 0)) if(lop$robust) {
gltIn <- fm; iData <- NULL } else {
gltIn <- fm$lm; if(lop$afex_new) iData <- fm$data$idata else iData <- fm$idata
}
if(!is.null(fm)) if (lop$num_glt > 0) {
n <- 1
while(!is.null(fm) & (n <= lop$num_glt)) {
if(all(is.na(lop$gltList[[n]]))) { # Covariate testing only without factors involved
gltRes[[n]] <- tryCatch(testInteractions(gltIn, pairwise=NULL,
covariates=lop$covValList[[n]], slope=lop$slpList[[n]], adjustment="none", idata = iData),
error=function(e) NA) } else { # Involving factors
tryCatch(gltRes[[n]] <- testInteractions(gltIn, custom=lop$gltList[[n]], slope=lop$slpList[[n]],
covariates=lop$covValList[[n]], adjustment="none", idata = iData), error=function(e) NULL)
}
if(any(is.null(gltRes[[n]]))) {
fm <- NULL
errex.AFNI(paste("Failed at GLT No. ", n, "! Make sure that the model or GLT specification syntax is correct.", sep=''))
}
n <- n+1
}
}
if(!is.null(fm)) if (lop$num_glf > 0) {
n <- 1
while(!is.null(fm) & (n <= lop$num_glf)) { # this part may need fixes!
if(all(is.na(lop$glfList[[n]]))) { # Covariate testing only without factors involved: possible?
glfRes[[n]] <- tryCatch(testFactors(gltIn, pairwise=NULL,
covariates=lop$covValListF[[n]], slope=lop$slpListF[[n]], adjustment="none", idata = iData)$terms$`(Intercept)`$test,
error=function(e) NA) } else { # Involving factors
glfRes[[n]] <- tryCatch(testFactors(gltIn, levels=lop$glfList[[n]], slope=lop$slpListF[[n]],
covariates=lop$covValListF[[n]], adjustment="none", idata = iData)$terms$`(Intercept)`$test, error=function(e) NULL)
}
if(any(is.null(glfRes[[n]]))) fm <- NULL
n <- n+1
}
}
}
if(!is.null(fm)) {
print(sprintf("Great, test run passed at voxel (%i, %i, %i)!", ii, jj, kk))
} else if(ii<dimx) ii<-ii+1 else if(jj<dimy) {ii<-xinit; jj <- jj+1} else if(kk<dimz) {
ii<-xinit; jj <- yinit; kk <- kk+1 } else {
cat('~~~~~~~~~~~~~~~~~~~ Model test failed! ~~~~~~~~~~~~~~~~~~~\n')
cat('Possible reasons:\n\n')
cat('0) Make sure that R packages afex and phia have been installed. See the 3dMVM\n')
cat('help documentation for more details.\n\n')
cat('1) Inappropriate model specification with options -bsVars, -wsVars, or -qVars.\n')
cat('Note that within-subject or repeated-measures variables have to be declared\n')
cat('with -wsVars.\n\n')
cat('2) Incorrect specifications in general linear test coding with -gltCode.\n\n')
cat('3) Mistakes in data table. Check the data structure shown above, and verify\n')
cat('whether there are any inconsistencies.\n\n')
cat('4) Inconsistent variable names which are case sensitive. For example, factor\n')
cat('named Group in model specification and then listed as group in the table header\n')
cat('would cause grief for 3dMVM.\n\n')
cat('5) Not enough number of subjects. This may happen when there are two or more\n')
cat('withi-subject factors. For example, a model with two within-subject factors with\n')
cat('m and n levels respectively requires more than (m-1)*(n-1) subjects to be able to\n')
cat('model the two-way interaction with the multivariate approach.\n\n')
errex.AFNI("Quitting due to model test failure...")
}
}
That did not work either.
Then I instead commented the errex.AFNI parts in the while loop above. Then I got stuck in the loop.
Can you point me to the lines? =)
Afni-version:
afni version : Precompiled binary linux_centos_7_64: May 10 2022
: AFNI_22.1.09 'Antoninus Pius'
Edited 1 time(s). Last edit at 05/17/2022 09:12AM by Robin.