I have two separate but related questions. I am currently running first-level analyses. One of my tasks is a simple (single-digit) arithmetic task, and we have modeled the conditions to be operation (subtraction or multiplication), size (small or large), and participant accuracy (correct or incorrect). Each onset file contains two rows: the top row for participant responses with their left hand and the bottom row containing responses from the run completed with their right hand.
Some participants have no errors on certain conditions (e.g., subtraction easy), leaving one of the lines in their onset file blank. The script runs, but the QC produces a warning that it was expecting two rows of onset timings. Should I be placing an asterisk on that line in the file, as described in this post? Or is it ok to have one of the rows empty?
Second question - some participants (less than half, but a decent amount) made no errors on a condition at all during either run, leaving their onset file completely empty. What is the best way to approach this? Should I place an asterisk on both of the lines in the file? Or should we consider changing how we've modeled this? We are only including participants who have accuracy above 70%, so maybe it's worth leaving incorrect responses as regressors of no interest for each condition. Let me know what you suggest.
I've pasted my script below and would appreciate any feedback or suggestions!
Yes, use * to indicate an empty run, or preferably, * *.
With a blank run, the programs would not know whether run 1 or run 2 was missing. So in general, one should indicate when a specific run (row) has no events. And to be more specific, if the maximum number of events per run is 1 (one), then you should either tell the program to use -local_times, or apply 2 * characters to indicate an empty run, as in:
* *
17.4 31.6 42.8
or a single event case
* *
17.4
For the second question, even using a single * in the entire file is fine. But 3dDeconvolve will complain about the empty regressor, so it is also necessary to include something like "-GOFORIT 9" in the -regress_opts_3dD option list.
The advantage of keeping these zero regressors in the model is just so the output stats dataset has consistent columns. Leaving incorrect responses as regressors of no interest is a fine way to go. It is good to model them, but you might not care to include the betas in any group analysis.
To clarify, would I use "-regress_local_times"? That's what I found when searching the afniproc.py webpage to better understand your suggestion. If so, is there a specific place in the script that needs to go?
Regarding "-GOFORIT 9" - how did you come up with the number 9? Also, if I use:
**
**
can I do without the "-GOFORIT 9", or will I still receive a warning?
Final question - may I use "-GOFORIT 9" for any participant, even if all their onset files contain sufficient data, or should it only be added for participants with no onset times?
Using -regress_local_times in afni_proc.py should resolve the need to use 2 * characters, but it would still be necessary to use at least 1, just to be in the good habit. Or maybe using -regress_local_times would be the good habit... either way.
Note that there should be a space between the 2 characters * *. That makes it look like 2 different events, which makes it look like local timing.
The 9 in -GOFORIT 9 is just a somewhat arbitrary number that is small, but probably large enough to handle 1 or 2 missing regrssors. The danger in using -GOFORIT is that you might also have a REAL problem with the timing files, which might get hidden by use of that option.
If you have empty regressors, -GOFORIT will be necessary. It looks like an error to 3dDeconvolve, so you are required to absolve the program of any guilt for continuing. :)
You can add -GOFORIT 9 for all subjects, but again there is a danger that there will be some accidental mistake that the option will hide (i.e. if it works when it should have failed, e.g. to have 2 of the exact same timing files). But if you have run a few subjects and are confident in the scripts, that can be an okay way to go.
Your response was very helpful; thank you! I updated my onset files to include * * for any blank line in the file (2 lines per file). I also updated my script to include -regress_local_times and -GOFORIT 9 after -regress_opts_3dD.
This was successful for participants who only had one blank line (now including * *) in their onset files.
However, for participants who have an onset file where both lines are blank and now have * * on both lines, the terminal gave me an error of ** ERROR: matrix column #17 is all zero!? ** FATAL ERROR: Cannot continue with all zero columns without -GOFORIT option! However - my script has the -GOFORIT option now, so I'm unsure why the terminal is still giving this error.
I tried updating the onset files for one participant to 0 * instead of * *, and received the same error in the terminal. Any suggestions?
Sorry about the confusion on that. There is also an -allzero_OK option, and I was not positive whether that was also necessary for that case, but I guess it is.
So in the case of all zero regressors, it looks like you need both -allzero_OK and -GOFORIT.
I'm still receiving **FATAL ERROR: Cannot continue with all zero columns without -GOFORIT option!
When I opened the proc.sub script, the -GOFORIT and -allzero_ok options were further down in the 3dDeconvolve section than I anticipated. I manually moved them to the top: 3dDeconvolve -input pb02.$subj.r*.scale+tlrc.HEAD \ -allzero_OK \ -GOFORIT 9 \
It still crashed I can send you the output terminal produces if that would be helpful. I have approximately 12 participants who have "blank" onset files with * * on each line that this will be an issue for. Could it be related to my onset files containing two lines that are both * *?
Update: we resolved the issue! The fatal error I was getting via terminal was related to reml, not 3dDeconvolve. I updated the afni_proc.py script to include:
-regress_opts_reml \
-GOFORIT \
This allowed my script to successfully process participants whose onset files contain * * on both lines.
The
National Institute of Mental Health (NIMH) is part of the National Institutes of
Health (NIH), a component of the U.S. Department of Health and Human
Services.