Clear all

hmrR Preprocessing - Basic questions

Posts: 2
Topic starter
New Member
Joined: 3 months ago

Hi everybody,

I just started using HomER for fNIRS analysis and still try to get a feeling for the processing options implemented.
During preprocessing some questions came up, the answers to which could be very obvious, but I want to be sure that I understand everything correctly.

I have an event-related design (MATLAB R2020a;Windows; Hitachi ETG-4000; Finger sequence tapping, 72 stimuli each lasting 100 ms; ISI jittered between 6 and 15 sec).
Please find attached my processing stream for all further information that might be necessary to answer my questions.

1) After spline interpolation to get rid of NaNs, I want to use channel pruning. I set drange to [1 4] which was the only value I found in the literature.
I have no idea whether it is a good choice and how I do make a suitable selection.

2) Moreover, I am not sure whether my settings for hmrR_GLM (especially the trange ([-2 12]) make sense given the shorter ISIs.

3) Also, I tested hmrR_GLM using OLS (+ Gaussian + drift 3rd order) but in the end decided to use iWLS + Gaussian based on literature speaking in favour of this approach.
Is it realistic that with OLS + Gaussian HRF amplitudes are in the range of at least 70 mikroMol mm whereas with iWLS it is reduced to between ~1.2-8 mikroMol mm?
When looking at output.misc.hmrstats.pval, all p-values are 0.9999 or 1.0000 (and of course beta values and t-values are very very small).

I used my processing stream with the example fingerTapping delivered with HomER3 and the same thing seems to happen there.

Am I confusing something?

4) For 2 files (out of 115) I get an Error Message: "Function hmrR_GLM generated error at line 37: unrecognized function or variable 'S'."
At first sight, I don't see any differences to the other snirf Files.

5) Is it correct that I can only do repeated measures analyses using a Matlab script that includes HomER3 functions?

I would appreciate any help!


d = hmrR_PreprocessIntensity_NAN(data)
replace NAN by spline interpolation of the nonnan values
d = hmrR_PreprocessIntensity_NAN(data);

mlActAuto = hmrR_PruneChannels(data, probe, mlActMan, tIncMan, dRange, SNRthresh, SDrange)
Prune channels from the measurement list if their signal is too weak, too
strong, or their standard deviation is too great. This function
updates MeasListAct based on whether data 'd' meets these conditions
as specified by'dRange' and 'SNRthresh'.
mlActAuto = hmrR_PruneChannels(data,probe,mlActMan,tIncMan,[1 4],5,[0 45]);

dod = hmrR_Intensity2OD(data)
Converts intensity data to optical density
dod = hmrR_Intensity2OD(data);

dod = hmrR_BandpassFilt(dod, hpf, lpf)
Perform a bandpass filter on time course data.
dod = hmrR_BandpassFilt(dod,0.01,0.1);

dc = hmrR_OD2Conc( dod, probe, ppf )
Convert OD to concentrations.
dc = hmrR_OD2Conc(dod,probe,[1 1]);

[dcAvg, dcAvgStd, nTrials, dcNew, dcResid, dcSum2, beta, R, hmrstats] = hmrR_GLM(dc, stim, probe, mlActAuto, Aaux, tIncAuto, rcMap, trange, glmSolveMethod, idxBasis, paramsBasis, rhoSD_ssThresh, flagNuisanceRMethod, driftOrder, c_vector)
This script estimates the HRF with options to specify the temporal basis
function type and corresponding parameters, whether or not to perform
simultaneous regression of short separation channels, drift order, and
whether or not to correct for motion artifacts. You can also choose the
method for solving the GLM matrix equation.
[dcAvg,dcAvgStd,nTrials,dcNew,dcResid,dcSum2,beta,R,hmrstats] = hmrR_GLM(dc,stim,probe,mlActAuto,Aaux,tIncAuto,rcMap,[-2 12],2,1,[1 1 0 0],0,1,0,0);